与"或"分配在python中

时间:2012-01-05 18:27:52

标签: python coding-style variable-assignment

为这样的变量赋值是否被认为是错误的风格?

x = "foobar" or None
y = some_variable or None

在上面的例子中,x得到值'foobar'。

4 个答案:

答案 0 :(得分:20)

不,这是一种常见做法。对于比你长得多的表达式,它只被认为是糟糕的风格。

答案 1 :(得分:15)

执行此类操作的主要危险是(在第二种情况下)some_variable为False但不是None(例如,整数0)并且您不希望在这种情况下,最终y等于无。

答案 2 :(得分:4)

使用这种表达方式我也感到有点不自在。在学习Python 4ed中,它被称为“有点不寻常的行为”。 后来Mark Lutz说:

  

...事实证明,它是Python中一种相当常见的编码范式:to   从固定大小的集合中选择一个非空对象,只需字符串   他们在一起或表达。在更简单的形式,这也是   通常用于指定默认值...

实际上,它们会生成简洁的单行表达式,有助于消除代码中的线路噪声 此行为是if / else三元运算符形式的基础:

A = Y if X else Z

答案 3 :(得分:2)

OP 的语法非常好。
“用或赋值”的官方名称是空合并,现在实际上有一个关于它的维基百科页面! https://en.wikipedia.org/wiki/Null_coalescing_operator
这个问题也可能有用: Is there a Python equivalent of the C# null-coalescing operator?