1. 程式人生 > >python3裝飾器的簡單解釋

python3裝飾器的簡單解釋

返回 如果 發揮 隱藏 使用 font urn pre toolbar

#閉包,也叫詞法閉包:如下所示函數A主要是為了函數B提供運行環境的
#閉包只是在表現和形式上像函數,其實閉包並不是函數
#由函數在嵌套環境中,內層函數裏,對外層函數作用域的變量進行了引用,那麽在外層函數返回後,內層函數依然可是使用外層函數的變量,這樣的變量就構成了可以使用時的環境
#所以閉包對於隱藏狀態,以及在函數和作用域中進行切換,一個函數可以發揮很多種功能
#



#閉包:如下所示我們只需要不斷的變化f調用變化就可以是函數B跟著變化了
def A(num1,num2):
    def B(x,y):
        print("我是%s!"%(num1+x))
        print("我是%s!"%(num2+y))
    return B
f=A(1,2)
f(3,4)


裝飾器:

一下面的例子為例,如果我們有一個簡單的函數C,我們在不動其他函數的基礎上需要給函數C增加新的功能,需要怎麽做呢?這就需要用到裝飾器了


#這是不用裝飾器時:
def A(func):
    def B():
        print("我是附加功能1!") #附加功能
        func()
        print("我是附加功能2!")  # 附加功能
    return B

def C():
    print("我是函數原來的功能!")
res=A(C)
res()
#用裝飾器時:
def A(func):
    def B():
        print("我是附加功能1!") #附加功能
        func()
        print("我是附加功能2!") #附加功能
    return B
@A
def C():
    print("我是函數原來的功能!")
C()
#帶參數的裝飾器:
def A(func):
    def B(x):
        print("我是附加功能1!") #附加功能
        func(x)
        print("我是附加功能2!") #附加功能
    return B
@A
def C(x):
    print("我是函數原來的功能!%s"%x)
C('hello action!')


python3裝飾器的簡單解釋