赋值语句中的短路是否被认为是好的风格?

时间:2013-07-22 18:38:39

标签: python

如果我理解正确

myvar = a and b or c

给出与

相同的结果
if a:
  if b:
    myvar = b
  else:
    myvar = c
else:
  myvar = c

所以我觉得它更优雅。

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

2 个答案:

答案 0 :(得分:13)

大多数情况下,您希望使用conditional expression代替:

myvar = b if a else c

短路是非常Pythonic,但要注意b假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)

答案 1 :(得分:3)

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

您可能需要使用new-ish条件表达式语法:

myvar = b if a else c