# 迭代器最大的作用就是统一了容器类型循环遍历的标准
for i in "你好":
print(i)
for i in 123: # int
# 报错 :TypeError: 'int' object is not iterable
# int 类型不可以迭代
print(i)
print(dir(str)) # 有__iter__
print(dir(list)) # 也有__iter__
print(dir(dict)) # 也有__iter__
print(dir(int)) # 没有__iter__
print('__iter__' in dir(bool)) # 没有__iter__
# iterable 可迭代的
# 所有的可迭代对象内部都含有一个__iter__的功能
lst = ['你好', '你不好', '你很好']
it = lst.__iter__() # iterator 迭代器
print(dir(it))
ret = it.__next__() # 你好
print(ret)
# 使用步骤:
# 1.通过__iter__拿到可迭代对象中的迭代器
# 2.用迭代器执行__next__拿到元素
# 3.重复第二步,反复执行,直到出现了StopIteration结束
s = {'你好', '你不好', '你很好'}
# 集合的数据不是有序的,所以每一次输出不一致。是任意的
it = s.__iter__()
print(it.__next__())
print(it.__next__())
print(it.__next__())
# 坑
# 1.想让迭代器重头拿数据,需要重新拿到迭代器
it = s.__iter__()
print(it.__next__())
print(it.__next__())
# 2.这里不适合使用数学上的等价交换
print(s.__iter__().__next__()) # 输出都是一样的,等价于两个迭代器了
print(s.__iter__().__next__())
# 还可以使用iter()来获取迭代器
lst = [11, 22, 33]
it = iter(lst) # it = lst.__iter__()
print(next(it)) # it.__next__()
print(next(it))
print(next(it))
# 使用while 循环 +迭代器来模拟for循环
lst = [1, 2, 3]
lst_iter = lst.__iter__()
while True:
try:
i = lst_iter.__next__()
print(i)
except StopIteration:
break
# 使用for循环来遍历
lst = [1, 2, 3]
lst_iter = lst.__iter__()
for i in lst_iter:
print(i)
# list可以一次性b把迭代器中的内容全部拿空,并装载在一个列表中
s = "我要吃饭,你吃不吃".__iter__()
print(list(s)) # ['我', '要', '吃', '饭', ',', '你', '吃', '不', '吃']
'''
总结
iterable:可迭代对象,内部包含__iter__()函数
iterator:迭代器,内部包含__iter()同时包含__next__()
迭代器的特点:
1.节省内存
2.惰性机制
3.不能反复,只能向下执行;
'''
标签:__,.__,迭代,python,基础,iter,next,print From: https://www.cnblogs.com/Wesuiliye/p/17156820.html