首頁 > 後端開發 > Python教學 > 解釋 Python 中的 Iterable 與 Iterator

解釋 Python 中的 Iterable 與 Iterator

Susan Sarandon
發布: 2025-01-01 07:42:18
原創
769 人瀏覽過

Explaining Iterable vs Iterator in Python

此頁面的目的是示範 2 個迭代協定的動態:

  1. 可迭代
  2. 迭代器

1. 但首先(加入令人困惑的相似單字),讓我們解決迭代問題

  • 迭代 - 當然 - 是從來源中逐項獲取項目並依次對每個項目執行某些操作
  • 在Python中,這常用在
    • a) for/while 迴圈和
    • b) 理解
  • 預設 - 這些結構迭代整個結構
  • 然而,有時可能需要更細粒度的控制 - 就像在生成器
  • 為此,有 2 個重要的概念/協議,Python 的大部分都是在它們之上構建的:
  • a) 可迭代物件
  • b) 迭代器物件
  • 兩者都反映在標準Python協定中
  • 這不是額外的東西:實際上,for/while 循環和推導式直接構建在迭代協議的這些較低級別元素上

2. ITER() 方法從可迭代物件建立迭代器

  • 可迭代物件(物件的集合或流)是任何可以傳遞到內建 iter() 函數的物件
  • 一旦傳遞了內建的 iter() 函數,它就會傳回一個傳遞類型的 迭代器物件,也就是建立一個字串迭代器
>>> example_iterator = iter('abc')
>>> example_iterator
<str_iterator object at 0x063DCE38>
登入後複製
登入後複製
  • 請注意,迭代器是一個隱式序列對象,提供順序(不是隨機!)對底層順序資料集的存取
  • 例如範圍物件本身不是迭代器
  • 迭代器不允許存取底層序列的任意元素
  • 它們僅提供對系列下一個元素的存取
  • 它們提供順序存取
<!-- THIS IS NOT AN ITERATOR -->
>>> r = range(10)[5]
>>> r
5
登入後複製
登入後複製

3. NEXT() 函數從迭代器傳回下一個值

  • 內建的 next() 需要一個 迭代器 物件 - 它傳回集合迭代中的下一個值
  • 迭代器由 2 個組件組成:
  • 擷取集合的下一個元素的機制
  • 表示系列結束的機制

在具有內建物件系統的程式語言中,這種抽象通常對應於可以由類別實現的特定介面

  • next() 允許依要求依序考慮每個項目 - 而不是從開始到結束的整個系列
  • 有2個訊息迭代器介麵包括
    • 下一個 → 查詢下一個元素
    • iter → 回傳迭代器
  • 限制:迭代器只能迭代一次

4. 課堂範例 - 從可迭代到迭代器再到停止迭代異常

  • Python 會隨意引發 StopIteration 類型的 異常
>>> example_iterator = iter('abc')
>>> example_iterator
<str_iterator object at 0x063DCE38>
登入後複製
登入後複製

5. 實際範例 - 對多個命令列輸入進行單元測試

  1. 定義/取得可迭代對象,例如列表 ["20.01", "y"]
  2. 將可迭代物件傳遞給 iter() → 建立迭代器物件
  3. 將迭代器物件傳遞到 next() 中,以便每次在程式碼中呼叫輸入函數時產生列表的下一個值
<!-- THIS IS NOT AN ITERATOR -->
>>> r = range(10)[5]
>>> r
5
登入後複製
登入後複製
  • 第一次遇到input()時,傳遞的是「20.01」值,
  • 第二次是“y”
  • 第三次就例外了

6. 連結

  • https://mypy.readthedocs.io/en/stable/protocols.html#iteration-protocols
  • 5.2 隱式序列 - Python 中的 SICP

以上是解釋 Python 中的 Iterable 與 Iterator的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板