zoukankan      html  css  js  c++  java
  • python中的修饰器@

    '@'符号用作函数修饰符是python2.4新增加的功能,修饰符必须出现在函数定义前一行,不允许和函数定义在同一行。

    也就是说 @A def f(): 是非法的。 只可以在模块或类定义层内对函数进行修饰,不允许修修饰一个类。

    一个修饰符就是一个函数,它将被修饰的函数做为参数,并返回修饰后的同名函数或其它可调用的东西。


    #!/usr/bin/python
    
    def outer(f):
            print 'some message com from outer function'
            def inner(*arg):
                    print 'before function'
                    f(3, 6)
            print 'after function'
    
            return inner
    
    @outer
    def func(a, b): 
            print func.__name__                       
            print 'a = %s, b = %s' % (a, b)
    
    if __name__=='__main__':
            print 'start'
            func()
            print 'end'

    程序执行完得到的结果是:

    some message com from outer function
    after function
    start
    before function
    inner
    a = 3, b = 6
    end
    



    整段代码的执行流程:

        整个模块加载完毕,解释器将代码装换为语法树,解释器对 @ 进行解释时,实际上执行:

    1. func = outer(func)                 #根据输出结果可以看出
    复制代码
    这样 func 最终变成了 inner 函数,之后从 if __name__=='__main__' 开始执行,然后调用 func 函数

  • 相关阅读:
    每天读一下,你就会改变
    C++ 反转字符串(原创)
    C++ string学习
    18种常见室内花卉的功效 (转自网络)
    UML建模教程
    孙鑫视频VC++深入详解学习笔记
    visual C++ 6.0开发工具与调试
    C++ typeid typename使用
    C++模板学习
    Working classes Code complete reading notes(6)
  • 原文地址:https://www.cnblogs.com/double12gzh/p/10166176.html
Copyright © 2011-2022 走看看