Python条件运算符如何工作?

2024-04-25 06:19:55 发布

您现在位置:Python中文网/ 问答频道 /正文

从我读到的资料中,我发现一个内置的三元运算符并不存在(我很乐意知道更多关于它的信息)。

我找到了以下代码作为替代:

def val():
    var = float(raw_input("Age:"))
    status = ("Working","Retired")[var>65]
    print "You should be:",status

我不明白这段代码是如何工作的;有人能解释一下代码是如何工作的吗?我还想知道为什么三元运算符不存在;关于这一点的任何引用或链接都将非常有用。

我在WindowsVista上运行Python2.6.4。


Tags: 代码信息inputagerawvardefstatus
3条回答

Python(2.5及更高版本)确实有一个用于您所寻找内容的语法:

x = foo if condition else bar

如果condition为真,则x将设置为foo,否则将设置为bar

示例:

>>> age = 68
>>> x = 'Retired' if age > 65 else 'Working'
>>> x
'Retired'
>>> age = 35
>>> y = 'Retired' if age > 65 else 'Working'
>>> y
'Working'

Python有一个类似于C等语言中的三元运算符的结构。它的工作原理如下:

my_var = "Retired" if age > 65 else "Working"

相当于C代码:

my_var = age > 65 ? "Retired" : "Working";

至于你发布的代码是如何工作的,让我们一步一步来:

("Working","Retired")

创建一个2元组(不可变列表),其中元素“Working”位于索引0,而“Retired”位于索引1。

var>65

如果var大于65,则返回True;如果不大于65,则返回False。应用于索引时,它将转换为1(True)或0(False)。因此,这个布尔值为在同一行创建的元组提供索引。

为什么Python不总是有一个三元运算符?简单的答案是,Python的作者Guido van Rossum不喜欢/不想要它,显然他认为这是一个不必要的构造,可能会导致代码混乱(任何在C中看到大量嵌套的三元运算符的人都可能同意)。但对于Python2.5,他让步了,并添加了上面看到的语法。

因为True强制转换为1,False强制转换为0,所以如果var=70

("Working","Retired")[var>65]

变成

("Working", "Retired")[1]

一条很好的捷径。。。但我发现它可能有点混乱,除了一个简单的条件,所以我同意TM的建议

"Retired" if var > 65 else "Working"

相关问题 更多 >