我有一个可以简化为的功能:
def do_stuff(a,b,c):
a = a*2
b = b*3
c = c
return a, b, c
给出初始条件:a = 2,b = 3,c = 1
我要迭代该函数,直到a等于64
我正在尝试使用while循环,例如
while True:
new_a, new_b, new_c = do_stuff(a, b, c)
... Here is where I am confused ...
if new_a = 64:
return False
我如何声明函数的初始值,然后使其使用自己的输出作为下一次迭代的输入。
感谢您的帮助!
答案 0 :(得分:2)
回答特定问题
使函数成为生成器,使用生成器表达式进行过滤,然后在其上调用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的this精彩演讲。
答案 1 :(得分:1)
如果您正在寻找简单的迭代解决方案,请尝试此操作。
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)
答案 2 :(得分:0)
def do_stuff(a,b,c):
global new_a
global new_b
global new_c
new_a = a*2
new_b = b*3
new_c = c
print(new_a,new_b,new_c)
return(new_a,new_b,new_c)
new_a = 2
new_b = 3
new_c = 1
while new_a != 64:
do_stuff(new_a,new_b,new_c)
if new_a == 64:
break
答案 3 :(得分:0)
您可以对if
语句使用递归函数:
def do_stuff(a, b, c):
if a == 64:
return a, b, c
return do_stuff(a*2, b*3, c)
a, b, c = do_stuff(2, 3, 1)
print((a, b, c))
(64, 729, 1)
请参阅Basics of recursion in Python,以了解递归的工作原理。