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

为什么print d没有值输出呢,print d()才有值呢

def c(lst):
    def a():
        def e(x,y):
            return x * y
        return reduce(e,lst,1)
    return a
d = c([1, 2, 3, 4])
print d

正在回答

2 回答

首先我们要理解d()和d的区别:

  1. d()是调用函数,调用函数后才会返回函数运行的结果

  2. d是函数本身

其次我们看d = c([1, 2, 3, 4]) 做了什么,按照顺序:

  1.  调用函数c(),并传入参数[1, 2, 3, 4] 使得 lst = [1, 2, 3, 4]

    1. def a(): 声明函数a(),a()实现的功能:

      1. def e(x,y): return x * y 声明函数e(),并表示传入参数x,y后,返回x,y相乘的结果

      2. reduce(e,lst,1) 计算对lst数列元素相乘的结果,从元素1开始

    2. 返回函数a本身(并没有调用函数a(),所以不会返回函数计算的结果)

也就是说d 等价于 c([1, 2, 3, 4]) 返回的结果是a

d() 返回的结果是a() 而a()表示调用函数a(),将得到reduce(e,lst,1) 计算对lst数列元素相乘的结果,从元素1开始



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

慕尼黑1183503 提问者

非常感谢!写得很详细,现在明白了
2018-07-10 回复 有任何疑惑可以回复我~

你定义的c函数里返回的一个函数a,print d()相当于调用了函数后打印,单纯打印print d没有调用到函数,应该会返回对象的地址信息吧

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

举报

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

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

进入课程

为什么print d没有值输出呢,print d()才有值呢

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