當使用@修飾符修飾函數時,會存在這樣一個問題:被修飾的函數會消失(這是因為修飾函數沒有設置返回值,如果設置了返回值,則就把返回值賦給被修飾函數,比如,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)
***************不積跬步無以至千里***************