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)

***************不积跬步无以至千里***************