没有普通功能的哨兵值,Python iter函数将无法工作

时间:2019-02-24 18:34:00

标签: python iterator generator

在这里我定义了一个普通函数:

def abc():
  return 1

现在,当我在abc方法上使用iter函数进行迭代时,出现以下错误。

for i in iter(abc):
  print i

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'function' object is not iterable

但是现在当我使用哨兵时,它可以正常工作。

 for i in iter(abc, ''):
  print i

1
1
1
1
1
1
...

知道为什么发生上述行为吗?

2 个答案:

答案 0 :(得分:3)

iter(spam)期望spam是可迭代的,而函数对象则不是。

iter(spam, sentinel)期望spam是可调用的。因此iter将调用spam直到返回前哨值。

答案 1 :(得分:3)

Docstring:
iter(iterable) -> iterator
iter(callable, sentinel) -> iterator

Get an iterator from an object.  In the first form, the argument must
supply its own iterator, or be a sequence.
In the second form, the callable is called until it returns the sentinel.

因此,您选择了第二种形式,这意味着它将永远循环直到在这种情况下返回标记''