如何在Python中接近地实现C++/C#中的?
在C#中,我可以很简单地写出下面的代码:
string stringValue = string.IsNullOrEmpty( otherString ) ? defaultString : otherString;
有没有什么快速的方法可以在Python中做到同样的事情,还是说我只能用'if'语句呢?
9 个回答
写出易读、表达清晰的代码永远是好事。
if otherString:
stringValue = otherString
else:
stringValue = defaultString
这种代码虽然会更长一些,但表达得更清楚,也更容易阅读,不容易出错或者被误修改。不要害怕写得清晰明了——让代码易读应该是你的目标,而不是偶然的结果。
@Dan
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
语句一样,是语言的一部分。因为它是一种习惯用法,任何懂这门语言的人都能立刻理解这段代码。此外,它是表达这些语义的极短、简洁的方式。实际上,这是最短的表达方式。它非常清晰,因为没有多余的噪音来掩盖本质。
最后,Jeff Atwood写了一个完美的总结:最好的代码就是根本不写代码。
在Python 2.5中,有这样一种写法:
A if C else B
它的作用和C语言中的?:运算符很像。不过,这种写法不太被推荐,主要有两个原因:一是可读性差,二是通常有更简单的方法来解决问题。比如,在你的例子中:
stringValue = otherString or defaultString