鱼C论坛

 找回密码
 立即注册

python中返回函数

已有 152 次阅读2017-4-19 18:52

python中返回函数

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,返回一个函数,返回函数可以计算参数的乘积。


  1. def calc_prod(lst):  

    1. def calc_prod(lst):  
    2.     def ss():  
    3.         def ff(x, y):  
    4.             return x * y  
    5.         return reduce(ff, lst)  
    6.     return ss  
    7.   
    8. f = calc_prod([1234])  
    9. print f()  


路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-7 21:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部