python 可迭代對象相關知識點

1. 什么是可迭代對象 (Iterable)

在 Python 里,可迭代對象指的是:
👉 能夠一次返回一個元素的對象,可以被 for 循環遍歷。

常見的可迭代對象有:

  • 序列類型listtuplestr
  • 集合類型setdict(遍歷的是 key)
  • 文件對象:逐行讀取
  • 生成器迭代器

判斷一個對象是否可迭代:

from collections.abc import Iterableprint(isinstance([1,2,3], Iterable))  # True
print(isinstance(123, Iterable))      # False

2. 可迭代對象和迭代器的區別

很多初學者會混淆 IterableIterator

  • Iterable(可迭代對象):能返回迭代器的對象,例如 listdictstr
  • Iterator(迭代器):是一個對象,表示一個數據流,可以用 next() 不斷取值。
from collections.abc import Iteratorlst = [1, 2, 3]print(isinstance(lst, Iterator))      # False (只是可迭代,還不是迭代器)
it = iter(lst)                        # 用 iter() 轉換為迭代器
print(isinstance(it, Iterator))       # True
print(next(it))  # 1
print(next(it))  # 2

總結:

  • Iterable 可以通過 iter() 得到 Iterator
  • Iterator 可以通過 next() 逐個取值,直到 StopIteration

3. 為什么需要可迭代對象?

原因:

  • Python 內部很多語法(如 for ... in ...、列表推導式、解包)都依賴 迭代協議
  • 節省內存,比如生成器(generator)不會一次性生成所有數據,而是按需計算。

例如:

nums = [i for i in range(5)]   # 列表推導式(消耗內存存儲所有元素)
gen = (i for i in range(5))    # 生成器(惰性計算)

4. for 循環背后的原理

當你寫:

for x in [1, 2, 3]:print(x)

Python 背后做的事情是:

it = iter([1, 2, 3])  # 先獲取迭代器
while True:try:x = next(it)print(x)except StopIteration:break

5. 自定義可迭代對象

你也可以讓自己的類變成可迭代的,只要實現 __iter__() 方法,并返回一個迭代器。

示例:

class MyRange:def __init__(self, n):self.n = ndef __iter__(self):  # 返回一個迭代器return MyRangeIterator(self.n)class MyRangeIterator:def __init__(self, n):self.current = 0self.n = ndef __iter__(self):  # 迭代器也要有 __iter__()return selfdef __next__(self):  # 定義迭代規則if self.current < self.n:val = self.currentself.current += 1return valelse:raise StopIterationfor i in MyRange(5):print(i)

輸出:

0
1
2
3
4

6. 總結

  • 可迭代對象:能返回迭代器(listtupledictsetstr、文件等)。
  • 迭代器:可以 next() 取值,直到取盡(惰性計算,節省內存)。
  • for ... in ... 背后其實就是 iter() + next()
  • 你可以自定義可迭代對象,掌握迭代協議能讓你寫出更 Pythonic 的代碼。

擴展:

在這里插入圖片描述
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/93832.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/93832.shtml
英文地址,請注明出處:http://en.pswp.cn/web/93832.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ijkplayer Android 編譯

一、下載編譯庫文件1.1 編譯庫文件環境&#xff1a;ubuntu 20.04 版本liangtao:ffmpeg$lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.6 LTS Release: 20.04 Codename: focal1.2 項目源碼下載使用 git 下載 ijkplayer&#…

snn前向推理時間計算(處理器實現)

公式 Tinf(1?sparsity)number of synapsesnumber of sub-processorsSIMD ways T_{\text{inf}} \frac{(1-\text{sparsity})\times \text{number of synapses}} {\text{number of sub-processors}\times \text{SIMD ways}} Tinf?number of sub-processorsSIMD ways(1?sparsity…

Linux------《操作系統全景速覽:Windows·macOS·Linux·Unix 對比及 Linux 發行版實戰指南》

&#xff08;一&#xff09;常見操作系統&#xff08;system&#xff09;電腦&#xff1a;Windows,Macos,Linux,UnixWindows&#xff1a;微軟公司開發的一款桌面操作系統&#xff08;閉源系統&#xff09;。版本有dos&#xff0c;win98&#xff0c;win NT&#xff0c;win XP , …

Three.js 初級教程大全

本文檔旨在為初學者提供一個全面的 Three.js 入門指南。我們將從 Three.js 的基本概念開始&#xff0c;逐步介紹如何創建場景、添加物體、設置材質、使用光照和相機&#xff0c;以及如何實現簡單的動畫和交互。通過本教程&#xff0c;你將能夠掌握 Three.js 的核心知識&#xf…

遙感領域解決方案丨高光譜、無人機多光譜、空天地數據識別與計算

一&#xff1a;AI智慧高光譜遙感實戰&#xff1a;手撕99個案例項目、全覆蓋技術鏈與應用場景一站式提升方案在遙感技術飛速發展的今天&#xff0c;高光譜數據以其獨特的光譜分辨率成為環境監測、精準農業、地質勘探等領域的核心數據源。然而&#xff0c;海量的波段數據、復雜的…

(LeetCode 面試經典 150 題) 114. 二叉樹展開為鏈表 (深度優先搜索dfs+鏈表)

題目&#xff1a;114. 二叉樹展開為鏈表 思路&#xff1a;深度優先搜索dfs鏈表&#xff0c;時間復雜度0(n)。 C版本&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : …

《線程狀態轉換深度解析:從阻塞到就緒的底層原理》

目錄 一、線程的五種基本狀態 二、線程從 RUNNABLE 進入阻塞 / 等待狀態的三種典型場景 1. 調用sleep(long millis)&#xff1a;進入 TIMED_WAITING 狀態 2. 調用wait()&#xff1a;進入 WAITING/TIMED_WAITING 狀態 3. 等待 I/O 資源或獲取鎖失敗&#xff1a;進入 BLOCKE…

面經整理-猿輔導-內容服務后端-java實習

部門管理系統設計 題目要求 設計部門 MySQL 數據表實現接口&#xff1a;根據中間部門 ID 獲取其下屬葉子部門 ID設計包含子節點列表的 Java 數據對象&#xff0c;并實現批量獲取功能 一、MySQL 部門表設計 表結構 CREATE TABLE department (id BIGINT PRIMARY KEY AUTO_INCREME…

Openharmony之window_manager子系統源碼、需求定制詳解

1. 模塊概述 Window Manager 模塊是 OpenHarmony 操作系統的核心窗口管理系統,負責窗口的創建、銷毀、布局、焦點管理、動畫效果以及與硬件顯示的交互。該模塊采用客戶端-服務端架構,提供完整的窗口生命周期管理和用戶界面交互支持。 1.1架構總覽 Window Manager Client 應…

《CDN加速的安全隱患與解決辦法:如何構建更安全的網絡加速體系》

CDN&#xff08;內容分發網絡&#xff09;作為提升網站訪問速度的關鍵技術&#xff0c;被廣泛應用于各類互聯網服務中。然而&#xff0c;在享受加速優勢的同時&#xff0c;CDN也面臨諸多安全隱患。本文將解析常見的CDN安全問題&#xff0c;并提供實用的解決辦法&#xff0c;幫助…

【Linux指南】GCC/G++編譯器:庖丁解牛——從源碼到可執行文件的奇幻之旅

不只是簡單的 gcc hello.c 每一位Linux C/C++開發者敲下的第一行編譯命令,幾乎都是 gcc hello.c -o hello 或 g++ hello.cpp -o hello。這像一句神奇的咒語,將人類可讀的源代碼變成了機器可執行的二進制文件。但在這條簡單的命令背后,隱藏著一個如同精密鐘表般復雜的多步流…

地區電影市場分析:用Python爬蟲抓取貓眼_燈塔專業版各地區票房

在當今高度數據驅動的影視行業&#xff0c;精準把握地區票房表現是制片方、宣發團隊和影院經理做出關鍵決策的基礎。一部電影在北上廣深的表現與二三線城市有何差異&#xff1f;哪種類型的電影在特定區域更受歡迎&#xff1f;回答這些問題&#xff0c;不能再依賴“拍腦袋”和經…

Spark03-RDD02-常用的Action算子

一、常用的Action算子 1-1、countByKey算子 作用&#xff1a;統計key出現的次數&#xff0c;一般適用于K-V型的RDD。 【注意】&#xff1a; 1、collect()是RDD的算子&#xff0c;此時的Action算子&#xff0c;沒有生成新的RDD&#xff0c;所以&#xff0c;沒有collect()&…

[Android] 顯示的內容被導航欄這擋住

上圖中彈出的對話框的按鈕“Cancel/Save”被導航欄遮擋了部分顯示&#xff0c;影響了使用。Root cause: Android 應用的主題是 Theme.AppCompat.Light1. 修改 AndroidManifest.xml 將 application 標簽的 android:theme 屬性指向新的自定義主題&#xff1a;<applicationandr…

分貝單位全指南:從 dB 到 dBm、dBc

引言在射頻、音頻和通信工程中&#xff0c;我們經常會在示波器、頻譜儀或測試報告里看到各種各樣的dB單位&#xff0c;比如 dBm、dBc、dBV、dBFS 等。它們看起來都帶個 dB&#xff0c;實則各有不同的定義和參考基準&#xff1a;有的表示相對功率&#xff0c;有的表示電壓電平&a…

怎么確定mysql 鏈接成功了呢?

asyncio.run(test_connection()) ? Connection failed: cryptography package is required for sha256_password or caching_sha2_password auth methods 根據你提供的錯誤信息,問題出現在 MySQL 的認證插件和加密連接配置上。以下是幾種解決方法: 1. 安裝 cryptography 包…

(5)軟件包管理器 yum | Vim 編輯器 | Vim 文本批量化操作 | 配置 Vim

Ⅰ . Linux 軟件包管理器 yum01 安裝軟件在 Linux 下安裝軟件并不像 Windows 下那么方便&#xff0c;最通常的方式是去下載程序的源代碼并進行編譯&#xff0c;從而得到可執行程序。正是因為太麻煩&#xff0c;所以有些人就把一些常用的軟件提前編譯好并做成軟件包&#xff0c;…

VGG改進(3):基于Cross Attention的VGG16增強方案

第一部分&#xff1a;交叉注意力機制解析1.1 注意力機制基礎注意力機制的核心思想是模擬人類的選擇性注意力——在處理信息時&#xff0c;對重要部分分配更多"注意力"。在神經網絡中&#xff0c;這意味著模型可以學習動態地加權輸入的不同部分。傳統的自注意力(Self-…

代理ip平臺哪家好?專業代理IP服務商測評排行推薦

隨著互聯網的深度發展&#xff0c;通過網絡來獲取全球化的信息資源&#xff0c;已成為企業與機構在競爭中保持優勢的一大舉措。但想要獲取其他地區的信息&#xff0c;可能需要我們通過代理IP來實現。代理IP平臺哪家好&#xff1f;下文就讓我們從IP池資源與技術優勢等細節&#…

PWA》》以京東為例安裝到PC端

如果訪問 瀏覽器右側出現 安裝 或 點擊這個 也可以完成安裝桌面 會出現 如下圖標