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 = defaultStringThis 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 >
即使当时你的代码可能会将一些无名的裘德状
1 | C = if cond then A else B |
这wins上下。 </P >
C和C #又不安已经提出了这样的声明。但是,(这是第二参数),《ternary条件运算符C语言学院成立,这是冰,很长时间以来,它已经成为西安成语本身的输入。《ternary算子的多冰作为党的语言为"普通"
我有书面的,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 #呢。事实是,除了从《
1 | string stringValue = otherString ?? defaultString; |
这是真的,如果这只
如果你用明亮的红宝石色,你可以写 </P >
1 | stringValue = otherString.blank? ? defaultString : otherString; |
内置的
你可以采取优势的事实,他们的逻辑表达式的返回值,与注释是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" |