跳到主要内容

Python iter() 函数

iter() 方法返回给定参数的迭代器。

示例

# 手机列表
phones = ['apple', 'samsung', 'oneplus']
phones_iter = iter(phones)

print(next(phones_iter))
print(next(phones_iter))
print(next(phones_iter))

# 输出:
# apple
# samsung
# oneplus

iter() 语法

iter() 方法的语法是:

iter(object, sentinel [可选])

iter() 参数

iter() 方法接受两个参数:

  • object - 可以是列表、集合、元组等。
  • sentinel [可选] - 用于表示序列结束的特殊值

iter() 返回值

iter() 方法返回:

  • 给定参数的迭代器对象,直到找到哨兵字符为止
  • 对于不实现 __iter__()__next__()__getitem__()__ 的用户自定义对象,会返回 TypeError

示例 1:Python iter()

# 元音字母列表
vowels = ["a", "e", "i", "o", "u"]

# 使用元音字母列表的 iter()
vowels_iter = iter(vowels)

print(next(vowels_iter))
print(next(vowels_iter))
print(next(vowels_iter))
print(next(vowels_iter))
print(next(vowels_iter))

输出

a
e
i
o
u

在上面的示例中,我们使用了元音字母列表的 iter() 方法。

该方法返回列表中的单个元素 aeiou 作为迭代器对象。

示例 2:自定义对象的 iter()

class PrintNumber:
def __init__(self, max):
self.max = max

# 类中的 iter() 方法
def __iter__(self):
self.num = 0
return self
# 类中的 next() 方法
def __next__(self):
if(self.num >= self.max):
raise StopIteration
self.num += 1
return self.num

print_num = PrintNumber(3)

print_num_iter = iter(print_num)
print(next(print_num_iter)) # 1
print(next(print_num_iter)) # 2
print(next(print_num_iter)) # 3

# 引发 StopIteration
print(next(print_num_iter))

输出

1
2
3
Traceback (most recent call last):
File "", line 23, in
File "", line 11, in __next__
StopIteration

在上面的示例中,我们使用 __iter__()__next__() 方法打印了迭代器数字 123

这里,__next()__ 方法有一个循环,一直运行到 self.num 大于或等于 self.max 时停止。

由于我们向 PrintNumber() 对象传递了 3 作为参数,self.max 初始化为 3。因此,循环在 3 处停止。

self.num 达到 self.max 的值 3 时,next() 方法引发了一个 StopIteration 异常。

示例 3:带有 Sentinel 参数的 iter()

class DoubleIt:

def __init__(self):
self.start = 1

def __iter__(self):
return self

def __next__(self):
self.start *= 2
return self.start

__call__ = __next__

my_iter = iter(DoubleIt(), 16)

for x in my_iter:
print(x)

输出

2
4
8

在上面的示例中,我们没有实现 StopIteration 条件。

相反,我们使用了带有哨兵参数的 iter() 方法来停止迭代:

my_iter = iter(DoubleIt(), 16)

这里哨兵参数的值是 16,所以当 __next__() 方法的值等于这个数字时,程序将自动引发 StopIteration

此时,程序会自动引发 StopIteration

推荐阅读: