python中的裝飾器

  1. 閉包函數
    在看裝飾器之前,我們先來搞清楚什麼是閉包函數。python是一種面向對象的編程語言,在python中一切皆對象,這樣就使得變量所擁有的屬性,函數也同樣擁有。這樣我們就可以理解在函數內創建一個函數的行爲是完全合法的。這種函數被叫做內嵌函數,這種函數只可以在外部函數的作用域內被正常調用,在外部函數的作用域之外調用會報錯,例如:
    python中的裝飾器
    而如果內部函數裏引用了外部函數裏定義的對象(甚至是外層之外,但不是全局變量),那麼此時內部函數就被稱爲閉包函數。閉包函數所引用的外部定義的變量被叫做自由變量。閉包從語法上看非常簡單,但是卻有強大的作用。閉包可以將其自己的代碼和作用域以及外部函數的作用結合在一起。下面給出一個簡單的閉包的例子:
    而如果內部函數裏引用了外部函數裏定義的對象(甚至是外層之外,但不是全局變量),那麼此時內部函數就被稱爲閉包函數。閉包函數所引用的外部定義的變量被叫做自由變量。閉包從語法上看非常簡單,但是卻有強大的作用。閉包可以將其自己的代碼和作用域以及外部函數的作用結合在一起。下面給出一個簡單的閉包的例子:
    def count():
    a = 1
    b = 1
    def sum():
    c = 1
    return a + c # a - 自由變量
    return sum
  2. python裝飾器

def welcome(func): # 參數是一個函數
def inner_f():
"""這是裝飾器中的welcome函數"""
print('welcome'.center(40,'~'))
func()
return inner_f # 返回值是另一個函數,使用該返回的函數替代作爲參數的函數

@welcome # 說明底下定義的函數被welcome所裝飾,使用該返回的函數替代作爲參數的函數
def name():
"""這個是name函數"""
print('name is toto')

name() # 調用welcome 函數

python中的裝飾器

1、 被裝飾的函數存在參數的時候

在構建裝飾器的時候,作爲返回值的函數是用來替代作爲參數的函數的,所以這兩個函數所需要的參數必須一致。就時說再定義函數裝飾器的時候,指定作爲參數的函數可以由於任意個參數以及作爲返回值的函數可以右任意個參數,這樣就能保證再實際使用的時候不論被裝飾的函數需要幾個參數,都能使用該裝飾器。
def welcome(func): # 參數是一個函數
def inner_f(*args,*kwargs): # 指定返回的函數可以有任意個參數
"""這是裝飾器中的welcome函數"""
print('welcome'.center(40,'~'))
func(
args,**kwargs) # 作爲參數的函數也有任意個參數
return inner_f # 返回值是另一個函數

@welcome # 可以裝飾一個參數的函數
def name(name):
"""這個是name函數"""
print('name is %s' %name)

@welcome # 也可以裝飾兩個參數的函數
def stuinfo(name,age):
print('name is %s ,age is %d' %(name,age))

name('toto')
stuinfo('lala',16)

python中的裝飾器

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章