zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    前端之页面标签的图标修改
    分页, 解析器, 渲染器
    DRF的认证,频率,权限
    视图组件,路由组件,版本控制
    序列化组件
    Restful规范
    docker大全集
    哨兵和docker容器
    项目发布须知
    Linux之nginx
  • 原文地址:https://www.cnblogs.com/zhaokunhao/p/14211393.html
Copyright © 2011-2022 走看看