我在Python中反复使用的一个非常常见的句子感觉“太长”,我希望有更多的Pythonic方法来编写它:
a = b if a is None else a
有没有更好的方法来写这个?
答案 0 :(得分:6)
典型的快捷方式是
a = a or b
但是,这只会测试a
评估为False
,0
,False
,None
,''
等。将a
设置为b
答案 1 :(得分:3)
你可以......
if a is None:
a = b
对我来说似乎有点清洁,你不必为自己分配一个变量。
答案 2 :(得分:1)
标准方法是短路:
a = a or b
然而,如果您认为只需要替换它None
,这就很危险。例如,如果您希望保留a
的值False
,则此方法将无法完全按照您的意愿执行。
比原来短的短语,但是相当丑陋的短语是
a = [a, b][a is None]
不推荐使用,可能会给读者带来一些令人费解的想法,但在引入内联if ... else ...
语法
答案 3 :(得分:0)
肯定有:短路。
a = a or b
答案 4 :(得分:-1)
尝试
a = a or b
Python执行短路评估,因此如果a
求值为True(任何非零整数或浮点数,非空列表,非空字符串等),则a
的值返回并且不被评估。但是,如果a == None
,则评估为False
,因此解释程序还必须评估b
。如果b
评估为True
,则会将其作为答案返回。如另一个答案所述,有几个案例需要注意。