在这里我定义了一个普通函数:
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
...
知道为什么发生上述行为吗?
答案 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.
因此,您选择了第二种形式,这意味着它将永远循环直到在这种情况下返回标记''
。