生成器
在Python中,这种一边循环一边计算的机制,称为生成器:generator
生成器是一个特殊的程序,可以被用作控制循环的迭代行为
python中生成器是迭代器的一种,使用yield返回值函数,每次调用yield会暂停,而可以使用next()函数和send()函数恢复生成器
生成器就是可迭代对象,延迟计算、节省内存
创建:生成器函数,生成器表达式
#生成器:
generator_ex
=
(x
*
x
for
x
in
range
(
10
))
1 def fib(max): 2 n,a,b =0,0,1 3 while n < max: 4 yield b 5 a,b =b,a+b 6 n = n+1 7 return 'done' 8 g = fib(6) 9 while True:10 try:11 x = next(g)12 print('generator: ',x)13 except StopIteration as e:14 print("生成器返回值:",e.value)15 break16 17 18 结果:19 generator: 120 generator: 121 generator: 222 generator: 323 generator: 524 generator: 825 生成器返回值: done
装饰器
装饰器本质是函数,为其他函数添加附加功能
原则:不修改主函数源代码,不修改主函数的调用方式
装饰器 = 高阶函数 + 函数嵌套 + 闭包
高阶函数
定义:函数接收的参数是一个函数名,或函数的返回值是一个函数名
函数嵌套
函数内包着函数
实现import time
def timmer(func): #func=test def wrapper(): # print(func) start_time=time.time() res = func() #就是在运行test() stop_time = time.time() print('运行时间是%s' %(stop_time-start_time)) return res return wrapper@timmer #test=timmer(test)def test(): time.sleep(3) print('test函数运行完毕') return 'test的返回值' res=test() print(res)# res=timmer(test) #返回的是wrapper的地址# res() #执行的是wrapper()# test=timmer(test) #返回的是wrapper的地址# test() #执行的是wrapper()# @timmer 就相当于 test=timmer(test)