python 裝飾器的寫法和呼叫
阿新 • • 發佈:2019-01-28
#第一種不帶引數的裝飾器
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))