python基础-装饰器

记录自己学习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,在定义任何函数之前@一下,就可以起到修饰的作用了。很好,掌握了装饰器的初级用法,很开心。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容