真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

適合初學(xué)者的Python裝飾器的方法教程

這篇文章主要介紹“適合初學(xué)者的Python裝飾器的方法教程”,在日常操作中,相信很多人在適合初學(xué)者的Python裝飾器的方法教程問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”適合初學(xué)者的Python裝飾器的方法教程”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

成都創(chuàng)新互聯(lián)公司長(zhǎng)期為上千余家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為潞州企業(yè)提供專業(yè)的成都做網(wǎng)站、成都網(wǎng)站制作,潞州網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。

裝飾器是Python編程語(yǔ)言中相當(dāng)高級(jí)的一部分。就像大多數(shù)事情一樣,一旦你掌握了它們的工作原理并使用了幾次,它們就會(huì)變得非常簡(jiǎn)單明了,但是作為一個(gè)初學(xué)者,它們可能會(huì)有點(diǎn)讓人望而生畏,很難理解。只有理解了它所解決的問(wèn)題,你才能真正理解它。例如,我可以直接聲明裝飾器的定義:

decorator是一個(gè)函數(shù),它將另一個(gè)函數(shù)作為參數(shù)并返回它的修改版本,以某種方式增強(qiáng)了它的功能。

如果您已經(jīng)了解了decorator是什么,那么這個(gè)定義就非常清楚了,但是如果您不了解,那么可能就不太了解了。重要的是,這個(gè)定義本身并不能告訴您什么時(shí)候使用修飾符,或者沒(méi)有修飾符Python會(huì)變得多么糟糕。

適合初學(xué)者的Python裝飾器的方法教程

舉例

我們將從一個(gè)假設(shè)的場(chǎng)景開(kāi)始,并觀察如果不使用decorator可能出現(xiàn)的問(wèn)題。在你上班的第一天,你的老板找到你,讓你寫(xiě)一個(gè)函數(shù),這個(gè)函數(shù)將一個(gè)字符串轉(zhuǎn)換成一個(gè)回文:一個(gè)向前和向后讀取相同內(nèi)容的字符串。

你可以這樣寫(xiě):

def make_palindrome(string):   """Makes a palindromic mirror of a string."""        return string + string[::-1]

到目前為止一切順利。一小時(shí)后,老板要求更多的函數(shù):一個(gè)credits函數(shù)在任何字符串的末尾添加一個(gè)字符串,一個(gè)函數(shù)將字符串轉(zhuǎn)換到另一個(gè)字符串中,還有一個(gè)函數(shù)在字符串中插入逗號(hào)。

你開(kāi)始加入新的函數(shù):

def add_credits(string):     """Adds the company's credits to the end of any string."""        return f"{string} (string created by Pro String Inc.)"     def snake_to_camel(string):     """Converts a string in snake_case to camelCase."""        words = string.split("_")     if len(words) > 1:           words = [words[0]] + [word.title() for word in words[1:]]     return "".join(words)       def insert_commas(string, spacing=3):   """Inserts commas between every n characters."""      sections = [string[i: i + spacing] for i in range(0, len(string), spacing)]   return ",".join(sections)

但問(wèn)題出現(xiàn)了。老板看你的代碼,并提醒你函數(shù)必須能夠接受整數(shù)作為輸入,并且它們應(yīng)該被轉(zhuǎn)換成字符串。他建議在每個(gè)函數(shù)的開(kāi)頭加上一行,檢查輸入是否為整數(shù),如果是整數(shù)則進(jìn)行轉(zhuǎn)換。

這會(huì)讓你士氣低落——你必須把每個(gè)功能都檢查一遍,然后在開(kāi)始的時(shí)候加上一些類似這樣的東西:

if isinstance(string, int):    strstring = str(string)

當(dāng)我們有四個(gè)需要修改的函數(shù)時(shí),這是可以的,但是如果我們有十個(gè)呢?讓所有的功能都以相同的兩行開(kāi)始違背了神圣的“不要重復(fù)自己”的法律準(zhǔn)則。

難道沒(méi)有一種方法可以只修改所有這些函數(shù)而不添加額外代碼嗎?要了解如何做到這一點(diǎn),讓我們回過(guò)頭來(lái)看看Python函數(shù)。盡管Python函數(shù)有特殊的語(yǔ)法,但它只是一個(gè)對(duì)象,就像字符串或列表一樣。您可以檢查它們的屬性,將它們分配給新的變量,并且——至關(guān)重要的是——將它們作為參數(shù)傳遞給另一個(gè)函數(shù)。

例如,您可以使一個(gè)函數(shù)接受另一個(gè)函數(shù),并檢查它是否有任何關(guān)鍵字參數(shù):

def func_has_kwargs(func):    return len(func.__defaults__) > 0

不要擔(dān)心__defaults__如果你還沒(méi)見(jiàn)過(guò),這里的關(guān)鍵是,函數(shù)是另一個(gè)函數(shù)作為參數(shù),檢查是否有任何關(guān)鍵字參數(shù)(即如果__default__產(chǎn)權(quán)的長(zhǎng)度大于0),否則,返回True,如果是這樣,則返回False。

現(xiàn)在回到我們的問(wèn)題之中。我們有三個(gè)精心設(shè)計(jì)的字符串操作函數(shù),我們需要修改它們,使它們也接受整數(shù)。我們需要的是一個(gè)新函數(shù)——它將把我們現(xiàn)有的函數(shù)作為輸入,并創(chuàng)建一個(gè)修改后的函數(shù)來(lái)檢查整數(shù)。我們需要一個(gè)裝飾函數(shù):

適合初學(xué)者的Python裝飾器的方法教程

讓我們仔細(xì)看看這里發(fā)生了什么。accept_integers是我們的裝飾函數(shù)——它接受一個(gè)函數(shù)作為輸入,返回另一個(gè)函數(shù)作為輸出。在它的主體中,它創(chuàng)建了一個(gè)新函數(shù),該函數(shù)應(yīng)該完成輸入函數(shù)所做的所有事情,但是在開(kāi)始時(shí)需要一個(gè)額外的步驟。如果您查看這個(gè)函數(shù)的主體,您可以看到它檢查給定的字符串是否為整數(shù),如果是整數(shù)則轉(zhuǎn)換它,然后將這個(gè)字符串傳遞給原始函數(shù)。這里缺少一個(gè)步驟——我們需要實(shí)際使用這個(gè)裝飾器:

適合初學(xué)者的Python裝飾器的方法教程

標(biāo)準(zhǔn)形式

最后,值得指出的是,雖然上面的語(yǔ)法是完全有效的,但是Python以@符號(hào)的形式提供了快捷方式??梢詫accept_integers添加到任何函數(shù)的前面來(lái)修飾它:

適合初學(xué)者的Python裝飾器的方法教程

這是將一個(gè)函數(shù)傳遞給另一個(gè)函數(shù)的另一種方式。在底層,當(dāng)Python看到@符號(hào)時(shí),它會(huì)為您執(zhí)行decorator的調(diào)用。許多Python庫(kù)都提供裝飾器,以快速增強(qiáng)編寫(xiě)的函數(shù),而不必輸入大量重復(fù)的代碼。

到此,關(guān)于“適合初學(xué)者的Python裝飾器的方法教程”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!


網(wǎng)頁(yè)標(biāo)題:適合初學(xué)者的Python裝飾器的方法教程
文章轉(zhuǎn)載:http://weahome.cn/article/goohig.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部