我是Python新手,无法理解装饰器的概念。我正在尝试实现两个装饰器,一个是 nonNegative,它假定任意长的整数参数列表,如果有小于 0 的值,则抛出异常;另一个是 allCaps,它假定任意长的字符串参数列表,并将它们大写。然后,编写一个简单的函数来测试每个函数,包装它,并演示每个装饰器的工作原理。
我已经开始并走到了这一步。
#!/usr/local/bin/python2.7
def NonNegative(inputs):
for i in inputs:
if i<0:
raise exception
def allCaps(inputs2):
for i in inputs2:
a = i.upper()
print a
def inputs
def inputs2():
inputfile = open ("input.txt")
sentence = inputfile.readlines()
words = (sentence[0].split())
return words
NonNegative(inputs)
如果有人能向我解释装饰器的概念,我将不胜感激。我试图理解它,但无法理解。
最佳答案
将装饰器视为包装函数的函数。
在数学中,您可能有一个函数f(x)
。如果你用装饰器 g
包装它,你就会有 g(f(x))
。
在Python中的表示是
@function_g
def function_f():
pass
这是一个例子:
def entryExit(f):
def new_f():
print "Entering", f.__name__
f()
print "Exited", f.__name__
return new_f
@entryExit
def func1():
print "inside func1()"
您会看到我们定义了一个函数extryExit
,它返回一个包装函数(因此将函数作为其输入)。它将这个函数包装在 new_f
中。
通过用装饰器包装函数,func1
转换为
def func1():
print "inside func1()"
至
def func1(f):
print "Entering", f.__name__
print "inside func1()"
print "Exited", f.__name__
您还可以编写一个类来定义装饰器,但我认为函数装饰器不太冗长。
您可以使用 this excellent intro here. 阅读有关装饰器的更多信息。
关于python - python 中的装饰器 - 需要解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24337553/