Python 函数式编程 02 返回函数、匿名函数

1 返回函数

1)函数作为返回值

# 定义函数
>>> def then_sum(*args):
...     def cal_sum():
...         sum=0
...         for n in args:
...             sum=sum+n
...         return sum
...     return cal_sum
...
# 调用函数
>>> f=then_sum(1,2,3,4)
>>> f
<function then_sum.<locals>.sum at 0x104a4ee18> # 返回求和函数
# 调用函数f,实现求和
>>> f()
10

2)闭包

在上面代码中,我们在函数then_sum中又定义了函数cal_sum,并且,内部函数cal_sum可以引用外部函数then_sum的参数和局部变量,当then_sum返回函数cal_sum时,相关参数和变量都保存在返回的函数中,这种称为“闭包(Closure)”的程序结构拥有极大的威力。

注意:

  • 返回闭包时,返回函数不要引用任何循环变量,或者后续会发生变化的变量。

示例

2 匿名函数

>>> list(map(lambda x: x*x ,[1,2,3,4]))
[1, 4, 9, 16]

关键字lambda表示匿名函数,冒号前面的x表示函数的参数。

  • 匿名函数只能有一个表达式,不用写return,返回值就是该表达式的结果。
  • 匿名函数也是一个函数对象,也可以把它赋值给一个变量。
>>> nf=lambda x: x*x
>>> nf
<function <lambda> at 0x104a4ef28>
>>> nf(5)
25
  • 也可以把匿名函数作为返回值返回
>>> def myfunc(x,y):
...     return lambda: x*x+y*y
...
>>> myfunc(3,4)
<function myfunc.<locals>.<lambda> at 0x104a4ed90>
>>> myfunc(3,4)()
25

猜你喜欢

转载自blog.csdn.net/lihaogn/article/details/81007149