【问题标题】:Number is int returning False [duplicate]数字是 int 返回 False [重复]
【发布时间】:2017-09-25 15:21:34
【问题描述】:

当我这样做时:

>>> 1 is int
False

它返回False,即使我希望它返回True。尝试对变量进行类型检查时会发生相同的行为。

>>> a = 1
>>> a is int
False

我知道这与使用 is 而不是 isinstancetype 有关。

>>> type(1)
<class 'int'>
>>> isinstance(1, int)
True
>>> type(1) is int
True

有人能解释一下为什么在这种情况下使用is 不起作用吗? 语义上对我来说很有意义,它将返回 True 而不是 False

【问题讨论】:

  • 您可能应该阅读is 运算符。它肯定不会像你认为的那样做。
  • 这个问题实际上是关于类是 Python 中的一等对象,而不是关于 is 运算符本身的问题,imo。
  • @Tobias 不确定,我相信 OP 将声明 1 is int 解读为“1 是整数”,这表明对 is 所做的事情存在误解。
  • @Tobias 这是关于 is 用途的巨大误解。
  • ...这是一个非常非常好的理由不按你的意愿解释它。

标签: python python-3.x


【解决方案1】:

1 是一个intint 是一个类型

它们不能相等也不能是同一个对象,所以is 总是介于这两者之间的Falseis 检查对象是否实际上是同一个对象)。

所以这是一个误解is 检查的问题。正确的方法确实是像你一样使用isinstance

【讨论】:

  • 明白。我的问题是1 is int 成为True语义上 是有意义的,但事实并非如此。
  • 是的,自然语言与 python ;) 与经典相同的问题:if a == 1 or 2:,我们每周都会看到
  • @Remolten:这对英文单词“is”的语义有意义,但对 Python 运算符is 的语义没有意义。
  • @Jean-FrançoisFabre: == 不以引用比较开始(这是最后的回退),也不涉及类型比较。您可以使用x = float('nan'); x != x 之类的东西,其中同一个对象与自身比较不相等,或者1 == 1.0,其中不同类型的对象比较相等。
  • @user2357112 完全!你说得对。我会删除我的评论。但是如果值不同,引用如何相等(最终后备)?该死的x = float('nan')例子很好!!
猜你喜欢
  • 2020-07-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多