Ответ на конкретный вопрос
Сделайте вашу функцию генератором, примените фильтр к выражению генератора и вызовите next
.
>>> def do_stuff(a,b,c):
...: while True:
...: a = a*2
...: b = b*3
...: c = c
...: yield a, b, c
...:
>>> next((a, b, c) for a, b, c in do_stuff(2, 3, 1) if a == 64)
>>> (64, 729, 1)
Ответ на более общий вопрос в названии для будущих читателей
Как использовать вывод функции в качестве ввода новой итерации другой функции?
Рассмотрим сопрограмму! Вот очень простой пример.
>>> def computation(x):
...: return x%2
>>>
>>> def consumer():
...: while True:
...: got = yield
...: print('consumer got value {}'.format(got))
...: # do something awesome with got
...:
>>>
>>> cons = consumer()
>>> next(cons) # prime coroutine
>>>
>>> for i in range(3):
...: cons.send(computation(i))
consumer got value 0
consumer got value 1
consumer got value 0
Если вы хотите узнать больше о сопрограммах, взгляните на эту отличную презентацию Дэвида Бизли.