我想实现一个函数 f
,它返回两个值 x
和 y
给定输入 w
.此函数首先使用 w
计算 x
的值,然后使用 x
的计算值计算 y
。但是,由于 y
的计算成本很高,我希望函数仅在需要函数结果时才计算其值。
也就是说,下面对 f
的调用将不会执行计算 y
的函数部分 ...
x, _ = f(w)
...下面的调用将执行它...
x, y = f(w)
是否可以这样定义函数?当然,一个直接的替代方法是将一个额外的 bool 变量传递给 f
来确定是否要计算 y
但我想知道是否还有其他方法可以做这个。谢谢!
最佳答案
这是生成器的完美案例,您可以使用它延迟执行直到您需要它。
def defer_huge_operation(w):
...
yield x
...
...
...
yield y
op = defer_huge_operation(w)
x = next(op)
...
...
y = next(op)
当你执行 next(op)
时,它将产生 x
的值,控制权将返回到主程序,当你执行 next 时(op)
再次,执行将从您停止的地方恢复,并且将执行巨大的操作给您 y
。
注意:一旦您完全使用生成器,对生成器的进一步next
调用将引发StopIteration
异常。即使你想再次做同样的操作,你也需要像这样创建一个新的生成器对象
op = defer_huge_operation(w)
如果你想获得生成器产生的所有值,只需使用 list
或 tuple
函数对其进行迭代,就像这样
returned_values_list = list(defer_huge_operation(w))
关于Python:如何根据返回值调整函数的一部分的执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24933466/