同事考我这个问题,我答不上来,特来求助
>>> a is a
True
>>> a == a
False
同事给出的答案是:numpy.nan和float("NaN"),试了一下确实是这样,2和3都支持
math.nan是python3的特性,python2不支持
感谢 @roy2220 @cxyfreedom @flowfire @whoami9894 提供正确答案!
@stamaimer @ebingtel @zhongyiio @SingeeKing @goinghugh 几位用魔法方法开挂不算哈。。。
不过作为小白还是学到了新东西,python原来还可以这么玩![捂脸]
感谢几位提供思路!
1
lifeishort 2018 年 5 月 29 日 via iPhone
a=None 的时候是这样的
|
2
stamaimer 2018 年 5 月 29 日 via iPhone
定义__equals__方法
|
3
ebingtel 2018 年 5 月 29 日
@lifeishort @hjq98765
Python 2.7 >>> a = None >>> None is None True >>> None == None True >>> True == True True >>> class A(object): ... def __eq__(self, a): ... return self is not a ... >>> b = A() >>> b is b True >>> b ==b False |
4
roy2220 2018 年 5 月 29 日 via Android
math.nan
|
5
zhongyiio 2018 年 5 月 29 日
|
6
lifeishort 2018 年 5 月 29 日 via iPhone
@ebingtel
我记错了,感谢指正 |
7
cxyfreedom 2018 年 5 月 29 日 via iPhone
自带的话 math.nan ,或者第三方库 numpy.NaN
|
8
flowfire 2018 年 5 月 29 日 via iPhone
NaN 试一下?
|
9
jtsai 2018 年 5 月 29 日 via Android
内存空间的问题 你 id () 一下
|
10
SingeeKing PRO 正常情况下是没有的。
原因:is 是判断是不是一个( id 值相同),== 是判断是否相等(__eq__ 返回 True ) 按照常理,id 相同必相等 但是确实可以。。。 |
11
whoami9894 2018 年 5 月 29 日 via Android
```python
a = float("NaN") print(a==a) print(a is a) ``` |
12
pkookp8 2018 年 5 月 29 日 via Android
@SingeeKing 这思路可以。。。
|
13
codeeer 2018 年 5 月 29 日 via iPhone
引用类型
|
14
sammo 2018 年 5 月 29 日 via Android
C++ 就没这么多破事
|
16
phithon 2018 年 5 月 29 日
|
17
phithon 2018 年 5 月 29 日
想了个反的,哈
|
18
goinghugh 2018 年 5 月 30 日
`is`判断是否是同一个对象,即 2 个的引用是否指向同一个对象;
`==`返回的是`__eq__`的返回值。 在题主的问题里,只要是指向同一个对象,a is a 都是为 True,a==a 可以通过重写`__eq__`方法达成目的 |
19
GeruzoniAnsasu 2018 年 5 月 30 日
|
20
lifeishort 2018 年 5 月 31 日 via iPhone
把 js 的 NAN 和 python 搞混了,尴尬的一楼。
|
21
gaMe5hGLc86G4U52 2018 年 6 月 1 日
mark
|