python:如何在函数计算的不同位置返回两个值?

2024-06-26 14:22:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我想要一个处理预定义管道中数据的函数,我需要中间和最后一步的数据,所以我想要一个可以调用两次的函数,在第一次调用中,函数返回中间数据,在第二次调用中,函数从最后一个返回位置开始并返回最终数据,比如说:

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

如何用python实现这一点?你知道吗

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

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


Tags: 数据函数devnewreturn管道defdo
3条回答

使用协同程序这样的生成器可以有效地暂停函数,并可以使用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 = do-something(x)
    final = do-something(intermediate)
    return intermediate, final

好吧,这是个好问题,我有时也会遇到类似的情况。你知道吗

正如对你的问题的一个评论所说的,你可以使用一个生成器,它从字面上回答你的问题。你知道吗

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

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

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

相关问题 更多 >