Coding style 这个成语是蟒蛇的吗?(someBool和“真实结果”或“虚假结果”)

Coding style 这个成语是蟒蛇的吗?(someBool和“真实结果”或“虚假结果”),coding-style,python,Coding Style,Python,我刚刚在一些开源Python中遇到了这个成语,我喝得噎死了 而不是: if isUp: return "Up" else: return "Down" 甚至: return "Up" if isUp else "Down" 代码如下: return isUp and "Up" or "Down" 我可以看出这是相同的结果,但这是Python中的典型习惯用法吗?如果是这样的话,是不是有一些性能问题运行得很快?还是只需要一次代码检查就可以了?对于我的口味来说,代码是一个非常复杂

我刚刚在一些开源Python中遇到了这个成语,我喝得噎死了

而不是:

if isUp:
    return "Up"
else:
    return "Down"
甚至:

return "Up" if isUp else "Down"
代码如下:

return isUp and "Up" or "Down"

我可以看出这是相同的结果,但这是Python中的典型习惯用法吗?如果是这样的话,是不是有一些性能问题运行得很快?还是只需要一次代码检查就可以了?

对于我的口味来说,代码是一个非常复杂和聪明的东西,但我想它本身并没有什么问题。我认为这真的只是一个“让一切都合在一行”综合征的例子

但我个人会选择第一种形式。

不,不是

前几天我不知怎的得了一场车祸

如果构造

val if cond else alt
不太受欢迎(至少受到SO社区的欢迎),首选方案是:

if cond:
    val
else:
    alt
你可以得出自己的结论。:)

在编写和实现之前,“a和b或c”是用Python表示三元算术的标准方式。这个成语不符合“b”的答案本身就是假的;为了支持一般情况,您可以编写

 return (a and [b] or [c])[0]
另一种拼写方法是

 return (b,c)[not a]
通过引入bool类型,可以将其改写为

 return (c,b)[bool(a)]
(如果不清楚:如果不知道a是bool,则必须转换为bool和not运算符)


今天,如果事物必须是表达式,则应使用条件表达式语法;否则我建议使用if语句。

Yikes。根本不可读。对我来说,pythonic意味着易于阅读

return isUp and "Up" or "Down"

听起来像是用perl做的事情。

您应该阅读Mark Pilgrim的《深入Python》(第4.6.1节)。事实证明,and/or技巧有一些您应该注意的主要缺陷。

替代语法与and/or方法或三元运算符确实有一个区别-始终对这两个值进行求值。如果它们只是变量,那没什么大不了的,但是如果其中有函数调用(特别是有副作用的),这将产生不同。