0


Python递归函数、匿名函数lambda、类的常用装饰器

一、递归函数

1、什么是递归函数

  • 一个函数不停的将自己反复执行
  • 通过返回值,直接执行自身函数

2、递归的定义方法

# coding : utf-8

count = 0

def test():
    global count
    count += 1

    if count != 5:
        print('The count condition is not met. You need to re-execute yourself. '
              'The current count is %s' %count)
        return test()
    else:
        print('count is %s' %count)

test()

3、递归函数的说明

  • 内存溢出
  • 避免滥用递归

二、匿名函数lambda

1、lambda功能

  • 定义一个轻量化的函数
  • 即用即删除,很适合需要完成一项功能,但是此功能只在此一处使用

2、lambda定义

# coding : utf-8

f = lambda : print(1)
f()

f1 = lambda x, y=2 : x > y
print(f1(1))

users = [
    {'name' : 'dewei'},
    {'name' : 'xiaomu'},
    {'name' : 'asan'}
]
users.sort(key=lambda  x: x['name'])
print(users)

三、装饰器

1、什么是装饰器

  • 也是一种函数
  • 可以接受函数作为参数
  • 可以返回函数
  • 接收一个函数,内部对其处理,然后返回一个新函数,动态的增强函数功能
  • 将c函数在a函数中执行,在a函数中可以选择执行或不执行c函数,也可以对c函数的结果进行二次加工处理

2、装饰器的定义

3、装饰器的用法

  • 将被调用的函数直接作为参数传入装饰器的外围函数括弧
  • 将装饰器与被调用函数绑定在一起
  • @符号+装饰器函数放在被调用函数的上一行,被调用的函数正常定义,只需要直接调用被执行函数即可
  • # coding : utf-8def check_str(func): print('func:', func) def inner(*args, **kwargs): print('args:', args, kwargs) result = func(*args, **kwargs) if result == 'ok': return 'result is %s' % result else: return 'result is failed:%s' % result return inner@check_strdef test(data): return dataresult = test(data='no')print(result)result = test(data='ok')print(result)

四、类的常用装饰器

1、classmethod

  • 将类函数可以不经过实例化而直接被调用
  • # coding : utf-8class Test(object): def __init__(self, a): self.a = a def run(self): print('run') self.jump() @classmethod def jump(cls): print('jump') # cls.run()t = Test('a')t.run()# Test.jump()

2、staticmethod

  • 将类函数可以不经过实例化而直接被调用,被该装饰器调用的函数不许传递self或cls参数,且无法在该函数内调用其他类函数或类变量
  • # coding : utf-8class Test(object): def __init__(self, a): self.a = a def run(self): print('run') self.jump() self.sleep() @classmethod def jump(cls): print('jump') # cls.run() @staticmethod def sleep(): print('i want to sleep')t = Test('a')t.run()

3、property

  • 将类函数的执行免去括弧,类似于调用属性(变量)
  • class Test1(object): def __init__(self, name): self.__name = name @property def name(self): return self.__name @name.setter def name(self, value): self.__name = valuet1 = Test1(name='dewei')print(t1.name)t1.name = 'xiaomu'print(t1.name)
标签: python

本文转载自: https://blog.csdn.net/run_in_road/article/details/129773667
版权归原作者 Win_Dong 所有, 如有侵权,请联系我们删除。

“Python递归函数、匿名函数lambda、类的常用装饰器”的评论:

还没有评论