gpt4 book ai didi

python - Python 可以避免在语句中重新计算吗?

转载 作者:太空宇宙 更新时间:2023-11-04 07:43:00 24 4
gpt4 key购买 nike

我在 Python 中有以下语句,其中 ori 是一个字符串

[ori[ori.rfind(' ') + 1:], ori[:ori.rfind(' ')]]

我们可以看到 ori.rfind(' ') 被调用了两次,解释器是否足够聪明,只对函数求值一次?

我们可以做以下事情:

    s = ori.rfind(' ')    return [ori[s+1:], ori[:s]]

但这使用了两行。我打算在字符串列表的列表理解中使用此语句,并希望此函数是一行。

在这种情况下,解释器实际上更容易理解,因为字符串是不可变的。我的猜测是,也许口译员可以聪明地避免重新评估。一般来说,如果对象是不可变的,解释器是否足够聪明?

最佳答案

我认为您不能指望解释器只对函数求值一次,但是这里有一个等效于您当前代码的替代方法,它更短且效率与两行方法相似:

ori.rsplit(' ', 1)[::-1]

示例和时序对比:

In [1]: ori = 'foo bar baz'

In [2]: [ori[ori.rfind(' ') + 1:], ori[:ori.rfind(' ')]]
Out[2]: ['baz', 'foo bar']

In [3]: ori.rsplit(' ', 1)[::-1]
Out[3]: ['baz', 'foo bar']

In [4]: %timeit [ori[ori.rfind(' ') + 1:], ori[:ori.rfind(' ')]]
1000000 loops, best of 3: 732 ns per loop

In [5]: %timeit ori.rsplit(' ', 1)[::-1]
1000000 loops, best of 3: 514 ns per loop

In [6]: %timeit s = ori.rfind(' '); [ori[s+1:], ori[:s]]
1000000 loops, best of 3: 490 ns per loop

关于python - Python 可以避免在语句中重新计算吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15438586/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com