python 函数包装不起作用

python function wrapping not working

我在 https://www.youtube.com 上得到了函数包装的例子,但它抛出异常。

def addOne(myfunc):

    def addOneInside(myfunc):       
        return myfunc()+1

    return addOneInside

def oldFunc():

    return 3

oldFunc=addOne(oldFunc)

print oldFunc()

错误是:

TypeError: addOneInside() takes exactly 1 argument (0 given)

任何人都可以解释是什么问题。

addOneInside 不需要参数。 myfunc 将可通过上下文访问。

改为

def addOne(myfunc):
    def addOneInside():       
        return myfunc()+1
    return addOneInside

这里的术语有点奇怪 - 这不是严格的函数覆盖,它是函数 wrapping。我想你想要的是一个装饰器。 @bytesized 在语法方面是正确的,但还有更多关于您正在尝试的内容需要了解。这是一篇很棒的文章,可能会有所帮助(遍历闭包、局部函数并处理装饰器):http://simeonfranklin.com/blog/2012/jul/1/python-decorators-in-12-steps/