为什么定义lazy_prod()函数
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()
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()
2018-12-25
这个是用户自己定义的的一个内部函数,不是系统规定的,是用户自己定义的。你可以定义它其他符合Python命名规则的名称。。。这部分的逻辑是:f = calc_prod([1, 2, 3, 4]),等号左边的是标签f,等号右边是calc_prod([1, 2, 3, 4])。等号的作用是将等号右边的结果赋值给等号左边,等号右边的结果是函数calc_prod([1, 2, 3, 4])的返回值,也就是lazy_prod;这个式子运行结束之后,将f这个标签贴给lazy_prod,当执行f()时等同于执行lazy_prod()。。。可能答案给的有点复杂涉及到另一个高阶函数。可以用这个简化的代码作为理解:
def calc_prod(lst):
#函数内部定义一个函数,并返回
def lazy_prod():
#在calc_prod内部定义一个函数lazy_prod
sum = 1
for i in lst:
sum = sum * i
#内部函数返回值为乘积
return sum
#外部函数返回的是内部函数
return lazy_prod
f = calc_prod([1, 2, 3, 4])
#此时内部函数执行完毕,返回内部函数的标签
#此时传入值还是外部函数的参数lst
print f()
#内部函数标签与()实现对内部函数的调用,返回值是sum
举报