python - 'reset' 字典中剩余的元素有一个值(没有样板化),这可能吗?
问题描述
所以我有以下代码(工作)来计算版本号
#bump version
version = {
'Major:': old_version[0],
'Minor:': old_version[1],
'Patch:': old_version[2],
}
version[levelstr] = str(int(version[levelstr]) + 1)
new_version_str = version['Major:'] + "." + version['Minor:'] + "." + version['Patch:']
只有我忘记了,例如,如果主要版本增加,次要版本和补丁应该被归零(如果是次要版本,补丁应该被归零)。到目前为止避免使用 if 进行样板化,我宁愿避免使用如下代码(因为这是非常嘈杂和笨拙的方式 - 但会工作):
if levelstr=='Major:':
version['Minor:'] = '0';
version['Patch:'] = '0';
所以基本上有一些聪明的方法来做这样的事情:为这个元素右边的元素设置一个值?或者,我可以将字符串转换为索引,然后使用序列代替..?
解决方案
听起来你想要一个类,Version
其中 setter mutate或版本类型实例变量,具体取决于 setter。Major
Minor
Patch
或者,你可以看看我在这个网站上发布过的最糟糕的答案:
def increment_version(old_version, key):
noop = lambda x: x
incr = lambda x: x+1
reset = lambda x: 0
keys = ("Major", "Minor", "Patch")
operations = (noop, noop, incr, reset, reset)
yield from map(str, (operations[2 - keys.index(key) + offset](int(char)) for offset, char in enumerate(old_version)))
old_version = "321"
new_version = ".".join(increment_version(old_version, "Major"))
print(new_version)
推荐阅读
- c# - 设置小窗体宽度产生意外结果
- python-3.x - 自定义类中的属性未按预期更新
- azure - 要存储在 Azure 存储中的控制台应用程序日志
- android-fragments - 在 Kotlin 的片段内将位图转换为 URI
- python - Should I use a dictionary for membership testing?
- typescript - 根据打字稿中的字符串文字缩小类型?
- python - 显示打印 jupyter notebook 中的所有行和列
- android - 在 XAMARIN APP 中增加/减少 SplashScreen 时间
- google-apps-script - 从 Google 搜索导入 XML Google 电子表格
- c# - 在 Autofac 中注册一个开放的泛型类型