转自http://blog.csdn.net/ljp1919/article/details/50937665
1:python返回函数
Python的函数不但可以返回int、str、list、dict等数据类型,还可以返回函数!例如,定义一个函数 f(),我们让它返回一个函数 g,可以这样写:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
在函数 f 内部又定义了一个函数 g。由于函数 g 也是一个对象,函数名 g 就是指向函数 g 的变量,所以,最外层函数 f 可以返回变量 g,也就是函数 g 本身。调用函数 f,我们会得到 f 返回的一个函数:
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
2:请注意区分返回函数和返回值:
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
3:返回函数可以把一些计算延迟执行。
这点其实是回调函数。例如,如果定义一个普通的求和函数:
- 1
- 2
- 1
- 2
调用calc_sum()函数时,将立刻计算并得到结果:
calc_sum([1, 2, 3, 4])#返回结果是10,立刻可以得到
但是,如果返回一个函数,就可以“延迟计算”:
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
调用calc_sum()并没有计算出结果,而是返回函数:
- 1
- 2
- 1
- 2
4:使用例子
请编写一个函数calc_prod(lst),它接收一个list,返回一个函数,返回函数可以计算参数的乘积。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
补充reduce:
python中的reduce内建函数是一个二元操作函数,他用来将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给reduce中的函数 func()(必须是一个二元操作函数)先对集合中的第1,2个数据进行操作,得到的结果再与第三个数据用func()函数运算,最后得到一个结果。所以,上述的连乘操作,需要定义如上: