一、递归函数
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 所有, 如有侵权,请联系我们删除。
版权归原作者 Win_Dong 所有, 如有侵权,请联系我们删除。
