python中的迭代器和可迭代对象以及闭包
1.可迭代对象
概念:可以直接作用于for循环的对象实体被称为可迭代对象:Iterable
分类:可以直接作用于for循环的数据类型:
a.集合数据类型:包含list,tuple,dict,set,string
b.generator,包含生成器和yield的生成器
判断:isinstance( ) 可以用来判断一个对象是否是可迭代对象
from collections import Iterable
#import collections
print(isinstance([],Iterable))
print(isinstance((),Iterable))
print(isinstance({},Iterable))
print(isinstance(set([]),Iterable))
print(isinstance('hello',Iterable))
print(isinstance((x for x in range(10)),Iterable))
print(isinstance(10,Iterable))
print(isinstance(True,Iterable))
2.迭代器
概念:不但可以直接作用于for循环,还可以使用next()获取元素值,同时符合这两个条件的数据被称为迭代器【Iterator】。
判断:isinstance( ) 可以用来判断一个对象是否是迭代器
就目前而言:生成器是迭代器。生成器不但可以作用于for循环,还可以被next()函数不断调用并返回下一个值,直到最后抛出StopIteration错误表示无法继续返回下一个值了。
from collections import Iterator
#import collections
print(isinstance([],Iterator))
print(isinstance((),Iterator))
print(isinstance({},Iterator))
print(isinstance(set([]),Iterator))
print(isinstance('hello',Iterator))
print(isinstance((x for x in range(10)),Iterator))
print(isinstance(10,Iterator))
print(isinstance(True,Iterator))
Python的for循环本质上就是通过不断调用next()函数实现的,例如:
for x in [1, 2, 3, 4, 5]:
pass
实际上完全等价于上面的while循环
3.闭包
在一些语言中,在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包。或者在一个函数的内部定义了另外一个函数,并且外部函数的返回值是内部函数的引用,这样就构成了闭包。
#外部函数
def outerFunc():
#内部函数
def innerFunc():
pass
return innerFunc
r=outerFunc() #r=innerFunc
print r #<function innerFunc at 0x7f5f8a3ffa28>
---------------------
作者:owlcity123
原文:https://blog.csdn.net/owlcity123/article/details/85319565
版权声明:本文为博主原创文章,转载请附上博文链接!