在C#中,我可以轻松编写以下内容:
string stringValue = string.IsNullOrEmpty( otherString ) ? defaultString : otherString;
有没有快速的方法在Python中做同样的事情或我坚持使用'if'语句?
在Python 2.5中,有
A if C else B
它的行为很像?:在C.但是,它有两个原因:可读性,以及通常有一种更简单的方法来处理问题.例如,在您的情况下:
stringValue = otherString or defaultString
@担
if otherString: stringValue = otherString else: stringValue = defaultString这种类型的代码更长,更具表现力,但也更具可读性
是的,它更长.不太确定"更具表现力"和"更具可读性".至少,你的主张是有争议的.出于两个原因,我甚至会说它完全错了.
首先,您的代码强调决策(非常极端).另一方面,条件运算符强调其他东西,即值(分别是所述值的赋值).这正是这段代码的作者想要的.决策实际上是代码的副产品.这里重要的部分是分配操作.你的代码在很多语法噪音中隐藏了这个赋值:分支.
你的代码表达力较差,因为它将重点从重要部分转移.
即使这样,你的代码也可能胜过一些不起眼的ASCII艺术?:
.内联 - if
将是更可取的.就个人而言,我不喜欢Python 2.5中引入的变体,因为它是向后的.我更喜欢读取与C三元运算符相同的流(方向)但使用单词而不是ASCII字符的东西:
C = if cond then A else B
这赢得了胜利.
不幸的是,C和C#没有这样的表达声明.但是(这是第二个论点),C语言的三元条件运算符已经建立了很长时间,它已经成为一种成语.三元运算符与"常规" if
语句一样,都是语言的一部分.因为它是一个成语,任何知道该语言的人都会立即读取这段代码.此外,它是表达这些语义的极短,简洁的方式.事实上,它是最短的可想象的方式.它非常富有表现力,因为它不会因不必要的噪音而模糊本质.
最后,杰夫阿特伍德已经写出了完美的结论:最好的代码根本就没有代码.