python - 用 DRY 解决方案替换多个条件

标签 python design-patterns conditional-statements dry

我有 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/

相关文章:

python - 在 Linux 中获取 Windows 路径的基本名称

python - 使用 plac 时出现属性错误 : 'Namespace' object has no attribute

c# - 如何制作接受模块/加载项的 "Dashboard"实用程序

c# - 为什么我需要单例设计模式?

c++ - 循环中的条件评估?

MySQL WHERE 与 IF 条件

python - 如何从 QLineEdit() 获取 int?

python - 在 Google Colab 中编辑 README.md 文件

c# - 异常处理的良好实践设计模式

javascript - 如何将这个条件逻辑转换为三元表达式?