迭代器

TOC

引用

# 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

1、迭代器

迭代的工具。python

迭代:
迭代指的是重複迭代,每一次迭代都是基於上一次的結果而來的。工具

迭代器的定義

迭代器指的是迭代取值的工具,它能夠迭代取值。spa

可迭代對象

若是想要知道python中迭代器是什麼?必須先知道什麼是可迭代對象?code

  • 可迭代對象: 全部的序列類型: str, list, tuple, dict, set, f
    凡是內部有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

總結: 可迭代對象 VS 迭代器對象:

  • 獲取可迭代對象: 定義序列類型(str, list, set, tuple, dict, f)
    • 特色:
      內置有_iter_()
  • 獲取迭代器對象: 經過可迭代對象調用._iter_()獲得返回值
    • 特色:
      內置有_next_()

迭代器對象的優勢:

  • 優勢:
    1.不依賴於索引迭代取值。
    2.節省內存空間。
  • 缺點:
    1.取指定某個值麻煩
    2.每次取值都要從第一個值開始,沒法經過索引取值。

for循環原理

語法:     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
# 可迭代對象不必定是迭代器對象
相關文章
相關標籤/搜索