zoukankan      html  css  js  c++  java
  • 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)

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

  • 相关阅读:
    牛客练习赛24 E:青蛙(最短路)
    菜根谭#10
    菜根谭#9
    菜根谭#8
    菜根谭#7
    菜根谭#6
    菜根谭#5
    菜根谭#4
    菜根谭#3
    菜根谭#2
  • 原文地址:https://www.cnblogs.com/liangshian/p/11685740.html
Copyright © 2011-2022 走看看