Python相当于Perl/Ruby || =

Ben*_*eys 5 ruby python perl

可能重复:
Python条件赋值运算符

对这样一个简单的问题道歉,但谷歌搜索||=不是很有帮助;)

Python ||=中是否存在与Ruby和Perl中的语句相同的语句?

例如:

foo = "hey"
foo ||= "what"    # assign foo if it's undefined
# foo is still "hey"

bar ||= "yeah"
# bar is "yeah"
Run Code Online (Sandbox Code Playgroud)

还有什么是这样的一般术语?条件分配是我的第一个猜测,但维基百科页面并不是我想到的.

Mat*_*ngo 6

有点冗长,但最简单的是

foo = "hey"
foo = foo or "what"
#foo is still "hey"

bar = None
bar = bar or "yeah"
#bar is "yeah"
Run Code Online (Sandbox Code Playgroud)

您也可以使用三元运算符

bar = None
bar = bar if bar else "yeah"
Run Code Online (Sandbox Code Playgroud)

但是,如果我理解你,||=分配以前未定义的变量,没有投诉?我不知道.

要在本地范围内做到这一点,这个丑小鸭可以工作

bar = locals()['bar'] if 'bar' in locals() else 'yeah'
Run Code Online (Sandbox Code Playgroud)

编辑:

刚看到副本,它也有很多解决方案:)对于那些懒得看的人,他们还包括一个更好的变体在我的最后一个

foo = foo if 'foo' in locals() else 'hey'
Run Code Online (Sandbox Code Playgroud)

但是这对于未定义的变量不起作用,只会替换虚假值而未定义会引发一个NameError.下一个,OTOH,只适用于undefined,并始终保持相同的预先存在的假值,正如@Borodin所说的那样//=在Perl中

foo = locals().get('foo','hey')
Run Code Online (Sandbox Code Playgroud)

当然,有人使用了例外:(

try:
   v
except NameError:
   v = 'bla bla'
Run Code Online (Sandbox Code Playgroud)