【问题标题】:Truth value of a string in pythonpython中字符串的真值
【发布时间】:2013-08-28 15:11:36
【问题描述】:
if <boolean> :
   # do this

布尔值必须为 True 或 False。

那为什么

if "poi":
   print "yes"

输出: 是的

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

【问题讨论】:

标签: python


【解决方案1】:

当表达式需要布尔值时,Python 会尽力评估表达式的“真实性”。

字符串的规则是空字符串被认为是False,非空字符串被认为是True。同样的规则也适用于其他容器,因此空字典或列表被视为False,具有一个或多个条目的字典或列表被视为True

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

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

所有其他表达式都被视为True

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

【讨论】:

  • 我相信 Python 将始终测试任何具有类的 __len__() ,并认为结果为 0 表示该对象在布尔上下文中计算为 false。这与在用户定义的类上施加相同的规则非常接近(您必须故意从 __len__() 方法返回一些非直观的值,或者完全忽略它,以避免遵循相同的作为内置规则)。
  • 对于阅读以上答案的任何人:确保您真正阅读了文档(以上链接或此处:docs.python.org/2/reference/datamodel.html#object.__nonzero__
  • 以防万一有人对 'a' or 'b' 返回 'a' 而不是 True 感到困惑,请注意 andor 是“短路操作符”和“使用时作为一般值而不是布尔值,短路运算符的返回值是最后评估的参数。”由于'a' 的计算结果为True,因此整个表达式必须为真,因此甚至不计算'b' 的真值。 docs.python.org/3.6/tutorial/…
【解决方案2】:

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

即,

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

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

【讨论】:

  • 列表和其他数据类型也是如此,不是吗?
  • “默认为True”并不正确。 “在布尔上下文中评估为True”怎么样?
  • naveen yadav,是的,所有内置集合类型都是如此。空集合为 False,非空集合为 True。字符串是一个序列,是一种集合。
【解决方案3】:

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

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

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

  • 如果 x 是整数,只有 0False 其他都是 True
  • 如果 x 是浮点数,则只有 0.0False 其他都是 True`
  • 如果 x 是列表,则只有 []False 其他所有内容都是 True
  • 如果 x 是 set/dict,则只有 {}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

【讨论】:

  • 不要忘记 bool(None) 的计算结果为 False。
猜你喜欢
  • 2017-01-11
  • 1970-01-01
  • 1970-01-01
  • 2012-04-14
  • 1970-01-01
  • 2011-11-15
  • 1970-01-01
  • 2019-08-19
  • 1970-01-01
相关资源
最近更新 更多