标签:
Python函数不但能返回int、str、list、dict等数据类型,还可以返回函数。
举个栗子:定义一个函数f(),让它返回一个函数g
1.def f():
2. print ‘call f()...‘
3. #定义函数g
4. def g():
5. print ‘call g()...‘
6. #返回函数g
7. return g
调用函数 f,我们会得到 f 返回的一个函数:
1.>>> x = f() # 调用f()
2.call f()...
3.>>> x # 变量x是f()返回的函数:
4.<function g at 0x1037bf320>
5.>>> x() # x指向函数,因此可以调用
6.call g()... # 调用x()就是执行g()函数定义的代码
请注意区分返回函数和返回值:
1.def myabs():
2. return abs # 返回函数
3.def myabs2(x):
4. return abs(x) # 返回函数调用的结果,返回值是一个数值
返回函数可以把一些计算延迟执行。例如,如果定义一个普通的求和函数:
1.def calc_sum(lst):
2. return sum(lst)
调用calc_sum()函数时,将立刻计算并得到结果:
1.>>> calc_sum([1, 2, 3, 4])
2.10
但是,如果返回一个函数,就可以“延迟计算”:
1.def calc_sum(lst):
2. def lazy_sum():
3. return sum(lst)
4. return lazy_sum
调用calc_sum()并没有计算出结果,而是返回函数:
1.>>> f = calc_sum([1, 2, 3, 4])
2.>>> f
3.<function lazy_sum at 0x1037bfaa0>
对返回的函数进行调用时,才计算出结果:
1.>>> f()
2.10
由于可以返回函数,我们在后续代码里就可以决定到底要不要调用该函数。
再例如要编写一个函数calc_prod(lst),它接收一个list,返回一个函数,返回函数可以计算参数的乘积。
1.def calc_prod(lst):
2. def prob():
3. def f(x,y):
4. return x*y
5. return reduce(f,lst,1)
6. return prob
7.
8.f = calc_prod([1, 2, 3, 4])
9.print f()
标签:
原文地址:http://www.cnblogs.com/XBlack/p/5042797.html