我有 A: bool 值; B: bool 值;
A=0, B=0: run func1 and func2
A=0, B=1: run func1 and func3
A=1, B=0: run func2
A=1, B=1: run func3
每个函数都有不同的签名和不同数量的参数。
现在我做了这样的事情:
if not A and not B: run func1 and func2
if not A and B: run func1 and func2
if A and not B: run func1 and func2
if A and B: run func1 and func2
但是我不是为每个 if 语句重复相同的代码块,而是调用函数,我知道这是多余的,我如何将这个巨大的 if 语句 block 替换为几行代码,仅在必要时调用正确的方法一次?
我认为我可以使用这样的映射字典:
mapping_dict = {
True: {
True: [func3],
False: [func2]
},
False: {
True: [func1, func3],
False: [func1, func2]
}
但即便如此,我需要一个解决方案来根据返回的函数来确定传递函数的参数
mapping_dict[A][B]
我的可能是一个特殊情况,但我想知道如何通过“Don't R重复Y<”来解决此类问题/strong>我们自己”的解决方案,这个问题有什么模式吗?它是如何工作的?它与语言无关吗?
感谢您的耐心等待
最佳答案
您的条件过于复杂:
func1()
仅依赖于a
。
func2()
和func3()
上b
。
所以你需要两个独立的条件:
if not a:
func1()
if b:
func3()
else:
func2()
这是等效的,因为 func2()
& func3()
真实性独立于 a
...如果您重新排列对这些函数进行分组的事实陈述,就更容易看出这一点:
A=0, B=0: run func1 and func2
A=1, B=0: run func2
A=0, B=1: run func1 and func3
A=1, B=1: run func3
如果b
为零,func2()
正在运行。如果b
是 1,func3()
正在运行。在这两种情况下a
可以是 1 或 0。
关于python - 用 DRY 解决方案替换多个条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52338983/