# x = 10 # while True: # print(x) # # list1 = [1, 2, 3, 4] # 1, 2, 3, 4 # n = 0 # while n < len(list1): # print(list1[n]) # n += 1
迭代的工具。python
迭代:
迭代指的是重複迭代,每一次迭代都是基於上一次的結果而來的。工具
迭代器指的是迭代取值的工具,它能夠迭代取值。spa
若是想要知道python中迭代器是什麼?必須先知道什麼是可迭代對象?code
str._iter_()
方法的都是可迭代對象。str1 = 'hello tank!' str1.__iter__() list1 = [1, 2, 3] # list([1, 2, 3]) list1.__iter__() set.__iter__() dict.__iter__() tuple.__iter__() open('a.txt').__iter__()
經過可迭代對象._iter_()
, 獲得的返回值就是 「迭代器對象」。
迭代器是迭代取值的工具,做用是迭代取值。對象
str1 = '靚仔靚女' iter_str1 = str1.__iter__() print(iter_str1) # iterator指的是迭代器對象 # iter_str1 ---> python13期都是靚仔,靚女!
迭代器對象_next_()
# 「每一次執行」,都會從迭代器對象中取出一個值索引
str1 = '靚仔靚女' iter_str1 = str1.__iter__() print(iter_str1) # iterator指的是迭代器對象 # iter_str1 ---> python13期都是靚仔,靚女!# print(iter_str1.__next__()) print(iter_str1.__next__()) print(iter_str1.__next__()) print(iter_str1.__next__()) # 由於迭代器中的值已經取完了 print(iter_str1.__next__()) # 報錯,StopIteration
當咱們的值取完以後會報錯,須要使用捕獲異常來解決內存
# list1是一個可迭代對象 ist1 = ['tank', 'jason雞哥', 'sean', '餅哥'] # 獲取迭代器對象: iter_list1 iter_list1 = list1.__iter__() while True: # 補充: try: 捕獲異常 try: print(iter_list1.__next__()) # 報錯 # 當即觸發此處代碼 StopIteration except StopIteration: break
_iter_()
._iter_()
獲得返回值_next_()
語法: for i in 可迭代對象: in: 可迭代對象 ----> 內部會自動調用.__iter__() ---> 迭代器對象 for line in list1: # 迭代器對象.__next__()
set1 = '1, 2, 3, 4' # iter_set1: 迭代器對象 iter_set1 = set1.__iter__() iter_set1.__next__() # 肯定: 迭代器對象也是一個可迭代對象 # 判斷可迭代對象是不是迭代器對象 # print(iter_set1.__iter__() is iter_set1) # True # 惟獨文件比較特殊: 由於文件從讀取出來的時候就是一個迭代器對象 # f ---> 可迭代對象, 仍是迭代器對象 # f = open('user.txt', 'r', encoding='utf-8') # # 肯定: 文件既是可迭代對象,也是迭代器對象。 # # iter_f ---> 迭代器對象 # iter_f = f.__iter__() # print(iter_f is f) # True # 可迭代對象 list1 = [1, 2, 3, 4] # iter_list1 ---> 迭代器對象 iter_list1 = list1.__iter__() print(iter_list1 is list1) # False # 可迭代對象不必定是迭代器對象