关于返回函数,为什么要在外面再套一个函数?

def calc_prod(lst):
    def lazy_prod():    #1
        def f(x, y):
            return x * y
        return reduce(f, lst)
    return lazy_prod    #2
print calc_prod([1, 2, 3, 4])()

为什么不加#1,2就会报错?

TypeError: 'int' object is not callable

错过了年华
浏览 1426回答 2
2回答

天使之翼死神之镰

你这个是python的闭包,建议好好学习下,calc_prod([1, 2, 3, 4])()后面有括号说明前面calc_prod([1, 2, 3, 4])是个方法句柄,所以调用该方法后必须返回一个方法句柄,即不带()的方法名,整个代码相当于执行了lazy_prod()。

lanrong1995

def calc_prod(lst):    def f(x, y):        return x * y    return reduce(f, lst)print calc_prod([1, 2, 3, 4])这样就可以跑了,你在calc_prod后面多加了一个括号
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python