空字符串布尔逻辑

7
我刚刚偶然看到了这个问题,但是我找不到一个合适的答案:
x = ""

为什么会这样呢?
x == True
False

x == False
False

x != True
True

x != False
True

我应该得出结论,x 不是 True 也不是 False 吗?


什么?!你得出结论,即 x 不等于 TrueFalse。你为什么认为它会是这样呢?你是否被 https://docs.python.org/2/library/stdtypes.html#truth-value-testing 搞混了?在布尔上下文中,它仍将被视为假值:if x:bool(x) 等。 - jonrsharpe
1
卷积博士,我认为您想要测试的是 bool(x) == False。尽管用户名已经检查通过了。 - pholtz
现在看看当您设置x=0时,测试会发生什么情况。然后再将x设置为1并进行相同的操作。 - PM 2Ring
2
@PM2Ring 在stackoverflow上问一个糟糕的问题会毁掉你的一天。FML - Dr.Tautology
嘿,这并不是太糟糕了。当然,它的净零得分可能有些低,但你从中赢得了一些声望点,并得到了一些好的答案。但是,确实,这是相当基础的信息,在官方文档中并不难找到。 - PM 2Ring
4个回答

6

检查 x 是否为真或假:

bool("")
> False

bool("x")
> True

有关于 is== 的语义细节,请参见此问题


4

我应该得出结论,x既不是True也不是False吗?

没错。 x 既不是 True 也不是 False,它是 ""。区别在于类型:

>>> print(type(""), type("x"), type(True), type(False))
builtins.str, builtins.str, builtins.bool, builtins.bool

Python是一种高度面向对象的语言。因此,字符串是对象。Python的好处在于它们可以有一个布尔值表示,例如if x: print("yes")。对于字符串,此表示为len(x)!=0


2
在Python中,'=='用于测试相等性。空字符串不等于True,因此您的比较结果为False。
您可以通过将空字符串传递给bool函数来确定其“真实性”:
>>> x = ''
>>> bool(x)
False

1
在布尔上下文中,null/空字符串为false(Falsy)。如果您使用...
testString = ""

if not testString:
    print("NULL String")
else:
    print(testString)

正如snakecharmerb所说,如果你将字符串传递给bool()函数,它将根据其内容返回True或False。
>>> testString = ""
>>> bool(testString)
    False

>>> testString = "Not an empty string"
>>> bool(testString)
    True

查看“真值测试”文档以了解更多信息:
Python 2:

https://docs.python.org/2/library/stdtypes.html#truth-value-testing

Python 3:

https://docs.python.org/3/library/stdtypes.html#truth-value-testing


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