當前位置:成語大全網 - 書法字典 - Python裝飾詞典

Python裝飾詞典

本文來自代碼同學軟件測試。

代碼同學微信官方賬號:自動化軟件測試。

代碼同學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)

中國()

結束

本文版權歸作者所有。任何形式的轉載請聯系作者獲得授權並註明出處。