12、装饰器模板、yied与return的异同

1、装饰器模板
def deco1(func1): # func1=被装饰的index的内存地址
def wrapper1(args, kwargs):
print('
**1')
res1 = func1(
args, **kwargs)
print('end1')
return res1

    return wrapper1


def deco2(func2):  # func2=被装饰的index的内存地址
    def wrapper2(*args, **kwargs):
        print('******2')
        res2 = func2(*args, **kwargs)
        print('end2')
        return res2

    return wrapper2


def deco3(func3):  # func3=被装饰的index的内存地址
    def wrapper3(*args, **kwargs):
        print('******3')
        res3 = func3(*args, **kwargs)
        print('end3')
        return res3

    return wrapper3

    # index=wrapper1的内存地址


@deco1  # deco1(wrapper2的内存地址)-->wrapper1的内存地址
@deco2  # deco2(wrapper3的内存地址)-->wrapper2的内存地址
@deco3  # deco3(被装饰的index的内存地址)-->wrapper3的内存地址
def index():
    print('index...')


index()

2、yied与return的异同
相同点:返回值层面的用法都一样
不同点:return只能返回一次,而yield可以返回多次
生成器:
def func():
print('xxx')
yield
print('yyy')
yield
print('zzz')
yield
当函数内出现yield关键字,再调用函数并不会触发函数体代码的运行,会返回一个生成器
生成器就是一种自定义的迭代器
g = func()
res = next(g)

案例:造迭代器
def func()
    res=1
    while True:
        yield res
        res +=1
g=func()
原文地址:https://www.cnblogs.com/zhaokunhao/p/14211393.html