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