Во-первых, проблема с вашим существующим кодом заключается в том, что после того, как вы return
, функция закончена. Итак, вы просто возвращаете первое значение и все готово.
Функция не может вернуть цикл, потому что цикл не является своего рода значением.
Функция может возвращать итерируемый , который является значением, которое может быть зациклено. Есть несколько способов сделать это:
Вы можете использовать yield
, как и в большинстве других ответов, чтобы сделать вашу функцию функцией генератора, поэтому она возвращает итератор для всех вещей, которые вы yield
.
Но yield
внутри цикла это просто неуклюжий способ сделать yield from
, так что на самом деле, вы должны просто сделать это:
def looping():
a = [25, 50, 75, 100, 200, 300]
yield from a
for x in looping():
print(x)
Вместо этого вы можете вернуть итератор напрямую:
def looping():
a = [25, 50, 75, 100, 200, 300]
return iter(a)
for x in looping():
print(x)
Или, проще всего: последовательность, такая как список, так же итеративна, как итератор. Итак, если у вас есть список, просто верните его:
def looping():
a = [25, 50, 75, 100, 200, 300]
return a
for x in looping():
print(x)
Пока мы на этом, вам даже не нужен явный цикл там. Вы можете вызвать функцию, которая скрывает цикл внутри, например join
:
print('\n'.join(looping()))
Или вы можете даже разделить итерацию прямо на print
:
print(*looping(), sep='\n')
Хотя в этом случае я думаю, что цикл вполне разумен, поэтому, если вы довольны им, придерживайтесь его.