最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

python 装饰器代码

XAMPP案例 admin 626浏览 0评论

0Python

一、普通装饰器

def add_itali(func):

“””返回接收一个函数返回一个经过装饰的新函数”””

def new_func():

return “<i>” + func()+ “</i>”

return new_func

 

def add_bold(func):

def new_func():

s =  func()

result = “<b>”+s+”</b>”

return result

return new_func

 

@add_bold  #语法糖

def test():

return “hello”

 

if __name__ == ‘__main__’:

print(test())

二、带参数的装饰器

装饰器的理念是对原函数、对象的加强,相当于重新封装,所以一般装饰器函数都被命名为wrapper(),意义在于包装。函数只有在被调用时才会发挥其作用。比如@logging装饰器可以在函数执行时额外输出日志,@cache装饰过的函数可以缓存计算结果等等。

def log(filename:str):
    print(filename)

    def inner(func):
        print(f'{func.__name__}')
        def wrapper(*args,**kwargs):
            print(args)
            func(*args,**kwargs)
        return wrapper
    return inner

@log(filename="xx.log")
def add(a,b):
    return a + b

add(1,2)

 

三、类装饰器

Python的装饰器不仅可以用嵌套函数来编写,还可以使用类来编写。其调用__init__方法创建实例,传递参数,并调用__call__方法实现对被装饰函数功能的添加。

class A(object):
    def __init__(self, func):  # 返回一个对象:__init__方法首先会初始化对象,并把对象返回
        self.func = func
        print("aaaa")

    def __call__(self, *args, **kwargs):  # __call__当对一个对象加()进行调用的时候,此方法会自动执行
        print(f"{self.func.__name__}函数运行前")
        start = time.time()
        obj = self.func(*args, **kwargs)
        end = time.time()
        print(f"{self.func.__name__}函数运行后")
        return obj

@A  # 类,f会传给类,然会返回一个A的实例
def f(x, b):
    print(x)
    pass
    return x + b

if __name__ == '__main__':
    print(f(1, 2))

转载请注明:XAMPP中文组官网 » python 装饰器代码

您必须 登录 才能发表评论!