美文网首页
2019-05-26python装饰器到底是什么?

2019-05-26python装饰器到底是什么?

作者: 测序九月 | 来源:发表于2019-05-26 17:16 被阅读0次

    装饰器例子

    参考语法

    def mydecorator(func):
        def wrapper(*args,**kargs):
            '''wrapper function'''
            print("in wrapper")
            func(*args,**kargs)
        return wrapper
    
    @ mydecorator
    def example():
        """example function"""
        print("in example")
    
    

    装饰器是什么?
    个人理解,装饰器,是python中一种写法的定义。他仍然符合python的基本语法,只是一种框架,
    比如上述代码,我想在example函数输出前,输出in wrapper这句话
    我可以怎么做?

    print("in wrapper")
    example()
    

    但是我想在多个函数比如还有example2,example3前输入同样的话

     def example_all(func):
        print("in wrapper")
        func()
    

    编程思想之一,定义函数,减少重复写代码

    example_all(example)
    

    然后调用

    map(example_all,(example,))
    

    函数多就直接map

    example = example_all(example)
    

    以后调用example实际是调用example_all(example)

    我们在定义example_all时调用了func(),我们知道func函数自身要传入参数,
    直接传参?

    >>>def mydecorator2(func):
        print("haha")
        func(*args,**kargs)
    
    >>> mydecorator2(example)()
    haha
    Traceback (most recent call last):
      File "<pyshell#42>", line 1, in <module>
        mydecorator2(example)()
      File "<pyshell#41>", line 3, in mydecorator2
        func(*args,**kargs)
    NameError: name 'args' is not defined
    

    报错args和*kargs未定义,说明这两兄弟只能在def中用。

    总结

    敲黑板,重点,

    1、装饰器的写法,要在函数中定义一个函数,一般写wrapper,主要是为了用args,*kargs传参不报错。
    1、1 记得return wrapper,不然只定义不执行,没什么用。

    相关文章

      网友评论

          本文标题:2019-05-26python装饰器到底是什么?

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