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