2016-03-04 14 views

ответ

3

Поскольку foo включает yield заявления, это генератор, так что результат от возвращения всегда объект генератора даже если фактическое заявление о выходе не может быть достигнуто. Генератор является истинным в логическом смысле, следовательно, ваш результат.

0

Если вы

print foo() 
print bar() 

вы получите

<generator object foo at 0x7f8a79fd5eb0> 
None 
0

В ваших функциях foo и bar, оба они достигают пустую return заявления. Они неявно return None. foo, тем не менее, сгенерирует итератор, поскольку он содержит оператор yield.

Поэтому, поскольку вы зацикливаете на выходе функций, foo будет использовать значения итератора, а bar не будет, в результате получится TypeError.

0

Выход 1, 2 имеет значение. Foo возвращается:

<generator object foo at 0x7f9e01a91d70> 

бар возвращает:

None 

Если вы хотите прокомментировать часть урожая код будет врезаться на Foo() тоже.

Вы должны вернуть два значения для каждого из методов его решения.

0

Если функция не включает выхода заявления, и вы хотите его вернуть «пустой итератор», вы должны написать

def empty() 
    raise StopIteration 

for each in empty(): 
    print('this will never show up') 
Смежные вопросы