1. 程式人生 > >python 裝飾器的寫法和呼叫

python 裝飾器的寫法和呼叫

#第一種不帶引數的裝飾器

def say():

    print("親愛的祖國我愛你")

def outter(func):

    def inner():

           print("我愛你中國,親愛的母親")

           return func() 

    return inner

#在外部函式outter後面的括號裡面只寫被裝飾函式的函式名,inner內部函式名返回是不加括號的,因為那樣等於又呼叫了。

(1)第一種呼叫的方法,#f後面的括號就是呼叫的意思。

(重點):實際上這裡的func=say,就是直接換個名字,然後 return func()就是return say(),而say()就是呼叫say函式。

f = outter(say)

f()

(2)第二種的呼叫方法,直接後面加括號。

outter(say)()

#第二種帶引數的裝飾器

def sum(a,b):

        print(a+b)

        return a+b

def outter(func):

        def inner(a,b):

            if a<0 and b<0:

                a = abs(a)

                b=abs(b)

(重點:)這裡需要注意的是inner是一個函式,裡面可以有豐富的函式內容,inner函式名後面的括號必須要與func函式名後面的括號裡的形參(待傳的引數)一樣。

            return func(a,b)

        return inner

f = outter(sum)

print(f(1,2))