装饰器,生成器

装饰器:使用装饰函数在函数执行前和执行后分别附加额外功能

使用装饰函数在函数执行前和执行后分别附加额外功能

def deco(func):
    print("before myfunc() called.")
    func()
    print("  after myfunc() called.")
    return func

 

def myfunc():
    print(" myfunc() called.")

 

myfunc = deco(myfunc)


都是一样的

def deco(func):
    print("before myfunc() called.")
    func()
    print("  after myfunc() called.")
    return func

 

@deco
def myfunc():
    print(" myfunc() called.")


装饰起是把函数或者类进行专门处理的闭包,也就是把跟直接这么写相同(myfunc = deco(myfunc)) 对demo函数对输入输出进行处理,不改变原函数


生成器原理:这种一边循环一边计算的机制,下一个元素是通过计算得到的,不是已经存在的

生成器只要把一个列表生成式的[]改成(),就创建了一个generator:

>>> L = [x * x for x in range(10)]
>>> L
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> g = (x * x for x in range(10))
>>> g
<generator object <genexpr> at 0x104feab40>

generator的next()方法:把元素一个一个打印出来

>>> g.next()
0
>>> g.next()
1
>>> g.next()
4

生成斐波拉契数列

def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        yield b
        a, b = b, a + b
        n = n + 1

yield为生成器的关键字,遇到yield代表停止,遇到return 和普通函数一样返回








posted @ 2016-08-08 16:06  意发并行  阅读(163)  评论(0编辑  收藏  举报