猿问

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

我有一个可以简化为的函数:


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

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


MMTTMM
浏览 113回答 3
3回答

凤凰求蛊

回答具体问题使您的函数成为生成器,使用生成器表达式过滤并调用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 0consumer got value 1consumer got value 0如果您想了解有关协程的更多信息,请查看David Beazley 的这篇精彩演讲。

开心每一天1111

如果你正在寻找一个简单的迭代解决方案,试试这个。def do_stuff(a,b,c):    a = a*2    b = b*3    c = c    return a,b,ca,b,c = (2,3,1)while a != 64:    a,b,c = do_stuff(a,b,c)
随时随地看视频慕课网APP

相关分类

Python
我要回答