为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

MMTTMM 2021-07-28 18:04:41
我有一个可以简化为的函数: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我如何声明函数的初始值,然后让它在下一次迭代中使用自己的输出作为输入。
查看完整描述

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 的这篇精彩演讲。


查看完整回答
反对 回复 2021-08-03
?
开心每一天1111

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)


查看完整回答
反对 回复 2021-08-03
  • 3 回答
  • 0 关注
  • 111 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信