zoukankan      html  css  js  c++  java
  • 装饰器

    一. 装饰器
    什么是装饰器, :闭包的一个应用, 外层函数返回内层函数, 并且不改变内层函数的执行方式以及结果
    旨在内层函数执行前后加一些功能, 原函数的结构不做修改

    for Eone :
    def wrapper(func):
    def inner(*args, **kwargs):
    print("函数执行前")
    ret = func(*args,**kwargs)
    print('函数执行后')
    return ret

    return inner


    @wrapper
    def add(x, y):
    print(x, '+', y)
    return x + y


    print(add(2, 3))


    for Etwo
    def outer(flag):
    def wrapper(func):
    def inner(*args, **kwargs):
    if flag:
    print('要执行打印')
    ret = func(*args, **kwargs)
    if flag:
    print('执行打印,函数执行完毕')
    return ret
    return inner

    return wrapper


    # flag = True
    flag = False


    @outer(flag)
    def add(x, y):
    print(x, '+', y)
    return x + y


    print(add(3, 2))



    for E3:
    def wrapper1(func):
    def inner(*args, **kwargs):
    print("order1")
    ret = func(*args, **kwargs)
    print(('order2'))
    return ret

    return inner


    def wrapper2(func):
    def inner(*args, **kwargs):
    print("order3")
    ret = func(*args, **kwargs)
    print(('order4'))
    return ret

    return inner

    # @wrapper
    @wrapper2
    @wrapper1
    def add(x, y):
    print(x, '+', y)
    return x + y


    print(add(3, 6)) # order3, order1, 2+3 , order2, order4 ret(5)

    '''
    @wrapper
    @wrapper2
    @wrapper1
    def add(x, y):
    print(x, '+', y)
    return x + y



    二. 装饰器修复技术: 引入工具, 将原函数的文档,以及属性等等还原给inner,消除inner带来的影响
    from functools import wraps

    def wrapper0(func):
    @wraps(func) # 看这里
    def inner(*args, **kwargs):
    '''
    doc: 这个闭包可以用, 没什么用
    写写文档
    '''

    print("函数执行前")
    ret = func(*args,**kwargs)
    print('函数执行后')
    return ret

    return inner


    @wrapper0
    def add0(x, y):
    print(x, '+', y)
    return x + y

    print(add0.__name__)
  • 相关阅读:
    从getaddrinfo看Glibc的nss
    跟踪一次网络发送
    Dwarf2结构在gcc中的应用及调试器实现分析
    scrapy基础教程
    leetcode题目清单
    机器学习——入门教程2
    机器学习——入门教程1
    C++ STL之vector用法总结
    Mac下用g++编译opencv程序报错
    Linux下环境变量设置
  • 原文地址:https://www.cnblogs.com/tcpblog/p/10065828.html
Copyright © 2011-2022 走看看