为什么不能直接 print calc_prod([1, 2, 3, 4])还要另设变量f,不会和返回函数最里层的f(x,y)混淆吗
为什么不能直接 print calc_prod([1, 2, 3, 4])还要另设变量f,不会和返回函数最里层的f(x,y)混淆吗
为什么不能直接 print calc_prod([1, 2, 3, 4])还要另设变量f,不会和返回函数最里层的f(x,y)混淆吗
2018-04-01
#!/usr/bin/env python # -*- coding: utf-8 -*- ''' 任务 请编写一个函数calc_prod(lst),它接收一个list,返回一个函数,返回函数可以计算参数的乘积。 ''' # 第一种方法: def calc_prod(lst): def prod(): return reduce(lambda x, y : x * y, lst) return prod f = calc_prod([1, 2, 3, 4]) print f() # 输出结果:24 # 第二种方法: def f(x, y): return x *y lst = [1, 2, 3, 4] # reduce()传入的函数 f 必须接收两个参数 # reduce(2个函数,列表,初始化值) print reduce(f, lst) # 输出结果:24 def calc_prod(lst): def f(x,y): return x * y return reduce(f, lst, 1) # 返回函数调用的结果,返回值是一个数值 print calc_prod([1, 2, 3, 4]) # 输出结果:24 #延迟计算定义函数 def calc_prod(lst): # 定义一个函数c def c(): def f(x, y): return x * y return reduce(f, lst, 1) # 返回函数c return c s = calc_prod([1, 2, 3, 4]) # 变量s 是calc_prod(lst)返回的函数c print s() # 调用s()就是执行c()函数定义的代码 # 输出结果:24
举报