=",-6ren">
gpt4 book ai didi

Python 使用动态比较说明符比较版本号

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

给定两个版本号和一个比较说明符:

def check_versions(ver1, specifier, ver2):
# TODO

check_versions("1.2.3", ">=", "2.0.0") # Should return True
check_versions("1.2.3", "==", "2.0.0") # Should return False

我想对两个版本进行比较,以便从上面获得预期的输出。

我发现我可以使用 distutils.version 中的 LooseVersion 比较版本,如下所示:

LooseVersion("1.2.3") >= LooseVersion("2.0.0")

但是我怎样才能使比较本身取决于传入的 specifier

我可以使用 here 中的解决方案:

def check_versions(ver1, specifier, ver2):
return {
'==': LooseVersion(ver1) == LooseVersion(ver2),
'>=': LooseVersion(ver1) >= LooseVersion(ver2),
'<=': LooseVersion(ver1) <= LooseVersion(ver2),
'>': LooseVersion(ver1) > LooseVersion(ver2),
'<': LooseVersion(ver1) < LooseVersion(ver2),
}.get(x, False)

但这对我来说真的很笨拙。有没有更优雅的解决方案?

最佳答案

无需创建包含版本所有可能比较的字典,您只需为使用的运算符创建查找,例如:

import operator as op
from distutils.version import LooseVersion

lookup = {'<': op.lt, '<=': op.le, '==': op.eq, '>=': op.ge, '>': op.gt}

def check_versions(ver1, specifier, ver2):
try:
return lookup[specifier](LooseVersion(ver1), LooseVersion(ver2))
except KeyError:
# unknown specifier
return False

关于Python 使用动态比较说明符比较版本号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36851916/

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