迭代器
1、什么是迭代器
迭代:迭代指的是重復迭代,每一次迭代的結果都是基于上一次而來的
迭代器:指的是迭代取值的工具,可以迭代取值
2、可迭代物件
可迭代物件: 所有的序列型別:str,list,tuple,dict,set,file都是可迭代物件
凡是內部有.__iter__()方法的都是可迭代物件
# 字串
str.__iter__()
# 元組
tuple.__iter__()
# 串列
list.__iter__()
# 字典
dict.__iter__()
# 集合
set.__iter__()
# 檔案
file = open("dir/passwd.txt", "r", encoding="utf-8")
file.__iter__()
3、獲取迭代器
通過序列型別.__iter__(),得到的回傳值就是”迭代器物件“
迭代器是迭代取值的工具,作用是迭代取值
# f ---> 可迭代物件
f = open("dir/passwd.txt", "r", encoding="utf-8")
# f_iter ---> 迭代器物件
f_iter = f.__iter__()
print(f is f_iter)
(1)如何迭代取值
通過可迭代物件.__next__(),每一次執行,都會從迭代器物件中取出一個值
str1 = "靚仔靚女"
str_iter = str1.__iter__()
print(str_iter) # iterator就是迭代器物件
print(str_iter.__next__()) # .__next__()取值
print(str_iter.__next__())
print(str_iter.__next__())
print(str_iter.__next__())
(2)迭代器的優缺點
優點:
1.不依賴于索引取值
2.節省記憶體空間
# 依賴于索引取值
list1 = ['apple', 'cat', 'dog', 'bear', 'banana']
n = 0
while n < len(list1):
print(list1[0])
n += 1
# 不依賴于索引取值
list1 = ['apple', 'cat', 'dog', 'bear', 'banana']
list_iter = list1.__iter__()
# list_iter.__next__()
while True:
# 補充: try:捕獲例外
try:
print(list_iter.__next__()) # 迭代五次報錯
# 報錯之后觸發此處代碼,Exception接受所有例外報錯(不區分錯誤型別)
except Exception:
print("迭代完成")
break
缺點:
1.取值麻煩
2.每次取值都要從第一個值開始,無法通過索引來取值
4、可迭代器物件和迭代器物件(總結)
(1)獲取可迭代物件:定義序列型別(str,list,tuple,dict,set,file)
特點:凡是內置有.__iter__()都是可迭代物件
(2)獲取迭代器物件:通過可迭代物件呼叫.__iter__()得到回傳值
特點:內置有.__next__()
迭代器本質上是一個可迭代物件
檔案本質上既是迭代器物件,也是可迭代物件,(檔案比較特殊:因為檔案從讀出來的時候就是一個迭代器物件)
可迭代器物件不一定是迭代器物件(檔案的可迭代物件一定是迭代器物件)
# 檔案的可迭代物件一定是迭代器物件
# f ---> 可迭代物件
f = open("dir/passwd.txt", "r", encoding="utf-8")
# f_iter ---> 迭代器物件
f_iter = f.__iter__()
print(f is f_iter) # True
# str、tuple、list、dict、set的可迭代物件不是迭代器物件
# str1 ---> 可迭代物件
str1 = "靚仔靚女"
# str_iter ---> 迭代器物件
str_iter = str1.__iter__()
print(str1 is str_iter) # False
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/168456.html
標籤:其他
上一篇:Python之裝飾器2
