Предположим, у меня есть функция, которая производит значение, скажем:
import random
def f():
return random.randint(1,10)
В другом месте моей программы я хочу перебрать последовательность значений, созданных этой функцией:
def g(n):
while True:
if n == k:
return
else:
print("x")
return
Использование оператора while True
кажется не элегантным, и я бы предпочел использовать генератор, например, следующий:
def f2():
while True:
yield random.randint(1,10)
def g(n):
for k in f2():
if n == k:
return
else:
print("x")
Однако это просто толкает проблему while True
в определение f()
. Есть ли встроенная функция, которая принимает функцию и возвращает генератор, например, следующий псевдокод:
def make_generator_from_function(f):
def gen_f():
while True:
yield f()
return gen_f
def g3(n):
for k in make_generator_from_function(f):
if n == k:
return
else:
print("x")