gpt4 book ai didi

python - 简化语句 '.' .join( string.split ('.' )[0 :3] )

转载 作者:行者123 更新时间:2023-11-28 22:46:36 27 4
gpt4 key购买 nike

习惯用C/C++写代码,看到下面的数组操作,感觉有些CPU浪费:

version = '1.2.3.4.5-RC4'                 # the end can vary a lot
api = '.'.join( version.split('.')[0:3] ) # extract '1.2.3'

因此我想知道:

  • 这一行是否会被执行(解释)为创建一个临时数组(内存分配),然后连接前三个单元格(再次内存分配)?
    或者 python 解释器是否足够聪明?
    (我也很好奇 PythranParakeetNumbaCython 和其他 Python 解释器/编译器在这种情况下所做的优化...)

    /li>
  • 是否有技巧可以编写更 CPU 效率且仍然易于理解/优雅的替换行?
    (您可以提供特定的 Python2 和/或 Python3 技巧和技巧)

最佳答案

为此,我不知道 CPU 使用情况,但这不是我们以某种方式使用高级语言的原因吗?

另一个解决方案是使用正则表达式,使用编译模式应该允许后台优化:

import re
version = '1.2.3.4.5-RC4'
pat = re.compile('^(\d+\.\d+\.\d+)')
res = re.match(version)
if res:
print res.group(1)

编辑:按照@jonrsharpe 的建议,我也运行了timeit 基准测试。这是我的结果:

def extract_vers(str):
res = pat.match(str)
if res:
return res.group(1)
else:
return False

>>> timeit.timeit("api1(s)", setup="from __main__ import extract_vers,api1,api2; s='1.2.3.4.5-RC4'")
1.9013631343841553
>>> timeit.timeit("api2(s)", setup="from __main__ import extract_vers,api1,api2; s='1.2.3.4.5-RC4'")
1.3482811450958252
>>> timeit.timeit("extract_vers(s)", setup="from __main__ import extract_vers,api1,api2; s='1.2.3.4.5-RC4'")
1.174590826034546

编辑:但无论如何,Python 中存在一些库,例如 distutils.version 来完成这项工作。你应该看看那个 answer .

关于python - 简化语句 '.' .join( string.split ('.' )[0 :3] ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27247553/

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