python: 如何return 函数中计算不同位置的两个值?

python: how to return two values at different position of calculating in a function?

我想要一个函数来处理预定义管道中的数据,我需要中间和最后一步的数据,所以我想要一个可以调用两次的函数,在第一次调用中,函数 returns 是中间数据,在第二次调用中,函数从最后一个 return 位置开始,returns 是最终数据,所以像这样:

def tworeturns(x):
    intermediate = do-something(x)
    return intermediate
    final = do-something(intermediate)
    return final

如何用 python 实现这个?

============================================= =============================

感谢 new-dev-123 的回答,我能够 return 两个值,但后来又遇到了另一个问题。在第一次 yield 之后,我更改了中间体,当我第二次调用 next 时,我希望函数基于修改后的中间体而不是原始中间体进行计算。有办法吗?

Return 两个值(这会给你一个元组):

def tworeturns(x):
    intermediate = do-something(x)
    final = do-something(intermediate)
    return intermediate, final

像协程一样使用生成器可以让你有效地暂停函数,你可以使用 next()

来驱动它
>>> def tworeturns(x):
...     print(f"hi {x}")
...     yield
...     print(f"bye {x}")
...     yield
... 
>>> corou = tworeturns("bob")
>>> next(corou)
hi bob
>>> next(corou)
bye bob

这是我在 cli 上做的一个快速演示

所以对于你的例子,你会做这样的事情:

def tworeturns(x):
    intermediate = do-something(x)
    yield intermediate
    final = do-something(intermediate)
    yield final

corou = tworeturns(x)
first_value = next(corou)
second_value = next(corou)

好的,这是一个很好的问题,我有时也会遇到类似的情况。

正如对您问题的评论之一所说,您可以使用生成器,它可以直接回答您的问题。

但我更喜欢以下解决方案:

def tworeturns(x, intermediate=None):
    if intermediate is None:
        return do_something(x)
    else:
        return do_something(intermediate)

当然,您现在需要用中间结果调用 tworeturns。但它是一个清晰的代码,而且是无状态的。