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()
方法接受两个参数
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()
方法。
该方法将列表中的单个元素 a、e、i、o、u 作为迭代器对象返回。
示例 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__()
方法打印了迭代器数字 1、2、3。
这里,__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
。
另请阅读