zoukankan      html  css  js  c++  java
  • 生成器和装饰器

    生成器

      

      在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)

      

  • 相关阅读:
    100 numpy exercises
    IndentationError: unindent does not match any outer indentation level
    Git详解之七:自定义Git
    Git详解之六:Git工具
    Git详解之五:分布式Git
    Git详解之四:服务器上的Git
    Git详解之三:Git分支
    Git详解之二:Git基础
    Git详解之一:Git起步
    Jquery基础之事件操作
  • 原文地址:https://www.cnblogs.com/roygood/p/9719823.html
Copyright © 2011-2022 走看看