Функция Python iter не работает без значения часового для нормальной функции - PullRequest
0 голосов
/ 24 февраля 2019

Здесь я определил нормальную функцию:

def abc():
  return 1

Теперь, когда я выполняю итерацию с использованием функции iter в методе abc, я получаю следующую ошибку:

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 голосов
/ 24 февраля 2019
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.

Таким образом, вы выбрали вторую форму, что означает, что она будет зацикливаться до тех пор, пока в этом случае не будет возвращен дозорный ''.

0 голосов
/ 24 февраля 2019

iter(spam) ожидает, что spam будет итеративным, что не является функциональным объектом.

iter(spam, sentinel) ожидает, что spam будет вызываемым, что и есть.Так что iter будет вызывать spam до тех пор, пока не вернется значение часового.

...