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
。但它是一个清晰的代码,而且是无状态的。
我想要一个函数来处理预定义管道中的数据,我需要中间和最后一步的数据,所以我想要一个可以调用两次的函数,在第一次调用中,函数 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
。但它是一个清晰的代码,而且是无状态的。