Python 使用函数的输出作为函数新迭代的输入

Python 使用函数的输出作为函数新迭代的输入,python,python-3.x,loops,recursion,Python,Python 3.x,Loops,Recursion,我有一个功能,可以简化为: 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 =

我有一个功能,可以简化为:

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
如何声明函数的初始值,然后使其在下一次迭代中使用自己的输出作为输入


感谢您的帮助

您可以将递归函数与
if
语句一起使用:

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
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)

请参阅以了解递归的工作原理。

特定问题的答案

将函数设为生成器,使用生成器表达式进行过滤,然后对其调用
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的精彩演示。

如果您想寻找简单的迭代解决方案,请尝试以下方法

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)

我的错误,我修正了。这个解决方案有很多问题:没有理由使用全局变量或者从一个你不使用的函数返回一些东西。