关于语法:我怎样才能从Python中使用? : 语法

How can I closely achieve ?: from C++/C# in Python?

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

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

在python中是否有一种快速的方法来做同样的事情,或者我是否坚持使用"if"语句?


在Python 2.5,那里的冰 </P >

1
A if C else B

这behaves很多的对手吗?:C。但是,它的frowned河畔,两条理由:readability和事实,那是不幸的一usually简单的方式到法的问题。方法",在你的案例: </P >

1
stringValue = otherString or defaultString


"丹 </P >

1
2
3
4
if otherString:
   stringValue = otherString
else:
   stringValue = defaultString

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

嗯,是的,它是长的。不确定是"多"提出了"和"更多的readable"。在非常至少,你disputable索赔的冰。甚至在会去为父亲的混蛋说的downright错误,因为两个原因。 </P >

第一,你的代码的emphasizes决策(拉瑟甚)。onthe对方的手,emphasizes什么别的条件运算符的值,namely(vs.所说的分配值)。这是什么exactly本代码的作者想要的。《决策冰真的,当前的A村制品的代码。"重要的是,我方的配置操作。你hides码本分配到很多噪音:句法的分支。 </P >

讨厌你的代码,因为它提出了冰间的重点从党的重要任务。 </P >

即使当时你的代码可能会将一些无名的裘德状?:ASCII艺术。西安在线if会preferable。personally,我不喜欢introduced变异与Python 2.5,因为它的backwards。在这prefer会读到一些东西,同样的流程(方向)为C语言的使用,但ternary运营商学院而不是ASCII字元: </P >

1
C = if cond then A else B

这wins上下。 </P >

C和C #又不安已经提出了这样的声明。但是,(这是第二参数),《ternary条件运算符C语言学院成立,这是冰,很长时间以来,它已经成为西安成语本身的输入。《ternary算子的多冰作为党的语言为"普通"if声明。因为它的其他用法,别人谁知道这本《语言立即读取代码的权利。furthermore,它的是非常短的,简明的方式expressing这些语义。在的事实,它的imaginable最短的路。它的,因为它提出了非常不needless《无名的裘德的本质与噪声。 </P >

我有书面的,Jeff Atwood到这完美的结论:最好的代码在所有的冰无码。 </P >


这个问题有几个副本,例如

  • python是否有三元条件运算符?
  • 在python中替换三元运算符的最佳方法是什么?

本质上,在一般设置中,2.5之前的代码应使用:

1
 (condExp and [thenExp] or [elseExp])[0]

(给定condexp,thenexp和elseexp是任意表达式),因为如果thenexp的计算结果为布尔值false,则可以避免错误的结果,同时保持短路计算。


它的一个坏的东西是永远不会写readable,提出了代码。 </P >

1
2
3
4
if otherString:
   stringValue = otherString
else:
   stringValue = defaultString

这部法典的长型和更多的冰,但也提出了更多的readable,除非likely到山羊tripped或编辑过的错误作法的路。不要问afraid写expressively - readable代码应该(A)的目标,byproduct附注。 </P >


第四部《diveintopython.net有回音。它叫"与-或在Python的把戏。 </P >


也正是在discovered使用"或"运算符是相当好的。(例如: </P >

1
finalString = get_override() or defaultString

如果_覆盖(山羊)剧情"或无,它将永远defaultstring使用。 </P >


顺便,j0rd4n,你不(请不要!)代码写在C #呢。事实是,除了从《IsDefaultOrNullIsNullOrEmpty实际上被称为冰,这是纯代码膨胀。C #算子对受害者的coalesce喜欢这些情况: </P >

1
string stringValue = otherString ?? defaultString;

这是真的,如果这只otherString冰厂null(拉瑟比空),但如果这能让ensured beforehand(它可以经常与丈夫)信息的代码readable多更多。 </P >


如果你用明亮的红宝石色,你可以写 </P >

1
stringValue = otherString.blank? ? defaultString : otherString;

内置的blank?方法均值null或空。 来过的黑暗面。 </P >


你可以采取优势的事实,他们的逻辑表达式的返回值,与注释是true或false状态。例如,你可以总是使用: </P >

1
result = question and firstanswer or secondanswer

与商品,它不喜欢的工作,如果firstanswer冰ternary算子的错误。这是第一个问题,因为冰的评估,这是真的assuming firstanswer冰中运动firstanswer冰的错误,所以这类使用fails对法案的ternary算子。如果你知道的价值,但是,有没有问题usually冰。例如:我们会 </P >

1
result = choice == 7 and"Seven" or"Another Choice"