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