我刚刚在一些开源Python中遇到过这个习惯用法,我对我的饮料感到窒息。
而不是:
if isUp:
return "Up"
else:
return "Down"
甚至:
return "Up" if isUp else "Down"
代码读取:
return isUp and "Up" or "Down"
我可以看到这是相同的结果,但这是Python中的典型成语吗?如果是这样,它是否会快速运行?或者它只是一次性需要代码审查?
答案 0 :(得分:17)
“a和b或c”成语是在Python编写和实现PEP 308之前表达三元算术的规范方法。这个成语失败,“b”答案本身就是假的;为了支持一般情况,你可以写
return (a and [b] or [c])[0]
另一种拼写方法是
return (b,c)[not a]
,随着bool类型的引入,可以改写为
return (c,b)[bool(a)]
(如果不清楚:如果不知道bool已转换为bool和not运算符是必要的话)
今天,如果事物必须是表达式,则应该使用条件表达式语法;否则我建议使用if语句。
答案 1 :(得分:9)
你应该阅读Mark Pilgrim的 Dive Into Python 的Using the and-or trick(第4.6.1节)。事实证明,和/或技巧有你应该注意的主要陷阱。
答案 2 :(得分:0)
对于我的口味来说,这段代码是一个很难看的东西,但我认为它本身没有任何问题。我认为这只是一个“让一切都适合一线”的案例。
我个人会选择第一张表格。
答案 3 :(得分:-1)
不,不是。
前几天我有点similar question。
如果构造
val if cond else alt
不是非常受欢迎(至少是SO社区),首选的是:
if cond:
val
else:
alt
你可以得出自己的结论。 :)
答案 4 :(得分:-1)
让人惊讶。根本不可读。对我来说,pythonic意味着易于阅读。
return isUp and "Up" or "Down"
听起来你会在perl中做些什么。