【发布时间】:2013-08-28 15:11:36
【问题描述】:
if <boolean> :
# do this
布尔值必须为 True 或 False。
那为什么
if "poi":
print "yes"
输出: 是的
我不明白为什么是打印,因为“poi”是真或假。
【问题讨论】:
标签: python
if <boolean> :
# do this
布尔值必须为 True 或 False。
那为什么
if "poi":
print "yes"
输出: 是的
我不明白为什么是打印,因为“poi”是真或假。
【问题讨论】:
标签: python
当表达式需要布尔值时,Python 会尽力评估表达式的“真实性”。
字符串的规则是空字符串被认为是False,非空字符串被认为是True。同样的规则也适用于其他容器,因此空字典或列表被视为False,具有一个或多个条目的字典或列表被视为True。
None 对象也被认为是错误的。
0 的数值被认为是假的(尽管'0' 的字符串值被认为是真)。
所有其他表达式都被视为True。
详细信息(包括用户定义类型如何指定真实性)可以在此处找到:http://docs.python.org/release/2.5.2/lib/truth.html。
【讨论】:
false。这与在用户定义的类上施加相同的规则非常接近(您必须故意从 __len__() 方法返回一些非直观的值,或者完全忽略它,以避免遵循相同的作为内置规则)。
'a' or 'b' 返回 'a' 而不是 True 感到困惑,请注意 and 和 or 是“短路操作符”和“使用时作为一般值而不是布尔值,短路运算符的返回值是最后评估的参数。”由于'a' 的计算结果为True,因此整个表达式必须为真,因此甚至不计算'b' 的真值。 docs.python.org/3.6/tutorial/…
在python中,除空字符串外的任何字符串默认为True
即,
if "MyString":
# this will print foo
print("foo")
if "":
# this will NOT print foo
print("foo")
【讨论】:
True”并不正确。 “在布尔上下文中评估为True”怎么样?
这里发生的是 Python 在if 之后对隐式bool() 构造函数 的补充,因为if 后面的任何内容都应该被解析为布尔值。在这种情况下,您的代码相当于
if bool("hello"):
print "yes"
根据 Python bool(x) 构造函数接受任何东西并根据以下情况决定真实性
0 是 False 其他都是 True
0.0 是 False 其他都是 True`[] 是 False 其他所有内容都是 True
{} 是 False 其他一切都是 True
() 是 False 其他都是 True
“" 是 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
【讨论】: