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