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

希望哪位大神来注释一下这个代码,有点懵逼

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

正在回答

5 回答

return reduce(f, lst, 1)

f(x, y) = x*y

#reduce(f(x, y), [1, 2, 3, 4], 1) 计算出来的结果是  1*1*2*3*4 = 24

reduce可以实现将列表进行遍历 计算
0 回复 有任何疑惑可以回复我~

中间的 der f这个函数作用是利用reduce特性遍历list并同时赋予前后两值的乘积操作 其实可以直接用for in遍历list或者评论中写出的reduce的其他用法

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

我感觉也是这样

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

这么复杂的吗?这个答案。没必要。

def calc_prod(lst):    
    #
    def s():        
        return reduce(lambda x,y:x*y,lst)     用lambda 替代 创建函数式
        
return sf = calc_prod([1, 2, 3, 4])
print f()

或者 稍微不好看的(利用前面的知识):

def calc_prod(lst):    
    #
    def f(x,y):        
        return x*y 
        
    reduce(f,lst) 
        
return sf = calc_prod([1, 2, 3, 4])
print f()
1 回复 有任何疑惑可以回复我~

我也是初学,我的理解是这样,不知道对不对

print f()
执行f函数,而f=calc_prod([1, 2, 3, 4]),意味着f函数是calc_prod([1, 2, 3, 4])调用之后返回的函数对象。即lazy_prod函数。也就是说调用的其实是lazy_prod()函数,lazy_prod函数返回的是reduce(f,lst),也就是对lst集合进行f函数的reduce操作,其次就进入f(x,y)函数,这个函数返回的是x*y,也就是对lst集合进行累乘操作,结果就是1*2*3*4=24

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

举报

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

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

进入课程

希望哪位大神来注释一下这个代码,有点懵逼

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