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))

python中的迭代器和可迭代对象以及闭包

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中的迭代器和可迭代对象以及闭包

python中的迭代器和可迭代对象以及闭包

python中的迭代器和可迭代对象以及闭包

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>

python中的迭代器和可迭代对象以及闭包

---------------------

作者:owlcity123

原文:https://blog.csdn.net/owlcity123/article/details/85319565

版权声明:本文为博主原创文章,转载请附上博文链接!

相关推荐