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

为什么定义lazy_prod()函数

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()


正在回答

2 回答

这个是用户自己定义的的一个内部函数,不是系统规定的,是用户自己定义的。你可以定义它其他符合Python命名规则的名称。。。这部分的逻辑是:f = calc_prod([1, 2, 3, 4]),等号左边的是标签f,等号右边是calc_prod([1, 2, 3, 4])。等号的作用是将等号右边的结果赋值给等号左边,等号右边的结果是函数calc_prod([1, 2, 3, 4])的返回值,也就是lazy_prod;这个式子运行结束之后,将f这个标签贴给lazy_prod,当执行f()时等同于执行lazy_prod()。。。可能答案给的有点复杂涉及到另一个高阶函数。可以用这个简化的代码作为理解:

def calc_prod(lst):

    #函数内部定义一个函数,并返回

    def lazy_prod():

        #在calc_prod内部定义一个函数lazy_prod

        sum = 1

        for i in lst:

            sum = sum * i

        #内部函数返回值为乘积

        return sum

    #外部函数返回的是内部函数

    return lazy_prod

    

f = calc_prod([1, 2, 3, 4]) 

#此时内部函数执行完毕,返回内部函数的标签

#此时传入值还是外部函数的参数lst

print f()

#内部函数标签与()实现对内部函数的调用,返回值是sum


6 回复 有任何疑惑可以回复我~

这样可以延迟函数的执行,个人认为就是,我返回的是一个函数,比如你给的代码里的reduce.这个函数你到你真的想用的时候再用. 比如说你想吃面条,但是又不想立即吃,可是不立即吃面条就会坨了.所以怎么办呢,商家直接把面条的原材料和方法告诉你,你什么想吃了,什么时候执行这个方法,把面条做了,自己吃.

2 回复 有任何疑惑可以回复我~

举报

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

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

进入课程

为什么定义lazy_prod()函数

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