如果我理解正确
myvar = a and b or c
给出相同的结果
if a:
if b:
myvar = b
else:
myvar = c
else:
myvar = c
所以我想它更优雅。
我似乎记得在 JavaScript 代码中看到过这种短路赋值语句。但是在 Python 中,在赋值语句中使用短路是否被认为是好的风格?
如果我理解正确
myvar = a and b or c
给出相同的结果
if a:
if b:
myvar = b
else:
myvar = c
else:
myvar = c
所以我想它更优雅。
我似乎记得在 JavaScript 代码中看到过这种短路赋值语句。但是在 Python 中,在赋值语句中使用短路是否被认为是好的风格?
大多数时候,您希望使用条件表达式来代替:
myvar = b if a else c
然而,短路是非常 Pythonic 的,请注意b
false-y 的陷阱;在这种情况下,使用短路会导致不同的结果。大多数时候,您不想分配c
。
即使在这种情况下,您仍然可以通过调整条件获得相同的结果:
myvar = b if a and b else c
短路非常适合默认设置:
foo = somevar or 'bar'
或确保满足先决条件:
foo = somevar and function_raises_exception_if_passed_empty_value(somevar)
这确实是一个意见问题,但在大多数情况下,答案是否定的。它违反了多个样式指南,可能是因为人们倾向于认为它的意思是“如果 a 为真,则使用 b 的值,否则使用 c 的值”而不是真正的含义,这就是您发布的内容。
您可能想要新的条件表达式语法:
myvar = b if a else c