拥有比较布尔和弦乐的设施是什么意思?为什么结果“True”是针对表达式“a”>而给出的。真或“a”>错误。我想知道的是有什么用途或者语言的开发者通过提供这样的功能对Python用户有什么期望?
答案 0 :(得分:3)
由于Python是一种动态类型语言,因此解释器无法知道它在运行时比较布尔值和字符串。换句话说,给定:
if "string" == True:
print "Doesn't print"
当解释器看到此代码时,有两个选项:
将"string" == True
评估为False(或"string" == False
)
抛出TypeError
例外
我真的看不出有理由选择2,因为如果两个值的类型不同,那么它们显然是不相等的,所以if语句中的代码不应该运行。
就不同类型之间的>
和<
而言,请参阅Why is ''>0 True in Python?:从该答案:
允许订单比较的原始设计动机 任意对象是允许排序异类列表 - 有用的是,这会使所有字符串彼此相邻 字母顺序,以及数字中彼此相邻的所有数字 顺序,虽然两个街区中的哪一个首先得到保证 用语言。例如,这允许仅获取唯一项目 O(N log N)中的任何列表(即使是一个带有不可清洗物品的列表) 最坏情况时间
请参阅其余部分的链接。
答案 1 :(得分:2)
python中的容器,包括列表,元组,字典,集合和字符串(包含字符),当它们包含一个或多个元素时始终为True
,当它们为空时始终为False
。< / p>
基本上,这用于在做某事之前检查容器是否有任何元素。例如:
food_in_the_plate = []
if food_in_the_plate:
eat(food_in_the_plate)
else:
grab_food()
答案 2 :(得分:1)
是的,它确实让事情变得混乱。但它可能很有用。例如
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"
这将打印&#34;得到A&#34;但没有&#34;得到C&#34;因为got_c
的值为None
。
有很多这样的情况,将非布尔表达式评估为布尔值意味着更短的代码。
答案 3 :(得分:1)
if p == "" or p == None or p == False:
p = 'This language could be more Pythonic'
P = P or 'Nicely done'
答案 4 :(得分:0)
无论你将一个带有布尔值的字符串与(使用==
)进行比较,你总会得到一个错误:
>>> 'a' == True
False
>>> 'a' == False
False
>>> '' == False
False
>>> '' == True
False
>>> 'hello' == True
False
>>> 'True' == True
False