Python函数式编程:返回函数和匿名函数的应用
返回函数所谓返回函数,顾名思义,就是把函数作为返回值。高阶函数除了可以将函数作为参数之外,还可以将函数作为结果进行返回。下面来实现一个可变参数的连乘,求积函数可定义为:defcalc_fac(*args):fx=0forninargs:fx=fx*nreturnfx很多时候当求积函数定义好后我们并不需要立即求积,而是会根据后面的计算再行调用。这时,我们就可以先不返回函数的结果,而是将函数本身返回,如下可见:deflazy_fac(*args):deffac(

返回函数
所谓返回函数,顾名思义,就是把函数作为返回值。高阶函数除了可以将函数作为参数之外,还可以将函数作为结果进行返回。下面来实现一个可变参数的连乘,求积函数可定义为:
def calc_fac(*args): fx = 0 for n in args: fx = fx * n return fx
很多时候当求积函数定义好后我们并不需要立即求积,而是会根据后面的计算再行调用。这时,我们就可以先不返回函数的结果,而是将函数本身返回,如下可见:
def lazy_fac(*args): def fac(): fx = 0 for n in args: fx = fx * n return fx return fac
重新定义求积函数后,当我们调用lazy_fac()时,返回的就不是求积的结果啦,而是求积函数:
>>> a=lazy_fac(1,2,3,4) >>> a.fac at 0x002a5dr42>
而当调用函数 a 时,求积过程才被执行:
>>> a() 24
此例中,我们在函数lazy_fac中又定义了函数fac,fac可称做内部函数,而lazy_fac为外部函数。内部函数fac可以引用外部函数的的参数和局部变量。参数和变量都保存在我们最后返回的内部函数fac中。这种程序结构在Python上我们称之为闭包。
在闭包结构中,函数作为结果返回时,函数过程并没有被立刻执行,而是等我们调用 a( )后才执行。
总之,在函数式编程里,函数除了可以返回一个计算结果之外,也可以返回一个未执行的函数。当返回函数时,始终牢记该函数并未被执行,返回函数中尽量不要引入循环变量等可能引起变化的变量。
匿名函数
当我们在传入函数时或者代码结构过于复杂时,我们可以通过匿名函数来代替显式的函数定义。此时,匿名函数会大大简化代码结构,可以使之更为精炼。
以之前介绍的 map 函数为例来计算 x3 看看匿名函数的功能:
>>> list(map(lambda x: x * x * x, [1, 2, 3])) [1, 8, 27]
对比可以看出,匿名函数lambda x : x*x*x 就相当于:
def f(x): return x * x * x
lambda作为匿名函数的关键字,冒号前面的 x 表示匿名函数的参数。匿名函数只能有一个表达式,无需像定义函数那样写 return。因为匿名函数没有函数名,在使用过程中就不需要担心函数名的冲突。匿名函数作为一个函数对象,也符合向变量进行赋值的规则:
>>> fx = lambda x: x * x * x >>> fxat 0x101c6ef28> >>> f(4) 64
同样,匿名函数作为一个函数也可以被被当成返回函数:
def f(x): return lambda: x * x * x
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















