我对使用__iter__()
和__next__()
之类的方法感到有些困惑(我想它们被称为dunders)。
我试图理解迭代器和可迭代对象,并编写了以下代码:
x = (1, 2, 3, 4, 5, 6)
try:
y = x.__iter__()
while 1:
print(y.__next__())
except StopIteration:
print('Iterator has exhausted')
然后,当我将__iter__
和__next__
用作函数时,代码可以正确执行:
x = (1, 2, 3, 4, 5, 6)
try:
y = iter(x)
while 1:
print(next(y))
except StopIteration:
print('Iterator has exhausted')
有人可以告诉我如何将它们既用作方法又用作函数?并适用于所有邓雷吗?
答案 0 :(得分:0)
__iter__
方法。iter
函数(或者,在大多数情况下,您不需要太多控制,只需在for循环中使用它即可)。这不仅适用于此特定对,还适用于其他dunder方法和相关功能,例如len()
和__len__()
。
在后台,iter
函数仅调用传递给它的对象的__iter__
方法。您可能会问:为什么要拥有一个iter
函数,而您却可以自己调用__iter__
方法呢? (也许那是您真正想知道的。)我有两个原因可以想到:
iter
就是这样的一个例子:就像docs所说的那样,它不仅适用于具有__iter__
方法的类型,而且适用于满足容器协议的类型(即__len__
和__getitem__
方法)。