zoukankan      html  css  js  c++  java
  • python 装饰器

    1.

    >>> def deco(func):
    ...     print "In deco"
    ...     return func
    ...
    >>> @deco
    ... def foo():
    ...     print "In foo"
    ...
    In deco                 #因为deco()返回的 func 本身
    >>>

    >>>foo()
    In foo

    2.改进

    >>> def deco(func):
    ...    print "in deco"
    ...    def wrapper():
    ...         print "wrapper start"
    ...         func()
    ...         print "wrapper end"
    ...    return wrapper
    ...
    >>>
    >>> @deco
    ... def foo():
    ...   print "foo"
    ...
    in deco
    >>>
    >>>
    >>> foo()
    wrapper start
    foo
    wrapper end

    在非交互模式下输出:

    in deco
    wrapper start
    foo
    wrapper end

    3.怎么装饰不同参数的多个函数

    def deco(func):
        def wrapper(*args, **kwargs):
            print "Wrap start"
            func(*args, **kwargs)
            print "Wrap end"
        return wrapper
    
    @deco
    def foo(x):
        print "In foo():"
        print "I have a para: %s" % x
    
    @deco
    def bar(x,y):
        print "In bar():"
        print "I have two para: %s and %s" % (x, y)
    
    @deco
    def foo_dict(x,z='dict_para'):
        print "In foo_dict:"
        print "I have two para, %s and %s" % (x, z)
    
    if __name__ == "__main__":
        foo('x')
        bar('x', 'y')
        foo_dict('x', z='dict_para')

    4.让装饰函数名更有意义些:带参数的装饰函数

    def deco(arg):
        def _deco(func):
            def wrapper():
                print("before %s called [%s]." % (func.__name__, arg))
                func()
                print("after %s called [%s]." % (func.__name__, arg))
            return wrapper
        return _deco
     
    @deco("module1")             #可以填插入类型
    def insert_balance():
        print("insert into balance")
     
    @deco("module2")
    def insert_customer():
        print("insert into customer")
  • 相关阅读:
    阅读ARm芯片手册 阅读方法
    Linux驱动mmap内存映射
    Linux下inotify的基本使用及注意事项
    网络视频监控与人脸识别
    Linux pci驱动源码
    Verilog语法
    跟着我从零开始入门FPGA(一周入门XXOO系列)-1、Verilog语法
    周立功-我的25年嵌入式生涯
    Linux 进程学习
    [转]MFC下关于“建立空文档失败”问题的分析
  • 原文地址:https://www.cnblogs.com/yuyutianxia/p/4116082.html
Copyright © 2011-2022 走看看