【问题标题】:Why does a lowercase string and string.lowercase returns False [duplicate]为什么小写字符串和 string.lowercase 返回 False [重复]
【发布时间】:2014-10-10 09:16:43
【问题描述】:
s="wall"
d="WALL".lower()

s is d 返回False。 s 和 d 具有相同的字符串。但为什么它返回 False?

【问题讨论】:

标签: python


【解决方案1】:

通过使用is,您正在比较他们的身份,如果您尝试比较他们的值的print s == d,您将得到正确的结果。

查看此帖子了解更多详情:String comparison in Python: is vs. ==

【讨论】:

    【解决方案2】:

    使用== 比较对象是否相等。使用is 检查两个变量是否引用完全相同的对象。这里sd 指的是两个具有相同内容的不同字符串对象,因此== 是正确使用的运算符。

    【讨论】:

      【解决方案3】:

      == 测试是否相等。 a == b 测试ab 是否具有相同的值。

      is 测试身份——也就是说,a is b 测试ab 实际上是否是同一个对象。除了测试is None,不要使用它。

      【讨论】:

        【解决方案4】:

        您似乎误解了is 运算符。如果所讨论的两个变量位于相同的内存位置,则此运算符返回 true。在这种情况下,虽然您有两个变量都存储值“wall”,但它们仍然是不同的,因为每个变量都有自己的单词副本。

        为了正确检查字符串是否相等,您应该使用== 运算符,即值相等检查。

        【讨论】:

          【解决方案5】:

          "is" 关键字比较对象 ID,而不仅仅是值是否相等。 它与许多其他语言中的 '===' 运算符不同。 'is' 等价于:

          id(s) == id(d)
          

          还有一些更有趣的案例。例如(在 CPython 中):`

          a = 5
          b = 5
          a is b # equals to True
          

          但是:

          c = 1200
          d = 1200
          c is d # equals to False
          

          结论是:不要使用'is'来比较值,因为它会导致混淆。

          【讨论】:

          • 很好的答案,但最好省略最后一部分或解释它。它的方式可能会让初学者感到困惑。
          猜你喜欢
          • 2017-12-14
          • 1970-01-01
          • 2016-06-20
          • 1970-01-01
          • 2018-05-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-02-29
          相关资源
          最近更新 更多