微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python 中@符号解释

1、基本含义

  @符号用做函数的修饰符,可以在模块或者类的定义层内对函数进行修饰,出现在函数定义的前一行,不允许和函数定义在同一行。

  一个修饰符就是一个函数,它将被修饰的函数作为参数,并返回修饰后的同名函数或其他可调用的东西(如果返回不是一个调用的对象那么会报错)。

2、举例说明

  例子1:

def wrap(f):
    def decorator(*args,**kw):
        print 'Call %s()' % f.__name__
        return f(*args,**kw)
    return decorator

@wrap
def func(a,b):
    return a * 10 + b

if __name__ == '__main__':
    print func(1,2)

结果:

Call func()
12

个人结论:先执行wrap内的属性

        例子2:

def wrap1(f):
    def decorator(*args,**kw):
        print 'Call %s() in wrap1' % f.__name__
        return f(*args,**kw)
    return decorator


def wrap2(f):
    def decorator(*args,**kw):
        print 'Call %s() in wrap2' % f.__name__
        return f(*args,**kw)
    return decorator


@wrap2
@wrap1
def func(a,b):
    return a * 10 + b


if __name__ == '__main__':
    print func(5,6)

结果:

Call decorator() in wrap2
Call func() in wrap1
56

个人结论:先执行wrap2、1内顺序的属性 

3、总结

  由上面的例子可以看出,@符号其实就是个包装器,第2个例子中的func(5,6)其实含义是:wrap2(wrap1(func(5,6)))

  每一层调用装饰都传递的是函数对象,每一层Wrap返回对象也是一个调用的对象(如上例中的decorator)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐