Python iter()

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

示例

# list of vowels
phones = ['apple', 'samsung', 'oneplus']
phones_iter = iter(phones)

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

# Output:
# apple
# samsung
# oneplus

iter() 语法

iter() 方法的语法是

iter(object, sentinel [optional])

iter() 参数

iter() 方法接受两个参数

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

iter() 返回值

iter() 方法返回

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

示例 1:Python iter()

# list of vowels
vowels = ["a", "e", "i", "o", "u"]

# iter() with a list of vowels 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() method in a class def __iter__(self): self.num = 0
return self
# next() method in a class 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
# raises 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

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

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


示例 3:带哨兵参数的 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


另请阅读

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战