我怎样才能接近目标?:从Python中的C++/C语言?

2024-09-28 23:07:38 发布

您现在位置:Python中文网/ 问答频道 /正文

在C语言中,我可以很容易地写下以下内容:

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

在Python中有没有一种快速的方法来做同样的事情呢?还是我一直在使用“if”语句?在


Tags: 方法stringif语句事情isnulloremptystringvalueotherstring
3条回答

@丹

if otherString:
   stringValue = otherString
else:
   stringValue = defaultString

This type of code is longer and more expressive, but also more readable

嗯,是的,时间更长。不太确定“更具表现力”和“更具可读性”。至少,你的要求是有争议的。我甚至会说这是彻头彻尾的错误,有两个原因。在

首先,您的代码强调决策(相当极端)。另一方面,条件运算符强调其他东西,即值(resp。上述价值的分配)。这正是这段代码的作者想要的。决策实际上是代码的副产品。这里的重要部分是赋值操作。您的代码在大量语法噪音中隐藏了这个赋值:分支。在

您的代码表达能力较差,因为它将重点从重要部分转移。在

即使这样,您的代码也可能胜过一些晦涩难懂的ASCII艺术,比如?:。最好使用内联-if。就个人而言,我不喜欢Python2.5引入的变体,因为它是向后的。我更喜欢读与C三元运算符相同的流(方向),但使用单词而不是ASCII字符:

C = if cond then A else B

这是轻而易举的胜利。在

不幸的是,C和C没有这样的表达方式。但是(这是第二个论点),C语言中的三元条件运算符建立得太久了,它本身已经成为一种习惯用法。三元运算符与“常规”if语句一样是语言的一部分。因为这是一个习语,任何懂这门语言的人都会立即正确地阅读这段代码。此外,它是表达这些语义的一种非常简短、简洁的方式。事实上,这是可以想象的最短的方法。它非常有表现力,因为它不会用不必要的噪音掩盖本质。在

最后,Jeff Atwood写了一个完美的结论:The best code is no code at all。在

编写可读、有表现力的代码从来都不是坏事。在

if otherString:
   stringValue = otherString
else:
   stringValue = defaultString

这种类型的代码更长、更具表现力,但也更具可读性,不太可能被绊倒或被错误编辑。不要害怕以表达方式编写——可读代码应该是目标,而不是副产品。在

在Python2.5中,有

A if C else B

它的行为很像?:在C语言中,它不受欢迎有两个原因:可读性,以及通常有一种更简单的方法来解决这个问题。例如,在您的案例中:

^{pr2}$

相关问题 更多 >