Python中@符号的作用是什么?
我注意到在几个例子中,看到了一些这样的东西:
# Comments explaining code i think
@innerclass
或者:
def foo():
"""
Basic Doc String
"""
@classmethod
我在网上搜索也没找到什么有用的,想了解一下这到底是什么。还有,我在Python的文档里也找不到相关的信息。
这些东西是干嘛的呢?
4 个回答
5
使用
@function
def f():
pass
你只需要在 f()
外面加上 function
。这里的 function
被称为装饰器。
这其实只是对下面内容的简化写法:
def f():
pass
f=function(f)
26
它们被称为装饰器。装饰器是应用于其他函数的函数。下面是我对一个类似问题的回答。
Python中的装饰器可以为另一个函数增加额外的功能。比如说,有一个斜体的装饰器可能是这样的:
def makeitalic(fn):
def newFunc():
return "<i>" + fn() + "</i>"
return newFunc
注意,这里有一个函数是在另一个函数里面定义的。它的基本作用就是用新定义的函数替换掉原来的函数。例如,我有这个类:
class foo:
def bar(self):
print "hi"
def foobar(self):
print "hi again"
现在假设,我想让这两个函数在执行前后都打印“---”。我可以在每个打印语句前后都加上一个打印“---”。但是因为我不喜欢重复做同样的事情,所以我会创建一个装饰器。
def addDashes(fn): # notice it takes a function as an argument
def newFunction(self): # define a new function
print "---"
fn(self) # call the original function
print "---"
return newFunction
# Return the newly defined function - it will "replace" the original
所以现在我可以把我的类改成:
class foo:
@addDashes
def bar(self):
print "hi"
@addDashes
def foobar(self):
print "hi again"
想了解更多关于装饰器的内容,可以查看 http://www.ibm.com/developerworks/linux/library/l-cpdecor.html
12
它们是装饰器。
<自我推荐>
我有一篇关于这个主题的博客文章。
</自我推荐>