首页 > 代码库 > 递归函数、生成器、装饰器
递归函数、生成器、装饰器
递归函数、生成器、装饰器
递归: 在函数执行中调用自身
必须有边界条件,递归前进段和递归返回段
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 wrapper@timeitdef foo(): print(‘in foo()‘) foo()
in foo() used: 0.0013369999999994775
本文出自 “左手右手” 博客,请务必保留此出处http://mofeihu.blog.51cto.com/1825994/1877144
递归函数、生成器、装饰器
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。