Python 函数式编程--返回函数
2016-07-10 21:33
489 查看
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动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例
- 肯特·贝克:改变人生的代码整理魔法