迭代器
from collections.abc import Iterator,Iterable 3.8版本以上
迭代器是能被next()
函数调用并不断返回下一个值的对象。迭代器指的是迭代取值的工具,迭代是一个重复的过程,每次重复都是基于上一次的结果而继续的。迭代器的特征是并不依赖索引,而通过next指针(内存地址寻址)迭代所有数据,一次只取一个值,而不是一股脑的把所有数据放进内存,大大节省空间。
可迭代对象
setvar = {"王同培","马春配","赵万里","赵沈阳"}
# 获取当前对象的内置成员
lst = dir(setvar)
print(lst)
# 判断是否是可迭代对象
res = "__iter__" in lst
print(res)
迭代器
for循环之所以可以遍历所有的数据,是因为底层使用了迭代器,通过地址寻址的方式,一个一个的找数据; 可迭代对象 -> 迭代器 实际上就是从不能够被next直接调用 -> 可以被next指针直接调用的过程。
如果是可迭代对象 -> 不一定是迭代器
如果是迭代器 -> 一定是可迭代对象
# 1.如何创建一个迭代器
setvar = {"王同培","马春配","赵万里","赵沈阳"}
#方法一
it = iter(setvar)
#方法二
it = setvar.__iter__()
print(it)
# 2.如何判断一个迭代器
print(dir(it))
res = "__iter__" in dir(it) and "__next__" in dir(it)
print(res)
# 3.如何调用一个迭代器
"""next是单向不可逆的过程,一条路走到黑"""
res = next(it)
print(res)
res = next(it)
print(res)
res = next(it)
print(res)
res = next(it)
print(res)
# 4.重置迭代器
it = iter(setvar)
"""调用迭代器的魔术方法"""
print( it.__next__() )
print( it.__next__() )
print( it.__next__() )
print( it.__next__() )
# 5.调用迭代器的其他方法
# 1 for
it = iter(setvar)
for i in it:
print(i)
# 2 for + next
it = iter(setvar)
for i in range(5):
print( next(it) )
# 6.判断迭代器/可迭代对象的其他方法
# 从...模块 引入...内容
from collections import Iterator, Iterable
"""Iterator 迭代器 Iterable 可迭代的对象"""
res = isinstance(it,Iterator)
print(res)
res = isinstance(it,Iterable)
print(res)
# 7.range是迭代器么?
print(isinstance(range(10),Iterator)) # False
print(isinstance(range(10),Iterable)) # True
# 变成迭代器
it = range(10).__iter__()
print(isinstance(it,Iterator)) # True
print(isinstance(it,Iterable)) # True
标签:__,迭代,res,iter,next,print
From: https://www.cnblogs.com/wbcde116/p/18049033