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

哪里错呢?程序1和程序2的区别?(小白一个,别介)

程序1:

def calc_prod(lst):

    def g(x,y):

        return x*y

    return reduce(g,lst)

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

print f()

程序2:
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 回答

<1>   程序1中  执行完语句 f = calc_prod([1, 2, 3, 4])  时,对象f 中存放的是结果24,而不是函数g(x,y)的地址。

          也就是说,calc_prod( ) 函数返回的不是函数,而是一个具体的值。并且当 f 存放的是一个具体值的时候               (非函数地址值),你的最后一句语句 print  f() 是非法的

          http://img1.sycdn.imooc.com//56fb8d580001985f04040305.jpg

<2>   程序2  跟本节课的知识点一样,cal_prod()是一个返回函数的函数。

       http://img1.sycdn.imooc.com//56fb8cf2000191fc04420331.jpg

           

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

关珃 提问者

非常感谢!
2016-04-23 回复 有任何疑惑可以回复我~

1中,calc_prod函数返回的是int类型,将其赋值给f后,f变为一个指向int整数的变量,是不能再后面加括号call的,直接在最后一行改为 print f 即可。

2中,calc_prod函数返回的是lazy_prod函数,并不是进行调用后的int类型返回值,所以此时f指向的是函数lazy_prod,可以加括号调用得到执行结果

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

举报

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

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

进入课程

哪里错呢?程序1和程序2的区别?(小白一个,别介)

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