函數修飾符
‘@’ 用做函數的修飾符,可以在模塊或者類的定義層內對函數進行修飾,
出現在函數定義的前一行,不允許和函數定義在同一行
一個修飾符就是一個函數,它將被修飾的函數作為參數,并返回修飾后的同名函數或其他可調用的東西?
示例:
def square_sum(fn):def square(*args):print "1---", argsn = args[0]# return n*(n-1)*(2*n-1)/6print "2==", n*(n-1)*(2*n-1)/6print fn.__name__fn(n*(n-1)*(2*n-1)/6)print "*"*15return fn(n*(n-1)*(2*n-1)/6)return square@square_sum
def sum_a(a):print "3=", asum_a(10)
結果
1--- (10,)
2== 285
sum_a
3= 285
***************
3= 285
可以看出,他是先執行修飾器函數,然后有return fn的時候,修飾器下的函數才是生效的,否則函數sum_a 是沒有結果的。