ITPub博客

首页 > 人工智能 > 人工智能 > Python 返回函数+匿名函数

Python 返回函数+匿名函数

人工智能 作者:dicksonjyl560101 时间:2018-07-28 11:44:33 0 删除 编辑

返回函数

粗粗看了一遍学习资料,感觉返回函数的意思好理解,但是实际应用起来就有点麻烦了。

先捋一捋思路叭。

首先,高阶函数除了能接收函数作为参数外,也能将函数作为结果值返回。

 

函数作为返回值

求和 做个简单的例子:

一般的求和函数我们会这样写:

>>> def calc_sum(*args):

a = 0

for n in args:

        a = a + n

return a

>>> calc_sum(1,2,3,4)

10

直接求解,返回结果。

但是有时候我们不需要立刻求和,可能后面还需要计算,这个时候就要用到返回函数了。

(当我看到这里的时候,脑子里想的一直都是:为什么不要它立刻求和??)

返回函数到底又什么作用呢?

就好比做一件事,在做的过程中,返回函数的作用就是告诉你,我做到哪里/如何了,你能干嘛干嘛了。

暂时没有更具体的例子,希望以后能遇到,加深一下理解!(太抽象了!!)

好,回过头再来看看 求和用返回函数怎么写。

(不返回求和结果,而是返回一个求和的函数)

>>> def lazy_sum(*args):

def sum():

a = 0

for n in args:

        a = a + n

        return a

return sum

>>> f = lazy_sum(1,3,5,7,9)

>>> f

<function lazy_sum..sum at 0x11104f620>

可以看到,当我们调用 lazy_sum() 时,返回的不是求和结果,而是求和函数。

如果要计算真正的求和结果,就要再调用f.【 f() 相当于sum() 】

>>> f()

25

内部函数 sum 可以引用外部函数 lazy_sum 的参数和局部变量。

lazy_sum 返回函数 sum 时,相关参数和变量都保存在返回的函数中。(虽然这是一句很好理解的话,但是我莫名感觉它不简单!

这种程序结构,叫做“闭包”(Closure)。(吼!

这里需要注意的是,每次调用lazy_sum,返回的都是一个新的函数!

就算传入参数相同,返回的函数也不同!

>>> f1 = lazy_sum(1, 3, 5, 7, 9)

>>> f2 = lazy_sum(1, 3, 5, 7, 9)

>>> f1==f2

False

( f1() 和 f2()的调用结果互不影响


https://blog.csdn.net/Asiling_H/article/details/81236446


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29829936/viewspace-2168540/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
行万里路,读万卷书,阅无数人。 吃货一枚,爱吃湘菜,川菜,粤菜与杭帮菜,尝遍天下美食。 摄影爱好者,游遍名川大山,江河胡海,赏遍人间春色。 爱看影,尤其是港片,好莱坞大片。英文名:DicksonJin, 网名:风一样的BOY。精通SAP供应链咨询。2017年开始研习人工智能。

注册时间:2014-08-27

  • 博文量
    2169
  • 访问量
    3284856