可能重复:
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)
还有什么是这样的一般术语?条件分配是我的第一个猜测,但维基百科页面并不是我想到的.
有点冗长,但最简单的是
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)