Python 条件运算符如何解决问题?

21 投票
12 回答
10267 浏览
提问于 2025-04-15 17:17

根据我所了解,似乎没有内置的三元运算符(如果有更多信息我会很高兴知道)。

我找到了一段代码可以替代它:

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

我不太明白这段代码是怎么工作的;有没有人能给我解释一下这段代码的实际运行方式?我也想知道为什么没有三元运算符;如果有相关的参考资料或链接,那就更好了。

我在Windows Vista上运行的是Python 2.6.4。

12 个回答

8

因为在编程中,True会被当作1,False会被当作0,所以如果var=70

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

就变成了

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

这是一个很不错的小技巧……不过我觉得在简单条件以外的情况下,这个方法可能会有点让人困惑,所以我更倾向于TM的建议

"Retired" if var > 65 else "Working"
9

Python(2.5及以上版本)确实有你想要的语法:

x = foo if condition else bar

如果condition为真(True),那么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'
51

Python有一种结构,类似于C语言等中的三元运算符。它的用法大概是这样的:

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

这段代码和下面的C代码是等价的:

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

接下来,我们来一步步看看你发的代码是怎么工作的:

("Working","Retired")

这段代码创建了一个包含两个元素的元组(不可变的列表),第一个元素是“Working”(工作中),在索引0的位置;第二个元素是“Retired”(退休),在索引1的位置。

var>65

如果变量var大于65,就返回True;否则返回False。当这个值用作索引时,它会被转换成1(True)或0(False)。因此,这个布尔值可以用来在同一行创建的元组中查找对应的元素。

那么,为什么Python一开始没有三元运算符呢?简单来说,Python的创始人Guido van Rossum不喜欢这个东西,他觉得它是个不必要的结构,可能会导致代码混乱(谁见过C语言中大量嵌套的三元运算符,可能都会同意这一点)。不过在Python 2.5的时候,他妥协了,加入了上面看到的语法。

撰写回答