递归函数生成器装饰器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归函数生成器装饰器相关的知识,希望对你有一定的参考价值。
递归函数、生成器、装饰器
递归: 在函数执行中调用自身
必须有边界条件,递归前进段和递归返回段
python中递归有层次限制
递归函数实现阶乘
def fact(n): if n <= 1: return 1 else: return n * fact(n-1)
调用:fact(3)=3fact(2)=32fact(1)=32*1
fact(3)
6
实现斐波拉契数列
def fib1(n): if n <= 1: return 1 else: 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 1 print(‘step 2‘) yield 2 print(‘step 3‘) yield 3
a=gen()next(a)
step 1
1
next(a)
step 2
2
装饰器:在不改变已存在对象的基础上为其添加额外功能
典型应用:插入日志、测试性能、事物处理
给foo函数计算运行时间
import time def foo(): print(‘in foo()‘) # 定义一个计时器,传入一个函数,并返回另一个附加了计时功能的方法def timeit(func): # 定义一个内嵌的包装函数,给传入的函数加上计时功能的包装 def wrapper(): start = time.clock() func() end =time.clock() print(‘used:‘, end - start) # 将包装后的函数返回 return wrapper foo = timeit(foo)foo()
in foo() used: 0.0018359999999972842
python装饰器提供的语法糖效果,下面的@timeit跟上面的foo = timeit(foo)是完全等价的
import timedef timeit(func): # 定义一个内嵌的包装函数,给传入的函数加上计时功能的包装 def wrapper(): start = time.clock() func() end =time.clock() print(‘used:‘, end - start) # 将包装后的函数返回 return [email protected] foo(): print(‘in foo()‘) foo()
in foo() used: 0.0013369999999994775
本文出自 “左手右手” 博客,请务必保留此出处http://mofeihu.blog.51cto.com/1825994/1877144
以上是关于递归函数生成器装饰器的主要内容,如果未能解决你的问题,请参考以下文章
模块调用,datetime,time,logging,递归,双层装饰器, json,pickle迭代器和生成器
函数嵌套 ,名称空间与作用域 ,闭包函数 ,装饰器 ,迭代器, 生成器 三元表达式,列表解析,生成器表达式 递归与二分法, 内置函数