1
51
python有一个构造,类似于c等中的三元运算符。它的工作原理如下:
相当于C代码:
至于您发布的代码是如何工作的,让我们逐步了解它:
创建一个2元组(不可变列表),元素“working”位于索引0,而“retired”位于索引1。
如果var大于65,则返回true;否则返回false。当应用于索引时,它将转换为1(真)或0(假)。因此,这个布尔值为在同一行上创建的元组提供索引。 为什么python不总是有三元运算符?简单的答案是,python的作者guido van rossum不喜欢/不喜欢它,显然他认为这是一个不必要的构造,可能会导致代码混淆(任何在C中看到大量嵌套三元运算符的人都可能会同意)。但是对于python 2.5,他让步了,并添加了上面看到的语法。 |
2
9
python(2.5及更高版本)确实具有您要查找的内容的语法:
如果
实例:
|
3
8
因为真的强制转换为1,假的强制转换为0,所以如果var=70
变成
一条很好的捷径…但我发现除了一个简单的条件外,它可能有点令人困惑,所以我同意TM的建议。
|
4
7
索引到列表中使用
利用这样一个事实:在python中,true等于(但不是!)1和false等于(但不是!)0。上面的表达式构造两个元素的列表,并使用 条件 在列表中建立索引并只返回一个表达式。这种方法的缺点是对两个表达式都进行了计算。 和或快捷方式自创建python以来,此操作有一种形式:
这采用了一个快捷方式,只计算一个表达式,但有一个容易出错的缺点:
表达式“当”为“真时”
不能
计算为非真值,否则结果为
表达式“假时”
.
如果 条件 是假的,那么 表达式“当”为“真时” 从未进行过评估,结果是 表达式“假时” . otoh,如果 条件 是真的,那么结果就是( 表达式“当”为“真时” 或 表达式“假时” );参考上表。 三元条件运算符当然,由于python 2.5,有一个三元条件运算符:
操作数的奇怪顺序(如果您习惯于类C三元条件运算符)是可归因的。 to many things 总的意图是 条件 大多数情况下都应该是正确的,这样最常见的输出就出现在第一位,并且是最可见的。 |
5
2
短路布尔表达式还可以选择短路逻辑操作:
在您的示例中:
在中阅读有关此技术的更多信息 Charming Python: Functional Programming in Python, Part 1 . |
6
0
在您发布的代码中,下面一行是模仿三元的:
这里元组
|
7
0
最初没有三元运算符,因为“显式比隐式好”,它被认为是非对称的。我也不太喜欢Python的三元运算,但它确实存在:
如TM所示。
至于
|
8
0
此行用作三元运算符,因为表达式
也就是说,序列的第二个元素
所以
同样,如果
和
|
9
0
只有该代码的“status=”行实现类似三元运算符的操作。
这将创建一个两元素元组,其中字符串“working”位于索引0,而“retired”位于索引1。然后,它索引到该元组中,使用表达式的结果选择这两个项中的一个。
如果var的值大于65,则此表达式将返回true(相当于1,因此选择“retired”)。否则将返回false(相当于0,因此选择“working”)。 然而,这种方法与三元运算符有一个关键区别,尽管在您的特定示例中并不重要。使用元组索引方法,将计算两个值,但只返回一个值。对于三元运算符,实际上只评估两个值中的一个;这被称为“短路”行为。在这种情况下很重要:
在第一种情况下,调用funca()。 或 调用了funcb(),但不能同时调用两者。在后一种情况下,首先调用这两个函数,结果存储在元组中——然后只挑选一个函数并丢弃该元组。 这对于理解funca()或funcb()是否具有“副作用”尤其重要,这意味着它们在执行时会更改其他数据。 |
10
0
在python 2.6及更高版本中:
在python 3.1及更高版本中:
|
11
0
这是带有python三元运算符的窗体
您所展示的代码有点复杂:它创建了一个元素位于0和1位置的两元素元组。要选择正确的元素,它使用返回布尔值的条件,但python中的布尔值是整数,因此可以将其用作 特殊的 索引(可以是0或1)。 |
12
0
试着根据这里给出的答案给出一个完整的答案。 您找到的方法(请不要使用此方法,因为它不太可读):
使用python 2.5+语法:
使用一些人仍然喜欢的其他常用方法:
编辑:
发现了最后一种方法(THX罗伯托·邦瓦莱)的一些问题。
所以我最后的建议是 使用2.5+三元运算符 因为它很简单,可读性好,并且提供了短路行为。 |
Tanu · 使用三元运算符时获得Lint无嵌套三元错误 2 年前 |
Davtho1983 · 条件运算符不适用于ngStyle 7 年前 |
wibby35 · 是否可以转换为内联? 7 年前 |
user5155804 · 条件表达式中未赋值的指针是否变为空? 7 年前 |
Bryce · PHP切换条件语句更好的方法 7 年前 |
Farvardin · java条件运算符和不同类型 10 年前 |