Python Pythonic 方式来组织/设计 if 语句

标签 python design-patterns if-statement

我正在学习 Python,我想确保以正确的方式组织“if”语句。我经常遇到的情况如下:

if x == 0:
    dostuff_A
    if y == 0:
        dostuff_B            
else:
    dostuff_B

如您所见,我不断重复“dostuff_B”并且不得不不断更改代码两次。我知道我可以有一个函数而不是“dostuff_B”,但我的问题是关于 if 设计。我发现的另一个解决方法是执行以下操作,但随后我复制了 if 语句。

if x == 0:
    dostuff_A
if x != 0 or y == 0:
    dostuff_B

有什么想法吗?提前致谢!

更新:删除了冒号前的空格。还更新了我的解决方法,因为没有意义。原始版本是:

if x == 0:
    dostuff_A
if x == 0 and y == 0:
    dostuff_B

最佳答案

我看到已经发布了一些正确的答案,但他们没有解释他们是如何找到解决方案的。

简化嵌套 if-else 语句的一种方法是使用真值表:

x    y    what you call
-----------------------
0    0    A and B
0    1    A
1    0    B
1    1    B

从上表可以看出,只有当 x == 0 时才调用 A。让我们将其放入代码中:

if x == 0:
    somestuff_A

从同一张表中可以看出,唯一不调用 B 的时间是 x == 0y == 1。 同样,让我们​​将其放入代码中:

if x != 0 or y == 0:
    somestuff_B

或:

if not x == 0 or y == 0:
    somestuff_B

如果你把这两段代码放在一起,你会得到这样的结果:

if x == 0:
    somestuff_A
if not x == 0 or y == 0:
    somestuff_B

关于Python Pythonic 方式来组织/设计 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16177862/

相关文章:

java - if 与条件条件相比的速度

python - 单词排名部分完成

Python - 打印漂亮的 XML 为空标签文本创建开始和结束标签

python - 将数据帧转换为快速文本数据格式

java - 浏览器在页面重新加载时要求重新发送数据

JavaScript:我收到错误 "Uncaught SyntaxError: Unexpected token { "

JavaScript - 打开一个开关,然后关闭

python - wxPython Application.DoEvents() 等效?

c# - 装饰静态类 C#

objective-c - 设计模式 - Objective-C - MVC Model View Controller