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

时间:2018-10-29 19:38:51

标签: 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 = 64:
       return False

我如何声明函数的初始值,然后使其使用自己的输出作为下一次迭代的输入。

感谢您的帮助!

4 个答案:

答案 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,以了解递归的工作原理。