我如何使用'@'自己的功能,如'@staticmethod'

时间:2009-12-25 06:56:55

标签: python decorator

下一个是我的代码,它可以打印'xxx',但最后运行错误:

def a(object):
    print 'xxx'

@a
def b():
    return 'bbb'
b()

在你的答案中,请尝试使用代码示例而不是文本,因为我的英语不是很好。谢谢。

2 个答案:

答案 0 :(得分:5)

装饰器表单@a表示:

@a
def b...

完全相同:

def b...

b = a(b)

所以,将a写为高阶函数,AKA HOF :具体来说,是一个以函数对象作为参数的函数,并返回一个功能对象。

当你在关于 a应该 DO 的问题中给出 NO 这个想法时,你真正做到了不可能给出任何有意义的代码示例:良好的英语与否,你真的污染了SO,而不是通过你的问题做出贡献,因为你从未解释 WHAT 你想要完成在你的代码中!!!

答案 1 :(得分:1)

def a(b):
    print 'xxx'
    return b

@a
def b():
    return 'bbb'
b()

这与:

相同
def a(b):
    print 'xxx'
    return b


def b():
    return 'bbb'

b = a(b)
b()