为什么Python会比较布尔和字符串?那是什么意思?

时间:2013-10-28 14:31:30

标签: python string types compare boolean

拥有比较布尔和弦乐的设施是什么意思?为什么结果“True”是针对表达式“a”>而给出的。真或“a”>错误。我想知道的是有什么用途或者语言的开发者通过提供这样的功能对Python用户有什么期望?

5 个答案:

答案 0 :(得分:3)

由于Python是一种动态类型语言,因此解释器无法知道它在运行时比较布尔值和字符串。换句话说,给定:

if "string" == True: 
    print "Doesn't print"

当解释器看到此代码时,有两个选项:

  1. "string" == True评估为False(或"string" == False

  2. 抛出TypeError例外

  3. 我真的看不出有理由选择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