生成器和装饰器

生成器

  

  在Python中,这种一边循环一边计算的机制,称为生成器:generator

  生成器是一个特殊的程序,可以被用作控制循环的迭代行为

  python中生成器是迭代器的一种,使用yield返回值函数,每次调用yield会暂停,而可以使用next()函数和send()函数恢复生成器

  生成器就是可迭代对象,延迟计算、节省内存

  创建:生成器函数,生成器表达式

       #生成器:generator_ex = (x*for 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         break
16  
17  
18 结果:
19 generator:  1
20 generator:  1
21 generator:  2
22 generator:  3
23 generator:  5
24 generator:  8
25 生成器返回值: 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)

  

原文地址:https://www.cnblogs.com/roygood/p/9719823.html