【问题标题】:Behaviour of "is" keyword in python?python中“is”关键字的行为?
【发布时间】:2020-04-01 16:14:37
【问题描述】:

为什么下面的代码会产生:

False
False
False

而不是:False True False

def foo(el):
    return (el is 0.0)

seq=[0,0.0,False]
for el in seq:
    print( foo(el) )

【问题讨论】:

  • 我刚刚运行了程序,得到了“False True False”。您能否显示输出或改写问题。

标签: python function equals


【解决方案1】:

python中的is关键字用于测试两个变量是否引用同一个对象。如果两个变量引用同一个对象,则返回True,否则返回False .

例如,考虑名为Aclass

class A:
    pass

案例 1:

x = A() #--> create instance of class A
y = A() #--> create instance of class A

>>> x is y
>>> False

案例 2:

x = A() #--> create instance of class A
y = x #--> here y refers to the instance of x
>>> x is y
>>> True

如果两个变量引用相同的内存位置,则基本上两个变量引用相同的对象。你可以使用python中的内置函数id()来检查变量的身份,该函数返回对象的身份(对象在内存中的地址)。

  • 案例 1id(x) 不等于 id(y) 因此 x is y 返回 False
  • 案例 2 中,id(x) 等于 id(y),这意味着 xy 都指向内存中的同一个对象,因此 @987654339 @返回 True

现在来回答你的问题,

def foo(el):
    return (el is 0.0)

在函数fooel is 0.0 中返回False,因为el0.0 两个实体中的每一个都引用内存中的不同位置。您可以通过比较返回Falseid(el) == id(0.0) 来验证这一事实。

【讨论】:

  • 好的,谢谢!为什么 0.0 是唯一 id 不同的元素?如果 return 语句是 --> return (el is 0) 或 return (el is False),你会得到 True
  • 这是因为 python 的内部实现声明 具有非重叠生命周期的两个对象可能具有相同的 id() 值。 例如。如果你声明了两个变量a = 2b = 2,那么在这种情况下id(a) == id(b) 将返回true。但是当你声明两个变量a = 2.5b = 2.5 然后id(a) == id(b) 返回False 因为python 将它们编译为两个不同的对象,它完全基于python 的内部实现。有关 python 中浮点行为的更多详细信息,请参阅post
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多