为什么Python中的字符串会解析为True?

时间:2014-02-26 08:45:39

标签: python if-statement

标题可能需要一些重新措辞,但这是我的问题:

下面的代码结果为False,因此不打印任何内容。更改为d = 1<10最终为True。

c = "text"
d = 1>10

if d:
    print c

足够简单。但是现在如果我改变d = "more text",if语句也会打印c。为什么呢?

6 个答案:

答案 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)

请参阅Boolean operations

上的python doc
  

在布尔运算的上下文中,以及表达式时   在控制流语句中使用时,将解释以下值   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