5

如果我理解正确

myvar = a and b or c

给出相同的结果

if a:
  if b:
    myvar = b
  else:
    myvar = c
else:
  myvar = c

所以我想它更优雅。

我似乎记得在 JavaScript 代码中看到过这种短路赋值语句。但是在 Python 中,在赋值语句中使用短路是否被认为是好的风格?

4

2 回答 2

13

大多数时候,您希望使用条件表达式来代替:

myvar = b if a else c

然而,短路是非常 Pythonic 的,请注意bfalse-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)
于 2013-07-22T18:40:03.293 回答
3

这确实是一个意见问题,但在大多数情况下,答案是否定的。它违反了多个样式指南,可能是因为人们倾向于认为它的意思是“如果 a 为真,则使用 b 的值,否则使用 c 的值”而不是真正的含义,这就是您发布的内容。

您可能想要新的条件表达式语法:

myvar = b if a else c
于 2013-07-22T18:40:56.727 回答