我怎样才能紧密实现?:来自Python中的C++/C#?

Jor*_*mer 9 python syntax syntax-rules ternary-operator

在C#中,我可以轻松编写以下内容:

string stringValue = string.IsNullOrEmpty( otherString ) ? defaultString : otherString;
Run Code Online (Sandbox Code Playgroud)

有没有快速的方法在Python中做同样的事情或我坚持使用'if'语句?

Tho*_*ers 23

在Python 2.5中,有

A if C else B
Run Code Online (Sandbox Code Playgroud)

它的行为很像?:在C.但是,它有两个原因:可读性,以及通常有一种更简单的方法来处理问题.例如,在您的情况下:

stringValue = otherString or defaultString
Run Code Online (Sandbox Code Playgroud)

  • 那不是倒退吗?一般来说,因为像"cond和A或B"之类的问题,所以和/或技巧都不受欢迎,其中A恰好是0的假值.有一些变通方法,如(cond和[A]或[B])[0 ],但几乎添加了if/else语法,以消除对此类滥用的需要. (2认同)

Kon*_*lph 5

@担

if otherString:
   stringValue = otherString
else:
   stringValue = defaultString
Run Code Online (Sandbox Code Playgroud)

这种类型的代码更长,更具表现力,但也更具可读性

是的,它更长.不太确定"更具表现力"和"更具可读性".至少,你的主张是有争议的.出于两个原因,我甚至会说它完全错了.

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

你的代码表达力较差,因为它将重点从重要部分转移.

即使这样,你的代码也可能胜过一些不起眼的ASCII艺术?:.内联 - if将是更可取的.就个人而言,我不喜欢Python 2.5中引入的变体,因为它是向后的.我更喜欢读取与C三元运算符相同的流(方向)但使用单词而不是ASCII字符的东西:

C = if cond then A else B
Run Code Online (Sandbox Code Playgroud)

这赢得了胜利.

不幸的是,C和C#没有这样的表达声明.但是(这是第二个论点),C语言的三元条件运算符已经建立了很长时间,它已经成为一种成语.三元运算符与"常规" if语句一样,都是语言的一部分.因为它是一个成语,任何知道该语言的人都会立即读取这段代码.此外,它是表达这些语义的极短,简洁的方式.事实上,它是最短的可想象的方式.它非常富有表现力,因为它不会因不必要的噪音而模糊本质.

最后,杰夫阿特伍德已经写出了完美的结论:最好的代码根本就没有代码.