当前位置: 首页 > article >正文

python iter函数介绍

1. 功能

iter() 函数用于返回一个对象的迭代器。迭代器是遵循迭代协议的对象,能够逐一访问序列中的元素而无需暴露底层实现。

2. 语法

iter(object[, sentinel])
  • object:必须是一个可迭代对象(如列表、元组、字符串、字典、集合)或者实现了 __iter__() 方法。
  • sentinel(可选):一个标记值,仅在对象是一个可调用对象时使用。

3. 用法

a. 可迭代对象创建迭代器

如果 object 是一个可迭代对象,iter() 会返回该对象的迭代器。

lst = [1, 2, 3, 4]
it = iter(lst)

print(next(it))  # 输出: 1
print(next(it))  # 输出: 2
print(next(it))  # 输出: 3
print(next(it))  # 输出: 4
# 再次调用 next(it) 会抛出 StopIteration 异常
b. 可调用对象与哨兵值

如果 object 是一个可调用对象,且提供了 sentinel 参数,则 iter() 会持续调用该对象,直到返回值等于哨兵值为止。

def counter():
    i = 0
    while True:
        i += 1
        yield i

c = counter()
it = iter(c, 5)  # 当返回值等于 5 时停止迭代

for num in it:
    print(num)  # 输出: 1, 2, 3, 4

4. 与自定义类配合使用

一个对象要支持 iter(),必须实现以下两种方法之一:

  1. __iter__() 方法:返回自身迭代器。
  2. __getitem__() 方法:支持从索引 0 开始的序列访问。
实现 __iter__() 的自定义类
class MyRange:
    def __init__(self, start, end):
        self.current = start
        self.end = end

    def __iter__(self):
        return self

    def __next__(self):
        if self.current >= self.end:
            raise StopIteration
        value = self.current
        self.current += 1
        return value

# 使用 iter
my_range = MyRange(1, 5)
it = iter(my_range)

for num in it:
    print(num)  # 输出: 1, 2, 3, 4

5. 主要特点

  • 惰性计算:迭代器按需生成元素,适合处理大量数据。
  • 无状态保存:迭代器不会存储所有元素,仅维护当前位置。
  • 不可逆:迭代器只能向前遍历,不能回退。

6. 常见应用

  • 用于循环遍历:for 循环隐式调用 iter()
  • 自定义数据结构:实现 __iter__(),支持迭代功能。
  • 无限序列:与哨兵值配合实现动态生成数据。

iter() 是 Python 中迭代协议的核心,结合 for 循环、生成器和自定义类广泛应用于各种场景。


http://www.kler.cn/a/518441.html

相关文章:

  • Frida使用指南(三)- Frida-Native-Hook
  • 原生HTML集合
  • Spring Security(maven项目) 3.0.2.7版本
  • ray.rllib 入门实践-3: 配置参数列表
  • 深圳云盟智慧科技公司智慧停车管理系统GetVideo存在SQL注入漏洞
  • Java 中如何使用 SSL 连接 IoTDB
  • 蓝桥动态规划(dp)题目讲解
  • 【漫话机器学习系列】059.特征选择策略(Feature Selection Strategies)
  • ESP32S3基于espidf lvgl驱动i2c ssd1306/sh1106/7屏幕使用
  • Elastic Cloud Serverless 获得主要合规认证
  • 设计模式概述 - 设计模式的重要性
  • Linux lsblk 命令详解
  • 金融级分布式数据库如何优化?PawSQL发布OceanBase专项调优指南
  • 高级 SQL 优化:让查询飞起来
  • 1.24 共享内存和信号灯集
  • SSM框架探秘:Spring 整合 SpringMVC 框架
  • 神经网络基础 | 给定条件下推导对应的卷积层参数
  • 图神经网络系列论文阅读DAY1:《Predicting Tweet Engagement with Graph Neural Networks》
  • tomcat的accept-count、max-connections、max-threads三个参数的含义
  • 【openwrt】openwrt odhcpd IPv6 prefix_filter选项说明