标题可能需要一些重新措辞,但这是我的问题:
下面的代码结果为False,因此不打印任何内容。更改为d = 1<10
最终为True。
c = "text"
d = 1>10
if d:
print c
足够简单。但是现在如果我改变d = "more text"
,if语句也会打印c。为什么呢?
答案 0 :(得分:7)
这就是python字符串的定义方式。当您尝试将它们作为布尔值计算时,只有空字符串返回False
。所有其他字符串都返回True
。
>>> bool('not an empty string')
True
>>> bool('')
False
答案 1 :(得分:3)
唯一被视为False
值的字符串是空字符串。它是如何为字符串定义__bool__
操作的:
>>> bool('foobar')
True
>>> bool('False')
True
>>> bool('')
False
答案 2 :(得分:2)
在布尔运算的上下文中,以及表达式时 在控制流语句中使用时,将解释以下值 as false:False,None,所有类型的数字零,以及空字符串 和容器(包括字符串,元组,列表,字典,集合 和frozensets)。所有其他值都被解释为true。 (见
__nonzero__()
一种更改此方法的特殊方法。)
答案 3 :(得分:2)
真值测试
以下值被视为false:
无
假
任何数字类型的零,例如0,0.0,0j。
任何空序列,例如'',(),[]。
任何空映射,例如{}。
来自python docs Truth Value Testing
所以''
,一个空字符串,返回False。
答案 4 :(得分:1)
如果d
为空字符串,则会返回False
,否则,如果字符串包含内容,则会返回True
。
答案 5 :(得分:0)
1>10
始终为false,因此您的代码示例不会打印任何内容。
当空字符串返回False
时,所有其他字符串总是被评估为True
。
因此
d = "some string"
if d:
print c
实际打印c
,因为它已将d
评估为True