“if x == True”与“if x:”有什么区别?

11

大家好,stackoverflow社区 :-)

我目前正在学习Python,并且我并不完全理解“True/False”概念。

在Python中,数字0与“False”相关联,而数字1与“True”相关联。

当我编写以下代码时:

x = 2
y = 1

if y == True:
    print("Y is True")
if x == True:
    print("X is True")
else:
    print("X is False")

我得到了“Y是真”的结果,因为“1”是真值。而我得到了“X是假”的结果,但我认为这也应该是“真”的,因为有一个值(x=2),而不是“None,0等”

当我写下以下代码的时候

if x:
    print("X is True")
else:
    print("X is False")

那么我得到的是"X is True",因为x不是空的,因此为真值。

"if x:"和"if x == True"之间的确切区别是什么?


3
你确定缩进是正确的吗?Python非常注重正确的缩进! - Krzysiek Karbowiak
1
Matthias,不要使用这段代码。在if语句后面必须缩进! - Sid
1
我修改了你的格式,因为它据说不是你观察到的行为的原因。 - glglgl
3个回答

15
区别是if x:检查x的真值。除了0之外的所有整数的真值都为true(在这种情况下为2)。
然而,if x == True:xTrue的值进行比较,它是一种1。比较2 == 1的结果为false。
确切地说,有两个相邻的概念: *一个是“真值”,它确定ifwhile等的行为。 *另一个是值TrueFalse,它们具有各自的真值“true”和“false”,但不一定等于其他真或假值。
如果您绝对需要出于任何原因检查TrueFalse的确切值,则可以使用if x is Trueif x is False进行此操作。这确保如果y恰好是True将通过测试,如果它是1,则不会。

2
请问您能否添加一句话,即使用 if .. is boolean 要比使用 if .. == boolean 更好? - DeepSpace

6
==运算符并不比较其操作数的真值,而是比较它们的值。
当布尔值在需要数字的上下文中使用时,例如与数字进行比较时,它们会自动转换: True 变成了 1False 变成了 0
因此,
if some_boolean == some_number:

实际上等价于:

if int(some_boolean) == some_number:

这就是为什么。
if True == 2:

操作失败。int(True)表示为1,因此这等同于

if 1 == 2:

2

问题的等效视角:

"if x" <==> "if bool(x)"

因为您的x是整数:

"if x" <==> "if x != 0"

并且

"if x == True"  <==> "if x == 1"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接