【Python】闭包 & 匿名函数
2017-03-18 22:04
197 查看
闭包
1、注意:返回的函数内部不要使用后续会发生变化的变量。
例如这段代码感觉上应该返回三个函数分别return i+1、return i+2、return i+3(i为新函数参数),但事实却是得到了三个return i+3。
2、如果一定要得到return i+1、return i+2、return i+3这三个函数怎么办?
可以这样
但是要得到return i + 1 ~ return i + 100就行不通了,这时候可以
这段代码可以这样看:f()最终返回一个函数list->hs,那么hs需要append什么呢?append n个reuturn i+n函数。这些函数又怎么得到呢?利用内部的函数返回得到。更清晰的版本:
匿名函数=lambda
1、注意:返回的函数内部不要使用后续会发生变化的变量。
def f(): gs = [] for k in range(1, 4): def g(i): return i + k gs.append(g) return gs
例如这段代码感觉上应该返回三个函数分别return i+1、return i+2、return i+3(i为新函数参数),但事实却是得到了三个return i+3。
>>> from test import f >>> g1, g2, g3 = f() >>> g1(0) 3 >>> g2(0) 3 >>> g3(0) 3
2、如果一定要得到return i+1、return i+2、return i+3这三个函数怎么办?
可以这样
def f(): gs = [] gs.append(lambda x : x + 1) gs.append(lambda x : x + 2) gs.append(lambda x : x + 3) return gs
但是要得到return i + 1 ~ return i + 100就行不通了,这时候可以
def f(): hs = [] def g(i): def h(j): return j + i return h for k in range(1, 3): hs.append(g(k)) return hs
这段代码可以这样看:f()最终返回一个函数list->hs,那么hs需要append什么呢?append n个reuturn i+n函数。这些函数又怎么得到呢?利用内部的函数返回得到。更清晰的版本:
def f(): # 返回函数的函数 def g(i): return lambda j : i + j # 获取元素为函数的list hs = [] for k in range(1, 5): hs.append(g(k)) return hs
匿名函数=lambda
相关文章推荐
- python闭包实现,匿名函数的实现
- Python返回函数_函数闭包_lambda匿名函数
- 匿名函数 & 闭包 ( 7 章 )
- Python 进阶_闭包 & 装饰器
- Python3 基本语法四 函数 匿名函数 闭包
- Python入门 第四天(函数式编程、map、reduce、filter、排序函数、函数返回函数、闭包、匿名函数lambda)
- Python 语言及其应用 Chapter_4_Note_3 闭包_匿名函数lambda_生成器
- Python 函数式编程(高阶函数、把函数作为参数、map()函数、reduce()函数、filter()函数、自定义排序函数、函数返回函数、闭包、匿名函数、装饰器decorator)
- 【Python】 闭包&装饰器
- 【Python笔记】Python的几个高级语法概念浅析:lambda表达式 && 闭包 && 装饰器
- Python -- 内嵌函数 & closure(闭包) 浅析
- ·python·用生成器和迭代器实现自己的xrange
- 从Python & Zope到Java with EJB 3 & JBoss SEAM
- python->FTP上传下载文件
- 从Python & Zope到Java with EJB 3 & JBoss SEAM
- 从Python & Zope到Java with EJB 3 & JBoss SEAM
- (Python编程)"添加Python,充分混和。"
- 从Python & Zope到Java with EJB 3 & JBoss SEAM
- 从Python & Zope到Java with EJB 3 & JBoss SEAM
- 从Python & Zope到Java with EJB 3 & JBoss SEAM