当前位置:  开发笔记 > 编程语言 > 正文

这个成语是pythonic吗?(someBool和"True Result"或"False Result")

如何解决《这个成语是pythonic吗?(someBool和"TrueResult"或"FalseResult")》经验,为你挑选了2个好方法。

我刚刚在一些开源Python中遇到过这个成语,我对我的饮料感到窒息.

而不是:

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

甚至:

return "Up" if isUp else "Down"

代码阅读:

return isUp and "Up" or "Down"

我可以看到这是相同的结果,但这是Python中的典型成语吗?如果是这样,它是否会快速运行?或者它只是一次性需要代码审查?



1> Martin v. Lö..:

如果在Python中,在编写和实现PEP 308之前,"a和b或c"成语是表达三元算术的规范方式.这个成语失败,"b"答案本身就是假的; 为了支持一般情况,你可以写

 return (a and [b] or [c])[0]

另一种拼写方式是

 return (b,c)[not a]

随着bool类型的引入,可以改写为

 return (c,b)[bool(a)]

(如果不清楚:如果不知道bool已转换为bool和not运算符是必要的)

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


替代语法与和/或方法或三元运算符有一个区别 - 始终评估这两个值.如果它们只是变量,那么没什么大不了的,但是如果有函数调用(特别是有副作用),它会有所不同.

2> titaniumdeco..:

您应该阅读Mark Pilgrim使用Dive Into Python 的and-or trick(第4.6.1节).事实证明,和 - 或技巧有你应该注意的主要陷阱.



推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有