當前位置:成語大全網 - 書法字典 - 不學decorator,面試時不敢說自己懂Python。

不學decorator,面試時不敢說自己懂Python。

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

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

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

中國()

結束

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