python的wraps函數


當使用@修飾符修飾函數時,會存在這樣一個問題:被修飾的函數會消失(這是因為修飾函數沒有設置返回值,如果設置了返回值,則就把返回值賦給被修飾函數,比如,test1函數的返回值設置為 return 6, 那么就把6賦值給test2,test2就不再是一個函數,而是一個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為不存在這個參數,空值表示參數存在,但是值為空



為了避免這個問題,可以使用wraps函數,它的作用是保證被修飾函數名不被改變

 1 from functools import wraps
 2 
 3 def test1(A):
 4     @wraps(A)
 5     def test3():
 6         print("I am test3333333")
 7     print("I am test1111111111")
 8     return test3
 9 
10 
11 @test1
12 def test2():
13     print("I am test2222222222")
14 
15 
16 test2
17 print(test2.__name__)
18 test2()

輸出如下:

I am test1111111111
test2
I am test3333333

 

可以看到,test2函數的函數名沒被改變,但函數功能卻改變了,18行運行test2函數時,輸出的是 I am test3333333

(ps:已經是大三的。。。。。老菜雞了,歡迎大佬們指正交流。。。。。菜哭了。。。5555)

***************不積跬步無以至千里***************


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM