使用裝飾器將函式作為引數,最後再返回乙個引數,簡單來說就是在不修改原函式的**上對原函式新增新的功能。
(1)在原函式中新增乙個裝飾器
原函式:
def sayhello():
print("hello,world")
sayhello()
新增裝飾器後:
import functools
def decorator(fun): #fun為呼叫的函式
@functools.wraps(fun)
print("hello,python") #新增的功能
1、@decorator相當於sayhello = decorator(sayhello)
2、*args,**kwargs 表示可以接受任意的引數
3、@functools.wraps(fun) 儲存原函式的屬性,如name,model等
(2)在原函式中新增多個裝飾器
import functools
def decorator(fun): #fun為呼叫的函式
@functools.wraps(fun)
print("hello,python") #新增的功能
fun(*args,**kwargs)
def decorator1(fun):
@functools.wraps(fun)
print("i lov study")
fun(*args,**kwargs)
@decorator1
@decorator
def sayhello():
print("hello,world")
sayhello()
呼叫方式:
(3)裝飾器傳入引數
import functools
def getnum(num):
def decorator(fun): #fun為呼叫的函式
@functools.wraps(fun)
print("hello,python") #新增的功能
print("getnum %d"%(int(num)))
fun(*args,**kwargs)
return decorator
@getnum('10') #傳入引數
注:只需再填寫乙個高階函式返回decorator即可
python裝飾器的使用
在class內部,可以有屬性和方法,而外部 可以通過直接呼叫例項變數的方法來運算元據,這樣,就隱藏了內部的複雜邏輯。但是,從前面student類的定義來看,外部 還是可以自由地修改乙個例項的name score屬性 如果要讓內部屬性不被外部訪問,可以把屬性的名稱前加上兩個下劃線 在python中,例...
Python裝飾器的使用
本文介紹的是python裝飾器 的使用,分三部分記錄裝飾器,旨在為之後複習保留學習筆記。python裝飾器在沒有改變原始函式呼叫方式的同時,在原始函式的前後增加功能,滿足開放封閉原則。目錄 1.裝飾器的固定模板 2.帶引數的裝飾器模板 3.多個裝飾器函式裝飾乙個函式 裝飾器的固定模板 def inn...
python裝飾器的使用
它可以使我們的 看起來更簡潔,可以修改部分函式功能,讓你的 看起來很 高階 當然,它也可能會造成 的閱讀性變差,所以在使用裝飾器的時候,你需要做乙個取捨。首先來看一段 def param func return hi,im a function def decoration function pri...