Python 更好的书写方式:如果A不是其他A,则A=b

Python 更好的书写方式:如果A不是其他A,则A=b,python,Python,我在Python中反复使用的一个非常常见的句子感觉“太长了”,我希望有一种更具Python风格的方式来编写它: a = b if a is None else a 有更好的方法写这个吗?典型的快捷方式是 a = a or b 不过,这只会在a的计算结果为False时进行测试,因此0、False、None、'等都会导致a设置为b,您可以这样做 if a is None: a = b 对我来说,这似乎有点干净,你不必给它自己分配一个变量。当然有:短路 a = a or b 试一试

我在Python中反复使用的一个非常常见的句子感觉“太长了”,我希望有一种更具Python风格的方式来编写它:

a = b if a is None else a

有更好的方法写这个吗?

典型的快捷方式是

a = a or b
不过,这只会在
a
的计算结果为
False
时进行测试,因此
0
False
None
'
等都会导致
a
设置为
b
,您可以这样做

if a is None: 
     a = b

对我来说,这似乎有点干净,你不必给它自己分配一个变量。

当然有:短路

a = a or b
试一试


Python执行短路求值,因此如果
a
求值为True(任何非零整数或浮点、非空列表、非空dict等),则
a
的值返回,而be不求值。但是,如果
a==None
,则其计算结果为
False
,因此口译员还必须计算
b
。如果
b
的计算结果为
True
,则它将作为答案返回。如另一个答案所述,有两种情况需要注意。

标准方法是短路:

a = a or b
但是,如果你认为需要替换的只有<>代码> NO/<代码>,这是危险的。例如,如果您希望保留
a
的值,如
False
,则此方法将无法完全按照您的期望执行

一个比你原来的短语短但相当难看的短语是

a = [a, b][a is None]

这是不推荐的,可能会让读者产生一些想法,但在引入内联
if。。。否则…
syntax

None
测试通常使用
is
而不是相等。您可以告诉每个人为什么尝试这样做可以解决问题,而不是告诉每个人填充。那么你就不必告诉每个人关于填充的事情了。我闻到一种
语法错误的味道。我认为这是一种非常危险的做法,正是因为你所说的原因,即python中有许多值的计算结果为
False
。如果a不是其他a,我更愿意阅读
b,而不是
a或b
,我想知道这是否真的是为了用b替换0和空字符串,或者这是一个bug,或者是有人以某种方式确定a永远不会是零或空字符串。@fgp,在正确的场景中使用它很重要。在某些情况下,这个表达式比简单地测试
None
更清楚、更好地表达了程序员的实际意图。在许多情况下,只有真实的ish值才是有效的。在这种情况下,不要只测试
None
。不管用户传入的是空字符串还是
None
,我仍然不想要这些值。
a = [a, b][a is None]