在Python中是否有特纳利条件操作器?


当前回答

在Python中,Ternary Operator的合成是:

假如他是真實的,

使用这个合成,这里是我们如何使用Python的Ternary操作器重写上面的代码:

game_type = 'home'
shirt = 'white' if game_type == 'home' else 'green'

请注意,表达式可能是任何类型的表达式,包括函数呼叫,返回值,评估为真实或虚假。

其他回答

如果否则版本可以写作如下:

sample_set="train" if "Train" in full_path else ("test" if "Test" in full_path else "validation")
a if condition else b

记住这个金字塔,如果你有记住问题:

     condition
  if           else
a                   b 

不同编程语言的Ternary Operator

在这里,我只是试图在编程语言中显示一些重要的区别。

Ternary Operator 在 JavaScript 中

var a = true ? 1 : 0;
# 1
var b = false ? 1 : 0;
# 0

土木运营商在卢比

a = true ? 1 : 0
# 1
b = false ? 1 : 0
# 0

Ternary 运营商在 Scala

val a = true ? 1 | 0
# 1
val b = false ? 1 | 0
# 0

R 编程中的 Ternary 操作员

a <- if (TRUE) 1 else 0
# 1
b <- if (FALSE) 1 else 0
# 0

在Python中使用Ternary Operator

a = 1 if True else 0
# 1
b = 1 if False else 0
# 0

你可以把它分成一个<unk>子:

(falseValue, trueValue)[test]

测试需要返回真实或虚假. 它可能更安全地总是执行它如下:

(falseValue, trueValue)[test == True]

或者您可以使用内置的 bool() 来确保 Boolean 值:

(falseValue, trueValue)[bool(<expression>)]

test: or_test ['if' or_test 'else' test] | lambdef

兴趣的一部分是:

or_test ['if' or_test 'else' test]

expression1 if expression2 else expression3

expression3 将被轻松评估(即只有在 boolean 背景下, expression2 是虚假的),并且由于重复的定义,你可以无限地链接它们(也许它可能被认为是坏风格)。

expression1 if expression2 else expression3 if expression4 else expression5 # and so on

人们学习列表的理解和发明表达可能认为这是一个难以学习的教训 - 以下不会工作,因为Python预期另一个第三个表达:

[expression1 if expression2 for element in iterable]
#                          ^-- need an else here

[expression1 for element in iterable if expression2]

expression1 if expression1 else expression2

expression1 or expression2

请注意,一些风格指南可以根据清晰度限制这种使用 - 它包装了很多意义到很少的合成。