中高级知识,有一定深度,慎入
python万物皆对象, hashable object都有_hash__和__eq__方法
请看如下:
cpython 3.9.10
λ ipython
In [1]: int(1) is 1
<>:1: SyntaxWarning: "is" with a literal. Did you mean "=="?
<ipython-input-1-8d1eaec914a0>:1: SyntaxWarning: "is" with a literal. Did you mean "=="?
int(1) is 1
Out[1]: True
In [2]: int(1).__hash__()
Out[2]: 1
In [3]: hash(int(1))
Out[3]: 1
In [4]: hash(1)
Out[4]: 1
In [5]: 1.__hash__()
Input In [5]
1.__hash__()
^
SyntaxError: invalid syntax
In [6]: id(int(1))
Out[6]: 1700832831792
In [7]: id(1)
Out[7]: 1700832831792
为什么会出现语法错误?据我了解,int(1)和1都是同一integer object.
因为
1.
是一个数。所以
1.__hash__()
会被 parse 成1.
__hash__()
,于是中间缺了一个.
,所以 Invalid syntax。你可以试试
1..__hash__()
,(1).__hash__()