python中返回函数
来源:互联网 发布:为什么微信网络不稳定 编辑:程序博客网 时间:2024/05/17 23:51
Python的函数不但可以返回int、str、list、dict等数据类型,还可以返回函数!
例如,定义一个函数 f(),我们让它返回一个函数 g,可以这样写:
def f(): print 'call f()...' # 定义函数g: def g(): print 'call g()...' # 返回函数g: return g
仔细观察上面的函数定义,我们在函数 f 内部又定义了一个函数 g。由于函数 g 也是一个对象,函数名 g 就是指向函数 g 的变量,所以,最外层函数 f 可以返回变量 g,也就是函数 g 本身。
调用函数 f,我们会得到 f 返回的一个函数:
>>> x = f() # 调用f()call f()...>>> x # 变量x是f()返回的函数:<function g at 0x1037bf320>>>> x() # x指向函数,因此可以调用call g()... # 调用x()就是执行g()函数定义的代码
请注意区分返回函数和返回值:
def myabs(): return abs # 返回函数def myabs2(x): return abs(x) # 返回函数调用的结果,返回值是一个数值
返回函数可以把一些计算延迟执行。例如,如果定义一个普通的求和函数:
def calc_sum(lst): return sum(lst)
调用calc_sum()函数时,将立刻计算并得到结果:
>>> calc_sum([1, 2, 3, 4])10
但是,如果返回一个函数,就可以“延迟计算”:
def calc_sum(lst): def lazy_sum(): return sum(lst) return lazy_sum
# 调用calc_sum()并没有计算出结果,而是返回函数:
>>> f = calc_sum([1, 2, 3, 4])>>> f<function lazy_sum at 0x1037bfaa0>
# 对返回的函数进行调用时,才计算出结果:
>>> f()10
由于可以返回函数,我们在后续代码里就可以决定到底要不要调用该函数。
任务
请编写一个函数calc_prod(lst),它接收一个list,返回一个函数,返回函数可以计算参数的乘积。
- ?不会了怎么办
先定义能计算乘积的函数,再将此函数返回。
参考代码:
def calc_prod(lst): def lazy_prod(): def f(x, y): return x * y return reduce(f, lst, 1) return lazy_prodf = calc_prod([1, 2, 3, 4])print f()
def cal(a): sum = 1 for i in a: sum=i*sum return sum def calc_prod(lst): def fun(): return cal(lst) return fun()f = calc_prod([1, 2, 3, 4])print f
0 0
- python中返回函数
- python中返回函数
- 关于python中extend()函数返回值
- Python语言中函数调用与返回--Python(17)
- python 函数返回多个值
- python函数返回多个值
- python函数返回值
- python中的返回函数
- python函数返回多个值
- python返回函数
- Python 函数返回值
- python的返回函数
- Python 返回函数
- python函数返回问题
- python 返回函数
- python 返回函数
- python 函数返回多个值
- Python单元测试中mock一个返回generator的函数
- LeetCode 283. Move Zeroes
- 搭建风控系统道路上踩过的坑 | 一个CPO的心得分享
- 基于Word模板的快速报表生成
- 关于CI里面的购物车
- 为什么我从阿里巴巴辞职选择自由职业?
- python中返回函数
- C#导出Excel
- linux虚拟机能ping通windows主机,windows主机ping不通linux虚拟机的解决办法
- POJ 3159(spfa + 数组模拟)
- LeetCode 404. Sum of Left Leaves
- Map快速转换JSon 格式方法和完整的jar
- Js校验表单数据后提交表单的3种方法
- 内存管理算法实现
- cgi实现网页向服务器传送文件