'''
ls = [3, 1, 5, 2, 4]
# 通過索引循環取值
count = 0
while count < len(ls):
print(ls[count], end=" ")
count += 1
print()
# 尋求一種不依賴索引,且可以循環取值的方式
dic = {'a': 1, 'b': 2, 'c': 3}
print(dic)
# 通過__iter__()方法獲取dic的一個不用依賴索引的取值容器
box = dic.__iter__()
print(box)
print(box.__next__())
box2 = ls.__iter__()
print(box2)
print(box2.__next__())
box3 = 'abc'.__iter__()
print(box3)
print(box3.__next__())
box4 = {'a', 'b', 'c'}.__iter__()
print(box4)
print(box4.__next__())
with open('1.txt', 'r', encoding='utf-8') as r:
print(r)
print(r.__next__())
dic_box = box
print(dic_box.__next__())
new_box = box.__iter__()
print(new_box.__next__())
print(dic)
dic_box = dic.__iter__()
'''
# 可迭代對象:可以被轉化為不依賴索引取值的容器,這樣的對象就叫做可迭代對象
# -- 對象.__iter__() 來生成不依賴索引取值的容器
# -- 結論:有__iter__()方法的對象都稱之為 可迭代對象
# 迭代器對象:可以通過__next__()的方式進行取值的容器,且取一個少一個
# -- 結論:有__next__()且可以通過__next__()進行取值的容器
# -- 注意:迭代器對象自身也擁有__iter__(), 通過該方法返回的是迭代器對象自身
# 迭代器(for循環):就是用來從可迭代對象中進行取值的循環方法 | 語法:for 變量 in 對象:
# -- 1.通過對象.__iter__()獲取其對應的迭代器對象
# -- for可以操作迭代器對象及可迭代對象,統一寫法,所以迭代器和可迭代對象都有__iter__()
# -- 2.在內部通過迭代器對象的__next__()進行取值,將值賦值給 語法中的變量,取一個少一個
# -- 3.當迭代器對象取完了,在內部自動捕獲異常,並結束循環取值
dic1 = {'a': 1, 'b': 2, 'c': 3} # dic是可迭代對象
# dic1_box = dic1.__iter__() # 通過__iter__()得到的是迭代器對象
# # print(len(dic1_box)) # 迭代器對象沒有len()方法
# while True:
# try:
# print(dic1_box.__next__())
# except StopIteration:
# # print('取完了')
# break
for v in dic1:
print(v)