Python中的装饰器是什么?
装饰器是Python中最强大的设计模式之一,用于向已创建的对象添加新功能而无需修改其结构。使用装饰器,您可以轻松地包装另一个函数以扩展其行为,而不会永久修改它。
更多Python相关文章,请阅读:Python 教程
函数是一等公民
在Python中,函数被视为一等公民,即我们可以将函数存储在变量中,从函数返回函数等。
下面是一些用于理解装饰器的Python函数示例。
函数作为对象
示例
在此示例中,函数被视为对象。在这里,将函数demo()分配给一个变量 –
# 创建一个函数
def demo(mystr):
return mystr.swapcase()# 交换大小写
print(demo('Thisisit!'))
sample = demo
print(sample('Hello'))
输出
tHISISIT!
hELLO
将函数作为参数传递
示例
在此示例中,将函数作为参数传递。函数demo3()将函数demo()和demo2()作为参数调用。
def demo(text):
return text.swapcase()
def demo2(text):
return text.capitalize()
def demo3(func):
res = func("This is it!") # 将函数作为参数传递
print (res)
# 调用
demo3(demo)
demo3(demo2)
输出
tHIS IS IT!
This is it!
现在,让我们尝试一下装饰器
Python中的装饰器
在装饰器中,函数被视为参数传递到另一个函数中,然后在包装函数中调用。让我们看一个快速示例:
@mydecorator
def hello_decorator():
print("This is sample text.")
以上也可以写成 –
def demo_decorator():
print("This is sample text.")
hello_decorator = mydecorator (demo_decorator)
装饰器示例
def demoFunc(x,y):
print("Sum = ",x+y)
# 外部函数
def outerFunc(sample):
def innerFunc(x,y): # 内部函数
return sample(x,y)
return innerFunc
# 调用
demoFunc2 = outerFunc(demoFunc)
demoFunc2(10, 20)
输出
Sum = 30
应用语法装饰器
示例
以上示例可以使用带有@符号的装饰器简化。将@符号放在我们要装饰的函数之前,可以方便地应用装饰器−
# 外部函数
def outerFunc(sample):
def innerFunc(x,y): # 内部函数
return sample(x,y)
return innerFunc
@outerFunc
def demoFunc(x,y):
print("Sum = ",x+y)
demoFunc(10,20)
输出结果
Sum = 30