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

以下代码为什么不行呢

def calc_prod(lst):

    

    def a(x,y):

        return x*y

    def lazy_prod():

        return reduce(a,lst)

    reduce lazy_prod


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

print f()


正在回答

6 回答

函数在同一层次读到return就返回了,你的函数a和函数lazy_prod是同一层次

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

慕婉清7387952 提问者

非常感谢!
2018-07-31 回复 有任何疑惑可以回复我~

def calc_prod(lst):

    def f(x, y):

            return x*y

    def lazy_prod():

        return reduce(f, lst, 1)

    return lazy_prod


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

print f()

#将调用函数放在前面,然后在reduce调用,这样写是可以的

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

你上面的是可以的,就一个关键字写错了而已.

def calc_prod(lst):

    def a(x,y):

        return x*y  ##这种分离出来还更好,逻辑更清晰.

    def lazy_prod():

        return reduce(a,lst)

    reduce lazy_prod       ##这一句的前面写错了,应该是return就可以了


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

print f()


#######################################

下面是我写的,在Python3.x版本运行的结果.

from functools import reduce

def cheng_ji(x,y):  ##直接分离在这里,以备调用
    return x*y

def calc_prod(lst):
    def inner(): #这里闭包
        return reduce(cheng_ji,lst) #这里调用,并返回给闭包
    return inner  #这里把闭包返回去

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


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

def calc_prod(lst):

    def lazy_prod():

        def a(x,y):

            return x*y

        return reduce(a,lst)

    return lazy_prod

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

print f()


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

def calc_prod(lst):

      def func(lst):

        def f(x,y):

            return x*y

        return reduce(f,lst)

    return func(lst)


print calc_prod([1, 2, 3, 4])

把那个乘积函数写到返回函数里就可以了。

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

慕婉清7387952 提问者

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

,所以lazy这个函数就没有什么用,而且a(x,y)这里也没有参数传入,所以a这个函数也用不了,最外层传入一个列表也没有使用,它又不知道你列表中谁是x谁是y.反正每行都有问题

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

举报

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

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

进入课程

以下代码为什么不行呢

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