【问题标题】:Why Does Python Compares Booleans and Strings? What does that mean? [closed]为什么 Python 比较布尔值和字符串?那是什么意思? [关闭]
【发布时间】:2013-11-07 09:13:01
【问题描述】:

拥有比较布尔值和字符串的功能是什么意思?为什么对表达式“a”> True 或“a”> False 给出结果“True”。我想知道的是那里有什么用途,或者该语言的开发人员通过提供 Python 用户对 Python 的期望是什么有这样的功能吗?

【问题讨论】:

  • 你的意思是"a" == True,两个=,顺便说一句v = "a"bool(v) == True更有意义测试v是否指向空字符串
  • 您的问题还不清楚。也许一些代码示例会有所帮助。
  • 请澄清您的具体问题或添加其他详细信息以准确突出您的需要。正如目前所写的那样,很难准确地说出你在问什么。表现出一些努力。展示这项工作的一个好方法是包含您迄今为止编写的代码、示例输入(如果有的话)、预期输出和您实际获得的输出(控制台输出、堆栈跟踪、编译器错误 - 不管是什么适用的)。您提供的详细信息越多,您可能收到的答案就越多。
  • 你发布的比较对我来说是False(使用 Python 2.7.2)。
  • 我以这种方式提出了上述问题“具有比较布尔值和字符串的功能是什么意思?为什么对表达式“a”给出结果“True”> True或 "a" > False"。它已被编辑

标签: python string types compare boolean


【解决方案1】:

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

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

当解释器看到这段代码时,有两种选择:

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

  2. 抛出TypeError异常

我真的看不出选择 2 的充分理由,因为如果两个值的类型不同,那么它们显然是不相等的,所以不应该运行 if 语句中的代码。

关于不同类型之间的><,请参见Why is ''>0 True in Python?:来自该答案:

允许订单比较的原始设计动机 任意对象是为了允许对异构列表进行排序—— 有用的是,这会将所有字符串彼此相邻 按字母顺序,并且所有数字在数字中彼此相邻 顺序,尽管不能保证两个块中哪个先出现 由语言。例如,这允许只获取唯一的项目 在 O(N log N) 中的任何列表中(甚至包含不可散列项的列表) 最坏情况时间

其他内容见链接。

【讨论】:

    【解决方案2】:

    python中的容器,包括列表、元组、字典、集合和字符串(包含字符),当它们包含一个或多个元素时总是True,当它们为空时总是False

    基本上,这用于在做某事之前检查容器是否有任何元素。示例:

    food_in_the_plate = []
    if food_in_the_plate:
        eat(food_in_the_plate)
    else:
        grab_food()
    

    【讨论】:

      【解决方案3】:

      是的,它确实使事情有些混乱。但它可能很有用。例如

      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

      在很多情况下,将非布尔表达式评估为布尔值意味着代码更短。

      【讨论】:

        【解决方案4】:
        if p == "" or p == None or p == False:
            p = 'This language could be more Pythonic'
        
        P = P or 'Nicely done'
        

        【讨论】:

        • 如果您真的关心空字符串NoneFalse 之间的区别,那么值得添加反例。
        【解决方案5】:

        无论您将字符串与布尔值进行比较(使用==),您总是会得到一个错误:

        >>> 'a' == True
        False
        >>> 'a' == False
        False
        >>> '' == False
        False
        >>> '' == True
        False
        >>> 'hello' == True
        False
        >>> 'True' == True
        False
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-12-23
          • 2017-02-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多