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

Python使用动态比较说明符比较版本号,python,Python,给定两个版本号和一个比较说明符: 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中的LooseVer

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

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中的
LooseVersion
来比较版本。version
如下:

LooseVersion("1.2.3") >= LooseVersion("2.0.0")
但是,如何使比较本身依赖于传入的
说明符

我可以使用以下解决方案:

def-check_版本(版本1,说明符,版本2):
返回{
“==”:LooseVersion(版本1)=LooseVersion(版本2),
“>=”:LooseVersion(版本1)>=LooseVersion(版本2),
'':LooseVersion(版本1)>LooseVersion(版本2),

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

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
导入运算符作为op
from distutils.version导入松散版本
查找={'':op.gt}
def check_版本(版本1,说明符,版本2):
尝试:
返回查找[说明符](LooseVersion(版本1),LooseVersion(版本2))
除KeyError外:
#未知说明符
返回错误

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

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
导入运算符作为op
从distutils.version导入新版本
查找={'':op.gt}
def check_版本(版本1,说明符,版本2):
尝试:
返回查找[说明符](LooseVersion(版本1),LooseVersion(版本2))
除KeyError外:
#未知说明符
返回错误

为什么不使用semver:@Apero如果比较运算符是动态的,这意味着我不知道检查是否是
哦,我错过了重要的一点,inded为什么不使用semver:@Apero如果比较运算符是动态的,这意味着我不知道检查是否是
哦,我确实错过了重要的一点