【问题标题】:Could comparison between different types be useful in python?不同类型之间的比较在 python 中有用吗?
【发布时间】:2020-09-22 17:55:06
【问题描述】:

我正在尝试检测潜在的错误或重构两个对象之间比较操作的建议。

据我所知,我知道有两种类型的简单对象布尔相等比较:==is

== 表示两个对象的是否相同。例如:

A=5
B=6
C=A
A==B --> returns False
A==C -> returns True

L1=[1,2,3]
L2=L1
L1==L2 --> returns True
L2=L1[:]
L1==L2 --> returns True

is 表示两个对象是否指向内存中的相同位置。将==is 交换的相同示例产生:

A=5
B=6
C=A
A is B --> returns False
A is C -> returns True

L1=[1,2,3]
L2=L1
L1 is L2 --> returns True
L2=L1[:]
L1 is L2 --> returns **False**

最后一个比较返回 False,因为尽管 L1 和 L2 具有相同的值,但 L2 仅存储在 L1 中的数据的副本,这意味着 L1 和 L2 指向不同的list 对象。

我的问题是: 对于这 2 种比较类型,您能想到一个示例,比较 不同 类型的对象对您的程序有用,即返回 `True. 你会说比较两种不同类型的代码很可能是一个错误吗?

我正在使用Python3

【问题讨论】:

  • 比较不同的类型离弱类型只有很短的路程,你只需要看看 JavaScript 的恶作剧就知道为什么这通常是个坏主意
  • 好吧,在 JavaScript 中 '0'==0 是 True :)
  • 另外... 1.0 == 1 几乎任何语言
  • 确实存在两个对象比较相等的情况。最自然的例子可能是代表一个数字的两种不同类型。另一种自然情况是,当您有来自不同类的两个对象时,其中一个对象来自基类,另一个来自派生类,等等。您可能在一个类中也有一个 __eq__ 方法,该方法与任何其他类相同第二个对象,只要第二个对象具有与第一个对象相同的属性值,无论其类型如何。最后,这取决于您决定“平等”的含义。
  • @Orb 重载 is 没有意义,it is not possible。运算符is 比较对象的身份(如果它们是内存中的相同对象)。像这样想,两个双胞胎在某些方面(例如外表)可能相同,但他们不是同一个人。

标签: python comparison-operators


【解决方案1】:

L1 is L2 返回 false,因为 L2 是列表 L1 的副本,而不是列表本身。

【讨论】:

  • 我在我的问题中写了它。我的问题是 not 为什么最后一行返回 False。
猜你喜欢
  • 1970-01-01
  • 2021-07-31
  • 2018-01-21
  • 1970-01-01
  • 2021-06-11
  • 2017-11-06
  • 1970-01-01
  • 1970-01-01
  • 2012-10-10
相关资源
最近更新 更多