python基础-迭代器

# 迭代器最大的作用就是统一了容器类型循环遍历的标准

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.不能反复,只能向下执行;
'''

 

posted @ 2023-02-26 15:43  0x1e61  阅读(12)  评论(0编辑  收藏  举报