python 中字符串的真值
- 2025-02-11 09:50:00
- admin 原创
- 45
问题描述:
if <boolean> :
# do this
布尔值必须是 True 或 False。
那为什么
if "poi":
print "yes"
输出:是
我不明白为什么要打印“是”,因为“poi”既不是真也不是假。
解决方案 1:
当表达式需要布尔值时,Python 将尽力评估表达式的“真实性”。
字符串的规则是,空字符串被视为False
,非空字符串被视为True
。其他容器也适用相同的规则,因此空字典或列表被视为False
,具有一个或多个条目的字典或列表被视为True
。
该None
对象也被认为是假的。
的数值0
被视为假(尽管的字符串值'0'
被视为真)。
所有其他表达均会被考虑True
。
详细信息(包括用户定义类型如何指定真实性)可以在这里找到: http: //docs.python.org/release/2.5.2/lib/truth.html。
解决方案 2:
在 python 中,除空字符串之外的任何字符串都默认为True
IE,
if "MyString":
# this will print foo
print("foo")
if "":
# this will NOT print foo
print("foo")
解决方案 3:
这里发生的事情是 Python在 之后补充了隐式bool()
构造函数if
,因为后面的任何内容if
都应该解析为布尔值。在这种情况下,您的代码相当于
if bool("hello"):
print "yes"
根据 Pythonbool(x)
构造函数接受任何内容,并根据以下情况确定真实性
如果 x 是整数,则只有
0
其他False
都是True
如果 x 是浮点数,则
0.0
其他False
一切都为真如果 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
解决方案 4:
在大多数编程语言中,非空字符串被视为“真”,这意味着它在布尔上下文中被视为等同于 True。这就是为什么在您的示例中:
if "poi":
print("yes")
在此代码中,poi 被视为真,因此输出为“是”
在布尔上下文中,0、False、None 和空字符串 "" 等值被视为“假”,这意味着它们被视为等同于 False。
即使“poi”与“true”不同,在布尔上下文中它仍被视为真。
如果您确实想进行真正的编码,那么您将需要将 poi 替换为 true。
if True:
print("yes")
这也会给你“是”的结果。