如何在Python中接近地实现C++/C#中的?

12 投票
9 回答
1383 浏览
提问于 2025-04-11 09:31

在C#中,我可以很简单地写出下面的代码:

string stringValue = string.IsNullOrEmpty( otherString ) ? defaultString : otherString;

有没有什么快速的方法可以在Python中做到同样的事情,还是说我只能用'if'语句呢?

9 个回答

1

写出易读、表达清晰的代码永远是好事。

if otherString:
   stringValue = otherString
else:
   stringValue = defaultString

这种代码虽然会更长一些,但表达得更清楚,也更容易阅读,不容易出错或者被误修改。不要害怕写得清晰明了——让代码易读应该是你的目标,而不是偶然的结果。

5

@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写了一个完美的总结:最好的代码就是根本不写代码

24

在Python 2.5中,有这样一种写法:

A if C else B

它的作用和C语言中的?:运算符很像。不过,这种写法不太被推荐,主要有两个原因:一是可读性差,二是通常有更简单的方法来解决问题。比如,在你的例子中:

stringValue = otherString or defaultString

撰写回答