函数-装饰器

编辑本博客

补充:

保留原函数信息,如函数名,函数注释等内容

import functools
def wrapper(func):
    @functools.wraps(func)#保留原函数的原信息,如函数名,函数备注之类数据,否则被装饰过的函数名会变成inner
    def inner(*args,**kwargs):
        return func(*args,**kwargs)
    return inner

def f1():
    print('f1')
@wrapper
def f2():
    print('f1')
print(f1.__name__)
print(f2.__name__)

软件开发应该遵循“开放--封闭”原则。语法糖可满足该需求,官方名称即装饰器。

  • 封闭:已实现的功能代码块不应该被修改
  • 开放:对现有功能的扩展开放
#定义一个装饰器函数
def login(func):
    def _inner():
        #xxxx
        func()
    return _inner

#调用login装饰器,对home()方法进行登陆控制
@login
def home():
    pass

函数需参数的装饰器

#函数需参数的装饰器函数
def login(func):
    def _inner(*arg,**kwargs)
        #xxxx
        func(*arg,**kwargs)
    return _inner

#函数传入参数index
@login
def home(index):
    pass

装饰器需参数的装饰器

#装饰器带参数的装饰器
def login(auth_type):
    def _outer(func):
        def _inner(*arg,**kwargs)
            #登陆验证代码写这里,xxxx
            func(*arg,**kwargs)
        return _inner
    return _outer

#函数和装饰器都带参数
@login('wx')
def home(index):
    pass
原文地址:https://www.cnblogs.com/yaya625202/p/8799393.html