中给出的示例之一PEP572 https://www.python.org/dev/peps/pep-0572/ is
# Reuse a value that's expensive to compute
[y := f(x), y**2, y**3]
目前在 python 中,您必须执行以下操作之一:
# option 1
y = f(x)
[y, y**2, y**3]
or
# option 2
[f(x), f(x)**2, f(x)**3]
该示例暗示此处的选项 2 可以改进,但我从未见过比第一个选项更推荐的选项。选项 2(以及海象操作员)是否有比选项 1 更好的理由?
只是为了弄清楚:
[y := f(x), y**2, y**3]
相当于:
y = f(x)
[y, y**2, y**3]
(f(x)
仅被调用一次)
但一般来说,不是这样的:
[f(x), f(x)**2, f(x)**3]
(f(x)
被调用了 3 次)
因为潜力f()
副作用(或者潜在的不必要的计算负担,如果f()
is a pure功能)。
所以,一般来说,替换[f(x), f(x)**2, f(x)**3]
with [y := f(x), y**2, y**3]
应仔细检查。
例如:
def f(x):
print('Brooks was here.')
return 2 * x
x = 1
y = f(x)
l1 = [y, y**2, y**3]
prints Brooks was here.
一次,同时:
l2 = [f(x), f(x)**2, f(x)**3]
将打印Brooks was here.
三次。
当然,l1 == l2
.
因此,为了更直接地回答您的问题,您可能需要使用:
[f(x), f(x)**2, f(x)**3]
而不是这个
y = f(x)
[y, y**2, y**3]
当您对副作用(无论是什么)特别感兴趣时。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)