具有比较布尔值和字符串的功能是什么意思?为什么对表达式“a”> True 或“a”> False 给出结果“True”。我想知道的是那里有什么用处,或者该语言的开发人员通过提供 Python 用户对 Python 的期望是什么这样的功能?
5 回答
由于 Python 是一种动态类型语言,因此解释器直到运行时才知道它正在比较布尔值和字符串。换句话说,给定:
if "string" == True:
print "Doesn't print"
当解释器看到这段代码时,有两种选择:
使
"string" == True
评估为假(或"string" == False
)抛出
TypeError
异常
而且我真的看不出选择 2 的充分理由,因为如果两个值的类型不同,那么它们显然不相等,因此不应该运行 if 语句中的代码。
关于不同类型>
和<
不同类型之间,请参阅Python 中为什么 ''>0 True?: 从那个答案:
允许对任意对象进行顺序比较的最初设计动机是允许对异构列表进行排序——这很有用,这将使所有字符串按字母顺序彼此相邻,所有数字按数字顺序彼此相邻,尽管哪个语言不能保证两个块先出现。例如,这允许在 O(N log N) 最坏情况时间内仅获取任何列表中的唯一项(即使是具有不可散列项的项)
其余的请参见链接。
python中的容器,包括列表、元组、字典、集合和字符串(包含字符),总是True
在它们包含一个或多个元素时,并且总是False
在它们为空时。
基本上,这用于在做某事之前检查容器是否有任何元素。例子:
food_in_the_plate = []
if food_in_the_plate:
eat(food_in_the_plate)
else:
grab_food()
if p == "" or p == None or p == False:
p = 'This language could be more Pythonic'
P = P or 'Nicely done'
是的,它确实使事情有些混乱。但它可能很有用。例如
x = {"a": "AA", "b": "BB"}
got_a = x.get("a")
print got_a
>> "AA"
got_b = x.get("b")
print got_b
>> "BB"
got_c = x.get("c")
print got_c
>> None
然后,您可以测试这些值是否为None
:
if got_a:
print "Got A"
if got_c:
print "Got C"
这将打印“Got A”而不是“Got C”,因为 的got_c
值为None
。
在很多情况下,将非布尔表达式评估为布尔值意味着更短的代码。
无论您将带有布尔值的字符串与(使用==
)进行什么比较,您总是会得到一个错误的结果:
>>> 'a' == True
False
>>> 'a' == False
False
>>> '' == False
False
>>> '' == True
False
>>> 'hello' == True
False
>>> 'True' == True
False