Python iter() 函数
iter() 是 Python 中用于将可迭代对象转换为迭代器的内置函数。
迭代器是 Python 中非常重要的概念,iter() 可以从任何可迭代对象创建迭代器,允许使用 next() 函数逐个访问元素。
单词释义: iter 是 iterator(迭代器)的缩写。
基本语法与参数
语法格式
iter(object) iter(object, sentinel)
参数说明
- 参数 object:
- 类型: 可迭代对象
- 描述: 要转换为迭代器的对象。
- 参数 sentinel(可选):
- 类型: 任意值
- 描述: 哨兵值,当迭代到该值时停止迭代。
函数说明
- 返回值: 返回一个迭代器对象。
- 特点: 迭代器只能向前遍历,不能后退。
实例
示例 1:基础用法
实例
# 从列表创建迭代器
my_list = [1, 2, 3]
iterator = iter(my_list)
# 使用 next() 获取元素
print(next(iterator)) # 输出: 1
print(next(iterator)) # 输出: 2
print(next(iterator)) # 输出: 3
# 再调用会抛出 StopIteration
# print(next(iterator))
# 也可以用 for 循环遍历
my_list = [1, 2, 3]
for item in iter(my_list):
print(item, end=" ")
# 输出: 1 2 3
my_list = [1, 2, 3]
iterator = iter(my_list)
# 使用 next() 获取元素
print(next(iterator)) # 输出: 1
print(next(iterator)) # 输出: 2
print(next(iterator)) # 输出: 3
# 再调用会抛出 StopIteration
# print(next(iterator))
# 也可以用 for 循环遍历
my_list = [1, 2, 3]
for item in iter(my_list):
print(item, end=" ")
# 输出: 1 2 3
运行结果预期:
1 2 3 1 2 3
代码解析:
iter()将可迭代对象转换为迭代器。- 迭代器只能遍历一次,耗尽后需要重新创建。
示例 2:从字符串和元组创建
实例
# 字符串迭代器
s = "hello"
iterator = iter(s)
print(next(iterator)) # 输出: h
print(next(iterator)) # 输出: e
print(next(iterator)) # 输出: l
# 元组迭代器
t = (1, 2, 3)
iterator = iter(t)
print(next(iterator)) # 输出: 1
print(next(iterator)) # 输出: 2
s = "hello"
iterator = iter(s)
print(next(iterator)) # 输出: h
print(next(iterator)) # 输出: e
print(next(iterator)) # 输出: l
# 元组迭代器
t = (1, 2, 3)
iterator = iter(t)
print(next(iterator)) # 输出: 1
print(next(iterator)) # 输出: 2
运行结果预期:
h e l 1 2
代码解析:
- 字符串迭代器每次返回一个字符。
- 元组迭代器每次返回一个元素。
示例 3:使用 sentinel 参数
实例
# 使用 sentinel 创建自定义迭代器
def fibonacci():
n = 0
while True:
yield n
n += 1
if n > 10:
raise StopIteration
# 使用 sentinel(当读到某个值时停止)
class ReadUntil:
def __init__(self, data, stop_at):
self.data = data
self.stop_at = stop_at
self.index = 0
def __iter__(self):
return self
def __next__(self):
if self.index >= len(self.data):
raise StopIteration
value = self.data[self.index]
if value == self.stop_at:
raise StopIteration
self.index += 1
return value
# 创建迭代器,遇到 "END" 时停止
data = ["a", "b", "c", "END", "d"]
iterator = iter(lambda: ReadUntil(data, "END"), None)
for item in iterator:
print(item, end=" ")
# 输出: a b c
def fibonacci():
n = 0
while True:
yield n
n += 1
if n > 10:
raise StopIteration
# 使用 sentinel(当读到某个值时停止)
class ReadUntil:
def __init__(self, data, stop_at):
self.data = data
self.stop_at = stop_at
self.index = 0
def __iter__(self):
return self
def __next__(self):
if self.index >= len(self.data):
raise StopIteration
value = self.data[self.index]
if value == self.stop_at:
raise StopIteration
self.index += 1
return value
# 创建迭代器,遇到 "END" 时停止
data = ["a", "b", "c", "END", "d"]
iterator = iter(lambda: ReadUntil(data, "END"), None)
for item in iterator:
print(item, end=" ")
# 输出: a b c
运行结果预期:
a b c
sentinel 参数用于创建自定义迭代行为,通常与 callable 一起使用。
Python3 内置函数
点我分享笔记