【问题标题】:Python: False vs 0Python:假与 0
【发布时间】:2014-12-11 19:52:47
【问题描述】:

在 PHP 中,您使用 === 符号来测试 TRUEFALSE10 不同。

例如if FALSE == 0 返回TRUEif FALSE === 0 返回FALSE。因此,在以 0 为基数进行字符串搜索时,如果所讨论的子字符串的位置正好在开头,您会得到 0,PHP 可以将其与 FALSE 区分开来。

有没有办法在 Python 中做到这一点?

【问题讨论】:

  • 可以区分,但通常不必这样做。 False 几乎在所有方面都像 0(和 True1)。例如True + True + True + False == 3
  • 一个很好的观点......虽然有些情况你确实想区分
  • @mgilson 我通常不需要区分。但是,在这种情况下,我希望验证一个十六进制颜色字符串。所以我首先检查字符串开头的#符号,然后检查长度。我希望能够在他们传入颜色值时告诉用户它是无效的,而不是等到稍后类尝试使用它时。

标签: python int boolean


【解决方案1】:

在 Python 中,

  • is 运算符测试身份(False is False0 is not False)。

  • == 运算符,用于测试逻辑相等性(因此是 0 == False)。

从技术上讲,这些都不完全等同于 PHP 的 ===,后者比较逻辑相等和类型 - 在 Python 中,这将是 a == b and type(a) is type(b)

is== 之间的一些其他区别:

可变类型字面量

  • {} == {},但 {} is not {}(列表和其他可变类型也是如此)
  • 但是,如果是 a = {},那么 a is a(因为在这种情况下,它是对同一实例的引用)

字符串

  • "a"*255 is not "a"*255",但在大多数实现中 "a"*20 is "a"*20,由于 Python 如何处理字符串实习。但是,不能保证这种行为,在这种情况下您可能不应该使用is"a"*255 == "a"*255 并且几乎总是适合使用的比较。

数字

  • 12345 is 12345 但在大多数实现中 12345 is not 12345 + 1 - 1 类似。您几乎总是希望在这些情况下使用相等。

【讨论】:

  • 我一直使用isis not 来表示无。我从来没有想过用它来判断真假。呃。谢谢,这对我有用。
【解决方案2】:
if something is False:

是你应该做的

if something is None:

也可以

道德是使用is ...(尽管你应该从不使用something is 123457,或类似的)

关于为什么你不应该对整数和事物执行此操作,请参阅http://ideone.com/iKmWCn

【讨论】:

    【解决方案3】:

    Python 中x === y 的严格等价物是type(x) is type(y) and x == y。你真的不想这样做,因为 Python 是鸭子类型的。如果一个对象有合适的方法或属性,那么你不必太担心它的实际类型。

    如果您要检查特定的唯一对象,例如(TrueFalseNone 或类),那么您应该使用 isis not。例如:x is True

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-06
      • 2011-09-22
      • 1970-01-01
      • 2018-05-01
      • 1970-01-01
      • 2014-07-31
      • 2016-08-25
      • 1970-01-01
      相关资源
      最近更新 更多