python被修飾的函數(shù)消失問(wèn)題解決(基于wraps函數(shù))
這篇文章主要介紹了python被修飾的函數(shù)消失問(wèn)題解決(基于wraps函數(shù)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
當(dāng)使用@修飾符修飾函數(shù)時(shí),會(huì)存在這樣一個(gè)問(wèn)題:被修飾的函數(shù)會(huì)消失(這是因?yàn)樾揎椇瘮?shù)沒(méi)有設(shè)置返回值,如果設(shè)置了返回值,則就把返回值賦給被修飾函數(shù),比如,test1函數(shù)的返回值設(shè)置為 return 6, 那么就把6賦值給test2,test2就不再是一個(gè)函數(shù),而是一個(gè)int類型的變量,值就是6):
def test1(A): print("I am test1111111111") @test1 def test2(): print("I am test2222222222") test2 print(type(test2))
輸出如下:
I am test1111111111 <class 'NoneType'>
Nonetype和空值是不一致的,可以理解為Nonetype為不存在這個(gè)參數(shù),空值表示參數(shù)存在,但是值為空
為了避免這個(gè)問(wèn)題,可以使用wraps函數(shù),它的作用是保證被修飾函數(shù)名不被改變
from functools import wraps def test1(A): @wraps(A) def test3(): print("I am test3333333") print("I am test1111111111") return test3 @test1 def test2(): print("I am test2222222222") test2 print(test2.__name__) test2()
輸出如下:
I am test1111111111 test2 I am test3333333
可以看到,test2函數(shù)的函數(shù)名沒(méi)被改變,但函數(shù)功能卻改變了,18行運(yùn)行test2函數(shù)時(shí),輸出的是 I am test3333333
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python使用pandas讀寫(xiě)excel文件的方法實(shí)例
pandas是一個(gè)十分強(qiáng)大的數(shù)據(jù)處理工具,最近需要處理數(shù)據(jù)并輸入到excel,簡(jiǎn)單列舉它的用法,這篇文章主要給大家介紹了關(guān)于python使用pandas讀寫(xiě)excel文件的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08詳解Python3操作Mongodb簡(jiǎn)明易懂教程
本篇文章主要介紹了詳解Python3操作Mongodb簡(jiǎn)明易懂教程,詳細(xì)的介紹了如何連接數(shù)據(jù)庫(kù)和對(duì)數(shù)據(jù)庫(kù)的操作,有需要的可以了解一下。2017-05-05Python單體模式的幾種常見(jiàn)實(shí)現(xiàn)方法詳解
這篇文章主要介紹了Python單體模式的幾種常見(jiàn)實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了Python單體模式的實(shí)現(xiàn)方法、原理與相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-07-07Python PyQt5中彈出子窗口解決子窗口一閃而過(guò)的問(wèn)題
這篇文章主要介紹了Python PyQt5中彈出子窗口解決子窗口一閃而過(guò)的問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03