如果我理解正确
myvar = a and b or c
给出与
相同的结果if a:
if b:
myvar = b
else:
myvar = c
else:
myvar = c
所以我觉得它更优雅。
我似乎记得在JavaScript代码中看到过这种短路赋值语句。但是在Python中使用短路语在赋值语句中被认为是好的风格吗?
答案 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