Вы не можете сделать это с range()
. Аргументы range()
просто оцениваются один раз, когда запускается l oop, а не каждый раз через l oop, и он эффективно вычисляет весь список значений в начале (фактически он использует объект итератора внутри, но это не меняет это). Последовательность не может быть изменена в течение l oop.
. Сделайте это с while
l oop, который пересчитывает i
.
i = 1
while i < 11:
print(i)
i = fun(i)
Если вы действительно Если вы хотите использовать for
, вы можете определить функцию генератора, которая возвращает вашу последовательность значений.
def multrange(init, end, step):
i = init
while i < end:
yield i
i = i * step
for i in multrange(1, 11, 2):
print(i)
Вы даже можете определить генератор, который использует функцию для генерации следующего шага в качестве аргумента.
def generic_range(init, end, stepper):
i = init
while i < end:
yield i
i = stepper(i)
for i in generic_range(1, 11, fun):
print(i)