在作业中提供回退价值的最Pythonic方法是什么?

max*_*ori 19 python

在Perl中,能够分配对象通常很好,但如果从中分配的变量是'undef',则指定一些回退值.例如:

my $x = undef;
my $y = 2;
my $a = $x || $y;
Run Code Online (Sandbox Code Playgroud)

在这之后,

$a == 2
Run Code Online (Sandbox Code Playgroud)

有没有一种简洁的方法可以在Python中实现这一点,如果值x是None,或者是全开...

if x is not None
    a = x
else
    a = y
Run Code Online (Sandbox Code Playgroud)

...成为实现这一目标的最恐怖的方式?

编辑:道歉,正如几位评论者所指出的那样,我并没有真正谈论价值未定义,而是Perl中的'undef',这实际上并不是一回事.但最初措辞的问题并没有说清楚.

var*_*tec 36

从2.5开始:

如果你想回到无:

a = x if x is not None else y 
Run Code Online (Sandbox Code Playgroud)

如果你想回落空字符串false,0等:

a = x if x else y 
Run Code Online (Sandbox Code Playgroud)

要么

a = x or y 
Run Code Online (Sandbox Code Playgroud)

至于undefined(从未定义,也称为未绑定):

try:
  a = x 
except NameError:
  a = y
Run Code Online (Sandbox Code Playgroud)

或更多的hackish(我不是真的建议,但它很短):

a = vars().get('x',y)
Run Code Online (Sandbox Code Playgroud)


Sil*_*ost 5

首先,你可以用三元组完成全部工作:

a = y if x is None else x
Run Code Online (Sandbox Code Playgroud)

但它并没有解决你的问题.您想要做的是更紧密地实施:

try:
    a = x
except:
    a = y
Run Code Online (Sandbox Code Playgroud)