当前位置:
首页 >
递归函数、生成器、装饰器
发布时间:2025/4/16
55
豆豆
生活随笔
收集整理的这篇文章主要介绍了
递归函数、生成器、装饰器
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
递归函数、生成器、装饰器
递归: 在函数执行中调用自身
必须有边界条件,递归前进段和递归返回段
python中递归有层次限制
递归函数实现阶乘
def fact(n): if n <= 1:return 1else:return n * fact(n-1)调用:fact(3)=3fact(2)=32fact(1)=32*1
fact(3)6实现斐波拉契数列
def fib1(n):if n <= 1:return 1else:return(fib1(n-1)+fib1(n-2))for i in range(10):print(fib1(i))1 1 2 3 5 8 13 21 34 55生成器
普通函数遇到return返回函数结束,再次执行又从第一条语句开始
生成器遇到yield返回函数被挂起,再次执行则从上一次返回yield语句的地方继续执行
定义一个生成器函数
def gen():print('step 1')yield 1print('step 2')yield 2print('step 3')yield 3a=gen()next(a)step 11next(a)step 22装饰器:在不改变已存在对象的基础上为其添加额外功能
典型应用:插入日志、测试性能、事物处理
给foo函数计算运行时间
import timedef foo():print('in foo()')# 定义一个计时器,传入一个函数,并返回另一个附加了计时功能的方法def timeit(func):# 定义一个内嵌的包装函数,给传入的函数加上计时功能的包装def wrapper():start = time.clock()func()end =time.clock()print('used:', end - start)# 将包装后的函数返回return wrapperfoo = timeit(foo)foo()in foo() used: 0.0018359999999972842python装饰器提供的语法糖效果,下面的@timeit跟上面的foo = timeit(foo)是完全等价的
import timedef timeit(func):# 定义一个内嵌的包装函数,给传入的函数加上计时功能的包装def wrapper():start = time.clock()func()end =time.clock()print('used:', end - start)# 将包装后的函数返回return wrapper@timeitdef foo():print('in foo()')foo()in foo() used: 0.0013369999999994775转载于:https://blog.51cto.com/mofeihu/1877144
总结
以上是生活随笔为你收集整理的递归函数、生成器、装饰器的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: C# 字符串 数据类型 判断 与特定规则
- 下一篇: 如何跟项目经理和开发人员反馈安全测试报告