Python风格:if语句与布尔评估

时间:2010-06-10 05:05:32

标签: python coding-style if-statement

Python的设计理念之一是“应该有一个......明显的方法来实现它”。 (PEP 20),但这并非总是如此。我特别指的是(简单)if语句与布尔评估。请考虑以下事项:

if words:
    self.words = words
else:
    self.words = {}

self.words = words or {}

有这样一个简单的情况,从风格上讲,这是更可取的吗?对于更复杂的情况,可以选择if语句以获得可读性,对吗?

3 个答案:

答案 0 :(得分:9)

只有一个”才能完美无缺;这是积极的断言“那里只有一个”不能 - “应该”意味着一个目标,一个目标,而不是总是达到它的可能性(例如,对于数字ab,禁止使用b + aa + b会非常荒谬,以至于在这种情况下不能明智地“只有一种方式”。)

在你的例子中,我同意or在足够简单的情况下是可取的(在一条清晰可读的行中可以做的四行是浪费垂直空间)但不是谓词任何重大的复杂性。当然,决定具有“重大复杂性”的是一种判断力。

答案 1 :(得分:2)

在这种情况下,我会说“明确比隐含更好”。

当有人读取您的代码时,他们可以做出一些假设。 他们可以假设“单词”可以是空的dict,也可以是带有数据的单词(缺少大小写时为None) 在这种情况下,他们可能会试图优化您的代码。 他们甚至可能是正确的,如果没有在任何地方说明你可以获得无价值。

如果“单词”实际上可以是“无”,我会尝试通过以下方式明确说明:

self.words = words
if words is None:
    self.words = {}

或者可能是“其他”,而不是先无条件分配。 在任何情况下,通过这种方式,您可以记录“无”是“单词”的预期值这一事实。

答案 2 :(得分:0)

(编者)
在下面这样的情况下,我投票给条件表达式

def somesuch(self, words=None):
    self.words = words or {}
    ...

当然,如果你认为那会提高可读性(你可以用这种方式大声朗读吗?),你可以试试

self.words = words if words else {}