標籤:
原文地址:python中的@符號的作用
queerfisher
‘@‘符號用作函數修飾符是python2.4新增加的功能,修飾符必須出現在函數定義前一行,不允許和函數定義在同一行。也就是說@A def f(): 是非法的。 只可以在模組或類定義層內對函數進行修飾,不允許修修飾一個類。一個修飾符就是一個函數,它將被修飾的函數做為參數,並返回修飾後的同名函數或其它可調用的東西。
執行個體(1):
def spamrun(fn):
defsayspam(*args):
print "spam,spam,spam"
returnsayspam
@spamrun
def useful(a,b):
printa**2+b**2
useful(3,4)
結果:
spam,spam,spam
執行個體(2):
def spamrun(fn):
print "spam,spam,spam"
@spamrun
def useful(a,b):
printa**2+b**2
結果:
spam,spam,spam
執行個體(3):
def spamrun(fn):
defsayspam(*args):
print "spam,spam,spam"
returnsayspam
@spamrun
def useful(a,b):
printa**2+b**2
useful(3,4)
結果:
spam,spam,spam
執行個體(4):
def addspam(fn):
defnew(*args):
print "spam,spam,spam"
return fn(*args)
returnnew
@addspam
def useful(a,b):
printa**2+b**2
useful(4,3)
結果:
spam,spam,spam
25
追加
執行個體
def decorator(fn):
deftest(*args):
print "My god!"*3
return fn(*args)
returntest
@decorator
def other(a,b):
printa**2+b**2
if __name__=="__main__":
other(4,3)
other(3,4)
結果:
My god!My god!My god!
25
My god!My god!My god!
25
注釋掉//print return fn(*args)
結果是:
My god!My god!My god!
My god!My god!My god!
要想使other函數能正常運行,必須加傳回值,@decorator是一個statement,會將other函數當作參數傳入來執行test方法
[轉載]python中的@符號的作用