python中字符串的真值

nav*_*yad 12 python

if <boolean> :
   # do this
Run Code Online (Sandbox Code Playgroud)

boolean必须是True或False.

那么为什么

if "poi":
   print "yes"
Run Code Online (Sandbox Code Playgroud)

输出:是的

我不明白为什么是打印,因为"poi"是虚假的真或假.

Lar*_*tig 22

当需要从该表达式获取布尔值时,Python将尽力评估表达式的"真实性".

字符串的规则是考虑空字符串,考虑False非空字符串True.对其他容器施加相同的规则,因此考虑空字典或列表,考虑False具有一个或多个条目的字典或列表True.

None对象也被视为错误.

数值0被认为是假的(尽管字符串值'0'被认为是真的).

考虑所有其他表达True.

详细信息(包括用户定义的类型如何指定真实性)可以在这里找到:http://docs.python.org/release/2.5.2/lib/truth.html.

  • 对于阅读上述答案的任何人:确保您实际阅读了文档(以上链接或此处:http://docs.python.org/2/reference/datamodel.html#object.__nonzero__) (2认同)
  • Python 3的等效文档:http://docs.python.org/3/reference/datamodel.html#object.__bool__ (2认同)

Cam*_*arr 8

在python中,除空字符串之外的任何字符串都默认为 True

if "MyString":
    # this will print foo
    print("foo")

if "":
    # this will NOT print foo
    print("foo")
Run Code Online (Sandbox Code Playgroud)

  • "默认为'True`"并不是真的正确.如何在布尔上下文中"评估为'True`"? (2认同)

neh*_*iah 7

这里发生了什么是Python"补充隐含的bool()构造if,因为任何其次if,应解决是布尔值.在这种情况下,您的代码等同于

if bool("hello"):
   print "yes"
Run Code Online (Sandbox Code Playgroud)

根据Python bool(x)构造函数接受任何内容并根据以下情况决定真实性

  • 如果x是整数,仅0False其他一切都是True
  • 如果x浮动,仅0.0False其他一切都是TRUE`
  • 如果x是列表中,仅[]False其他一切都是True
  • 如果x设置/快译通,仅{}False其他一切都是True
  • 如果x元组,仅()False其他一切都是True
  • 如果x是字符串,仅“"False其他一切True.请注意,bool(“False”)将返回True

这是我上面列出的案例的日志

Python 3.4.3 (default, Feb 25 2015, 21:28:45) 
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> bool(0)
False
>>> bool(1)
True
>>> bool(-1)
True
>>> bool(0.0)
False
>>> bool(0.02)
True
>>> bool(-0.10)
True
>>> bool([])
False
>>> bool([1,2])
True
>>> bool(())
False
>>> bool(("Hello","World"))
True
>>> bool({})
False
>>> bool({1,2,3})
True
>>> bool({1:"One", 2:"Two"})
True
>>> bool("")
False
>>> bool("Hello")
True
>>> bool("False")
True
Run Code Online (Sandbox Code Playgroud)

  • 不要忘记 bool(None) 的计算结果为 False。 (2认同)