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 # 返回值是另外一個函數,使用該返回的函數替代做爲參數的函數python

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

name() # 調用welcome 函數閉包

python中的裝飾器

一、 被裝飾的函數存在參數的時候編程語言

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

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

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

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

python中的裝飾器

相關文章
相關標籤/搜索