将是运营商身份使用测试。
我想知道,如果is
运营商和id()
函数调用任何__magic__
方法,方式==
调用__eq__
。
我有一些有趣的结帐__hash__
:
class Foo(object):
def __hash__(self):
return random.randint(0, 2 ** 32)
a = Foo()
b = {}
for i in range(5000):
b[a] = i
考虑一下dictb
和…的价值b[a]
的每个后续查找
d[a]
都是aKeyError
或随机整数。
但随着对特殊方法的文档状态
[ x 的默认实现 。
__hash__
()返回id(x)。
因此,有 是 只是周围的其他方式两者之间的关系,但。
我在这里和这里已经看到了许多问题)已经帮助了许多困惑的人,但是我找不到这个问题的答案。is``id
不,is
是直接指针比较,id
只是将转换为的对象地址返回long
。
来自ceval.c
:
case PyCmp_IS:
res = (v == w);
break;
case PyCmp_IS_NOT:
res = (v != w);
break;
v
和w
这里简单PyObject *
。
来自bltinmodule.c
:
static PyObject *
builtin_id(PyObject *self, PyObject *v)
{
return PyLong_FromVoidPtr(v);
}
PyDoc_STRVAR(id_doc,
"id(object) -> integer\n\
\n\
Return the identity of an object. This is guaranteed to be unique among\n\
simultaneously existing objects. (Hint: it's the object's memory address.)");
问题内容: 操作员如何确定两个对象是否相同?它是如何工作的?我找不到记录。 问题答案: 从文档中: 每个对象都有一个标识,一个类型和一个值。一旦创建了对象,其身份就永远不会改变。您可能会认为它是对象在内存中的地址。“ is”运算符比较两个对象的身份;id()函数返回一个表示其身份的整数(当前实现为其地址)。 这似乎表明它在比较参数的内存地址,尽管它说“您可能将其视为对象在内存中的地址”这一事实可能
问题内容: 该运营商不匹配变量的值,但这些实例本身。 到底是什么意思 我声明了两个变量,并在两个变量中分配了相同的值,但是当我使用运算符时,它返回。 我需要澄清。这是我的代码。 问题答案: 您误解了操作员的测试内容。它测试两个变量是否指向同一个对象,而不是两个变量具有相同的值。 从操作员文档中: 运算符is和is not对象标识测试:当且仅当和y是相同对象时,才为。 改用运算符: 打印True。x
问题内容: 我注意到我可以使用运算符比较所有本机数据类型(整数,字符串,布尔值,浮点数等),还可以比较包含本机数据类型的列表,元组,集合和字典。在这些情况下,操作员将检查两个对象是否相等。但是在某些其他情况下(试图比较我创建的类的实例),该运算符只是检查两个变量是否引用同一对象(因此在这些情况下,该运算符等效于该运算符) 我的问题是:什么时候操作员不只是比较身份? 编辑:我正在使用Python 3
问题内容: 我对对象使用开关盒有疑问: 例如:我的问题可以用Java复制: 如何使用实施? 问题答案: 这是子类型多态性有帮助的典型方案。请执行下列操作 然后,你可以简单的调用上。 如果你不能随意更改,和,则可以应用访问者模式来实现相同目的。
问题内容: 这是我代表三角形的自定义类。我试着写代码,查看是否,以及大于0,这将意味着我有角,角,角。 在下面,您将看到检查A和B的代码,但是当我使用它时,它可以正常工作。我相信我没有正确使用。有任何想法吗?这是我的称呼方式: 问题答案: 您应该写: “ ”是按位运算符,不适合布尔运算。在Python中,“ ”的等效项是“和”。 检查所需内容的一种较短方法是使用“ in”运算符: 您可以使用“ i
问题内容: 我最近了解到,“%”符号用于计算Python中整数的余数。但是我无法确定是否还有其他运算符或方法来计算Python中的百分比。 就像使用“ /”会给您商数一样,如果仅对整数之一使用浮点数,它实际上会像传统除法一样为您提供答案。那么有没有一种方法可以计算出百分比呢? 问题答案: 在Python中没有这样的运算符,但是自己实现是很简单的。在计算实践中,百分比几乎不像模数有用,所以我认为没有