代碼同學微信官方賬號:自動化軟件測試。
代碼同學Tik Tok 1號:葛聊軟件測試。
裝飾者
Python decorator是面試中經常被問到的問題之壹。如果妳的簡歷描述了Python,妳很可能會被問到。
那麽我們應該如何回答這個問題呢?
在這裏,我將從幾個角度解釋裝飾器的功能,每個人都可以選擇適合自己的功能。
Python中的裝飾器本質上是壹個高階函數,其中高階函數的名稱是“返回值是函數的函數”
在python中使用裝飾器有兩個組成部分。
①@符號調用裝飾器。
②定義要裝飾的方法。
例子如下:
@裝飾者姓名
定義壹個修飾函數。
@logger
def func():
及格
裝飾者可以在不修改函數的情況下添加額外的函數。這是裝修工的官方定義。
事實上,我們將使用裝飾器來實現業務功能之外的壹些輔助需求。例如,我們將為我們的功能添加日誌記錄、性能監視器和嵌入式計數器。眾所周知,修改編寫的函數非常麻煩且容易出錯。因此,它非常適合“在不修改其內部代碼的情況下為函數打包壹些附加函數”,即裝飾器。
Staticmethod用於修飾類中的方法,以便可以用類名直接訪問它,例如cls.foo()。
Classmethod類似於staticmethod,但不同之處在於static method將class傳遞到修改後的方法中。
A類(對象):
a = 1
def _ _ init _ _(self):
自我。a = 2
@靜態方法
def foo1():
印刷A.a
@classmethod
定義食物2(cls):
打印“a類是”,cls.a
打印“實例a是”,cls()。a
免費代碼同學軟件測試課程筆記+超級學習資料+完整視頻+最新面試問題,可以轉發文章+私信“代碼同學666”獲取信息。
Property可以實現函數對屬性的訪問和賦值,這樣就可以在函數中添加壹些參數檢查等功能,對外使用時訪問和賦值方法不會改變。請註意,access和assignment的方法名稱相同。
A類(對象):
def _ _ init _ _(self):
自我。__count = 0
@屬性
定義計數(自身):
回歸自我。_ _計數
@伯爵。作曲者
定義計數(自身,值):
如果不是is instance(value,int):
raise ValueError(“計數必須是整數!”)
自我。_ _計數=值
a = A()
打印計數
a.count = 1
打印計數
a . count =“a“#提高值錯誤
裝飾器的代碼中使用了Functools.wraps。您可以將原始函數的名稱和其他屬性復制到wrapper()函數中,這樣您就可以獲得真實函數的名稱屬性而不是包裝器。
導入功能工具
定義日誌(文本):
定義裝飾器(函數):
@ func tools . wraps(func)
定義包裝器(* args,** kw):
print“% s % s():‘%(text,func。__name__)
返回函數(* args,** kw)
返回包裝
返回裝飾器
#!/anaconda 3/envs/FEALPy/bin python 3.7
# -*-編碼:utf-8 -*-
# -
# @File: decorator語法。py
# @作者:公牛
# -
#定義裝飾函數
# 1.簡單裝飾示例
def logger(func):#在python中壹切都是對象。
定義包裝器(*args,**kw):
打印(“進入裝飾函數”)
func(* args,* * kw)#真正的函數在裝飾器中被調用。
func(* args,**kw)
打印(“裝飾功能完成”)
返回包裝
@記錄器# =記錄器(添加)
def add(x,y):
打印(“輸入修改後的功能”)
print(f“{ x }+{ y } = { x+y }‘)
# add(1,2)
# 2.帶參數的裝飾器
def問好(國家):
定義包裝器(函數):
def second(* args,**kw):
如果國家==“中國”:
打印(“裝修工您好”)
elif country = =‘America‘:
打印(來自裝飾者的“妳好”)
否則:
返回
func(* args,**kw)
返回第二個
返回包裝
@ say _ hello(‘美國’)
def美國():
印刷品(“我來自美國”)
@ say _ hello(‘中國’)
def中國():
印刷品(“我來自中國”)
美國人()
打印(“*“* 30)
中國()
結束
本文版權歸作者所有。任何形式的轉載請聯系作者獲得授權並註明出處。