美文网首页
python基础-装饰器

python基础-装饰器

作者: 爱跳的兔子 | 来源:发表于2018-10-24 23:39 被阅读0次

    记录自己学习py基础的点点滴滴

    装饰器

    • 由浅入深,先定义一个函数,把这个函数赋值给一个变量,然后可以通过变量直接调用函数
    def woami():
        print('xiaoyang')
    
    f = woami
    f()
    xiaoyang
    
    • 函数有个name属性,可以看到赋值给变量并没有改变函数的name属性
    woami.__name__
    'woami'
    woami.__name__
    'woami'
    
    • 现在我们要增强woami函数的功能,或者增强任意一个函数的功能,在不改变函数定义的情况下,这种在代码运行期间动态增加函数功能的方式称之为装饰器(decorator)
    • 事实上装饰器在做的事,是接受当前函数作为参数,返回一个新的函数出来,本质上是一个返回函数的高阶函数
    def log(func):
            def new(*args, **kw):
                    print('call %s:'  % func.__name__)
                    return func(*args, **kw)
            return new
    
    • 可以看出装饰器,就是上面说的一个函数而已,要让他起到上述装饰器真正的作用需要使用
      @ 我们就称它为修饰符号吧
    @log
    def woami():
            print('xiaoyang')
    
    woami()
    call woami():
    xiaoyang
    
    • @log的作用等同于下面这行
    woami = log(woami)
    
    • 请注意装饰器返回了一个新函数new,所以被装饰器修饰过的woami,已经不是原来的woami了,而是一个新的函数,我们来验证一下
    woami.__name__
    'new'
    

    很神奇对吧,别慌,我们接着看,再来修饰一个函数玩玩吧

    @log
    def again():
            print('又来~')
    
    again()
    call again:
    又来
    

    可以看到,我们之前定义好的返回函数log,在定义任何函数之前@一下,就可以起到修饰的作用了。很好,掌握了装饰器的初级用法,很开心。。。

    相关文章

      网友评论

          本文标题:python基础-装饰器

          本文链接:https://www.haomeiwen.com/subject/iwyftqtx.html