码迷,mamicode.com
首页 > 编程语言 > 详细

Python进阶之返回函数

时间:2015-12-13 15:33:46      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:

返回函数

返回函数

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()

Python进阶之返回函数

标签:

原文地址:http://www.cnblogs.com/XBlack/p/5042797.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!