3 回答
TA贡献1825条经验 获得超4个赞
回答具体问题
使您的函数成为生成器,使用生成器表达式过滤并调用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
如果您想了解有关协程的更多信息,请查看David Beazley 的这篇精彩演讲。
TA贡献1836条经验 获得超13个赞
如果你正在寻找一个简单的迭代解决方案,试试这个。
def do_stuff(a,b,c):
a = a*2
b = b*3
c = c
return a,b,c
a,b,c = (2,3,1)
while a != 64:
a,b,c = do_stuff(a,b,c)
添加回答
举报