【问题标题】:Understanding how the "is" operator works int Python for result from function了解 \"is\" 运算符如何在 Python 中处理函数结果
【发布时间】:2022-11-25 00:54:46
【问题描述】:

例如我们有这段代码。

x = 1
y = 1
print(x is y) # TRUE
print(id(x), id(y))
y = pow(10, 30, 10**30-1) # 1

print(type(y))
print(x, y, x is y) # FALSE

它的回报:

True
140516304938720 140516304938720
<class 'int'>
1 1 False

最后的结果是错误的.请帮我理解为什么会这样?函数的结果是 1,不是字面意思,python 中的哪个缓存?

如果我们改成

y = pow(1, 10)

它将返回“真”。

【问题讨论】:

  • 如文档 (docs.python.org/3.8/reference/expressions.html#comparisons) 中所述,is 比较对象标识。 ==比较对象是否相等。具有相同值的两个对象是相等的,但它们具有不同的id(object)。小整数不是动态分配的,它们是从预分配对象池中获取的。这就是为什么小的相等整数总是相同的。这是一个可能随时更改的实施细节。
  • 要点:如果要测试是否相等,请不要使用is。这就是== 的用途。
  • 马蒂亚斯说的。在两种情况下使用 is:针对 None 进行测试,如 if value is None 或检查“相同对象”而不是“相等对象”,这种情况很少见但会发生。如果您知道像 C 这样的编译语言,这就像比较一个值的地址而不是值本身。
  • 重新分配后尝试打印出id(y)

标签: python function syntax operators literals


【解决方案1】:

“是”运算符检查两个项目是否是同一个对象。 在您的示例中,它返回 False,因为 x 与 y 不是同一个对象,即使它们具有相同的内容。 要了解更多信息,我建议您查看此链接。 https://www.w3schools.com/python/python_operators.asp

我的解释是否有帮助,或者您需要更多说明?

【讨论】:

    猜你喜欢
    • 2012-11-18
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-17
    相关资源
    最近更新 更多