Python的设计理念之一是“应该有一个......明显的方法来实现它”。 (PEP 20),但这并非总是如此。我特别指的是(简单)if语句与布尔评估。请考虑以下事项:
if words:
self.words = words
else:
self.words = {}
与
self.words = words or {}
有这样一个简单的情况,从风格上讲,这是更可取的吗?对于更复杂的情况,可以选择if语句以获得可读性,对吗?
答案 0 :(得分:9)
“应只有一个”才能完美无缺;这是积极的断言“那里仅只有一个”不能 - “应该”意味着一个目标,一个目标,而不是总是达到它的可能性(例如,对于数字a
和b
,禁止使用b + a
或a + 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 {}