您的位置:首页 > 编程语言 > Python开发

Python 函数式编程--返回函数

2016-07-10 21:33 405 查看

1.1 返回函数

1.1.1 函数作为返回值

>>> def lazy_sum(*args): #可变参数
... def sum():
... ax = 0
... for i in args: #调用外部函数的参数
... ax = ax + i
... return ax
... return sum --这里返回的是个函数
...
>>>
>>>
>>> lazy_sum(1, 3, 5, 7)
<function lazy_sum.<locals>.sum at0x2b8091d87268>
>>> lazy_sum(1,3, 5, 7)()
16
>>> f =lazy_sum(1, 3, 5, 7)
>>> f
<function lazy_sum.<locals>.sum at0x2b8091d87268>
>>> f()
16
注意:当我们调用lazy_sum()时,每次调用都会返回一个新的函数,即使传入相同的参数
>>> f1 = lazy_sum(1, 3, 5, 7, 9)
>>> f2 = lazy_sum(1, 3, 5, 7, 9)
>>> f1 == f2
False

1.1.2 闭包

看下闭包的问题
>>> def count():
... fs = []
... for i in range(1, 4):
... def f():
... return i*i
... fs.append(f)
... return fs
...
>>> f1, f2, f3 = count() --变量i都引用的是3
>>>
>>> f1
<function count.<locals>.f at0x2b8091d87488>
>>> f1()
9
>>> f2()
9
>>> f3()
9
回的函数引用了变量i,但它并非立刻执行。等到3个函数都返回时,它们所引用的变量i已经变成了3,因此最终结果为9。
改写代码
>>> def count():
... def f(j):
... return lambda:j*j --引用j变量,lambda匿名函数不用传参
... fs = []
... for i in range(1, 4):
... fs.append(f(i))
... return fs
>>> f1()
1
>>> f2()
4
>>> f3()
9
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  编程 Python 函数式