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端

如果访问 浏览器右侧出现 安装 或 点击这个 也可以完成安装桌面 会出现 如下图标