17
if <boolean> :
   # do this

布尔值必须为 True 或 False。

那么为什么

if "poi":
   print "yes"

输出:是

我不明白为什么是打印,因为“poi”是真或假。

4

3 回答 3

29

当需要从表达式中获取布尔值时,Python 将尽最大努力评估表达式的“真实性”。

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

None对象也被认为是错误的。

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

考虑所有其他表达式True

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

于 2013-08-28T15:14:40.877 回答
10

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

IE,

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

if "":
    # this will NOT print foo
    print("foo")
于 2013-08-28T15:12:45.583 回答
9

这里发生的是 Python在 之后对隐式bool()构造函数if的补充,因为后面的任何内容都if应该被解析为布尔值。在这种情况下,您的代码相当于

if bool("hello"):
   print "yes"

根据Pythonbool(x)构造函数接受任何东西并根据以下情况决定真实性

  • 如果 x 是整数,只有其他的0都是FalseTrue
  • 如果 x 是浮点数,只有0.0其他False一切都是 True`
  • 如果 x 是列表,只有其他的[]都是FalseTrue
  • 如果 x 是 set/dict,只有其他的{}都是FalseTrue
  • 如果 x 是元组,只有其他的()都是FalseTrue
  • 如果 x 是字符串,只有其他的“"都是. 请注意,将返回FalseTruebool(“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
于 2015-03-03T07:01:17.687 回答