python中的装饰器

2018-08-18  本文已影响12人  Stay_Hungry_Fly

装饰器极大的简化了开发流程, 在不用更改代码的状况下对函数进行扩展, 下面是对装饰器的应用案例

基本使用

# 定义一个装饰器
def func(print_nums):

    def wrapper(*args, **kwargs):
        print('wrapp')
        return print_nums
    return wrapper
# 定义函数并用装饰器装饰
@func
def print_nums(num):
    a = num
    print(a)

# 执行打印被装饰函数名字(发现名字改变)
if __name__ == '__main__':
    print(print_nums.__name__)


# 打印结果为
wrapper

如何修改使被装饰函数函数名不发生变化
方式一

def func(print_nums):

    def wrapper(*args, **kwargs):
        print('wrapp')
        return print_nums
    wrapper.__name__ = print_nums.__name__ # 将函数名重新改回来
    return wrapper

方式二

# 方式二:使用functools.wrap()
import functools

def func(print_nums):
    @functools.wraps(print_nums)
    def wrapper(*args, **kwargs):
        print('wrapp')
        return print_nums
    return wrapper
上一篇 下一篇

猜你喜欢

热点阅读