为了账号安全,请及时绑定邮箱和手机立即绑定

返回函数代码不懂

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

这段代码不懂求指点

正在回答

1 回答

calc_prod返回了一个不带参数的函数lazy_prod(), lazy_prod()这个函数返回了一个经过reduce()计算后的结果,就是最终计算出来的值。

f = calc_prod([1, 2, 3, 4])的执行结果是函数lazy_prod的引用,也就是所f就是calc_prod的返回值,是一个函数。

最后f()才真正调用了上一步返回的函数,执行了reduce并返回最后的结果。

这里其实用到的就是闭包,函数内部的函数可以访问外部函数的局部变量,包括参数。 并且返回一个新的函数。

3 回复 有任何疑惑可以回复我~
#1

宝慕林6422410 提问者

非常感谢!
2017-09-17 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
python进阶
  • 参与学习       255665    人
  • 解答问题       2949    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程

返回函数代码不懂

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信