python中的@ 裝飾器 閉包 切片式編程

'@' 用作函數的修飾符,能夠在模塊或者類的定義層內對函數進行修飾,python

  出如今函數定義的前一行,不容許和函數定義在同一行編程

  一個修飾符就是一個函數,它將被修飾的函數做爲參數,並返回修飾後的同名函數其餘可調用的東西?閉包

  示例:  函數

def square_sum(fn):
    def square(*args):
        print "1---", args
        n = args[0]
        # return n*(n-1)*(2*n-1)/6
        print "2==", n*(n-1)*(2*n-1)/6
        print fn.__name__
        fn(n*(n-1)*(2*n-1)/6)
        print "*"*15
        return fn(n*(n-1)*(2*n-1)/6)
    return square


@square_sum
def sum_a(a):
    print "3=", a
    
sum_a(10)

結果spa

1--- (10,)
2== 285
sum_a
3= 285
***************
3= 285

 

能夠看出,他是先執行修飾器函數,而後有return fn的時候,修飾器下的函數纔是生效的,不然函數sum_a 是沒有結果的。code

裝飾器就是對一個函數進行包夾,先後增長代碼而獨立於函數代碼以外。其實也就是閉包。切片式編程的基礎。class

相關文章
相關標籤/搜索