• 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()
  • 相关阅读:
    COJ979 WZJ的数据结构(负二十一)
    COJ980 WZJ的数据结构(负二十)
    奇怪的错误
    COJ883 工艺品
    COJ885 LCS???
    COJ559 回文
    hdu1505(dp求最大子矩阵)
    hdu1506(dp求最大子矩阵)
    hdu2569(递推dp)
    hdu1081(最大子矩阵)
  • 原文地址:https://www.cnblogs.com/zhaokunhao/p/14211393.html
Copyright © 2020-2023  润新知