为什么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
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
2018-07-10
首先我们要理解d()和d的区别:
d()是调用函数,调用函数后才会返回函数运行的结果
d是函数本身
其次我们看d = c([1, 2, 3, 4]) 做了什么,按照顺序:
调用函数c(),并传入参数[1, 2, 3, 4] 使得 lst = [1, 2, 3, 4]
def a(): 声明函数a(),a()实现的功能:
def e(x,y): return x * y 声明函数e(),并表示传入参数x,y后,返回x,y相乘的结果
reduce(e,lst,1) 计算对lst数列元素相乘的结果,从元素1开始
返回函数a本身(并没有调用函数a(),所以不会返回函数计算的结果)
也就是说d 等价于 c([1, 2, 3, 4]) 返回的结果是a
d() 返回的结果是a() 而a()表示调用函数a(),将得到reduce(e,lst,1) 计算对lst数列元素相乘的结果,从元素1开始
举报