同事考我这个问题,我答不上来,特来求助
>>> 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-05-29 19:06:37 +08:00 via iPhone a=None 的时候是这样的 |
2 stamaimer 2018-05-29 19:08:01 +08:00 via iPhone 定义__equals__方法 |
3 ebingtel 2018-05-29 19:10:30 +08:00 @lifeishort @hjq98765 Python 2.7 >>> = 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-05-29 19:11:24 +08:00 via Android math.nan |
5 zhongyiio 2018-05-29 19:13:38 +08:00 |
6 lifeishort 2018-05-29 19:18:30 +08:00 via iPhone @ebingtel 我记错了,感谢指正 |
![]() | 7 cxyfreedom 2018-05-29 19:35:59 +08:00 via iPhone 自带的话 math.nan ,或者第三方库 numpy.NaN |
![]() | 8 flowfire 2018-05-29 19:39:10 +08:00 via iPhone NaN 试一下? |
![]() | 9 jtsai 2018-05-29 19:43:19 +08:00 via Android 内存空间的问题 你 id () 一下 |
![]() | 10 SingeeKing PRO ![]() 正常情况下是没有的。 原因:is 是判断是不是一个( id 值相同),== 是判断是否相等(__eq__ 返回 True ) 按照常理,id 相同必相等 但是确实可以。。。 ![]() |
![]() | 11 whoami9894 2018-05-29 20:02:44 +08:00 via Android ```python a = float("NaN") print(a==a) print(a is a) ``` |
![]() | 12 pkookp8 2018-05-29 20:12:24 +08:00 via Android @SingeeKing 这思路可以。。。 |
![]() | 13 codeeer 2018-05-29 20:18:55 +08:00 via iPhone 引用类型 |
![]() | 14 sammo 2018-05-29 20:20:49 +08:00 via Android C++ 就没这么多破事 |
![]() | 15 codehz 2018-05-29 23:37:10 +08:00 @sammo #14 C++ 浮点数 NaN 也是自身不相等的,只要是按照 IEEE 标准设计的浮点数,都要满足 NaN != NaN |
![]() | 16 phithon 2018-05-29 23:52:31 +08:00 ![]() |
![]() | 17 phithon 2018-05-29 23:53:12 +08:00 想了个反的,哈 |
18 goinghugh 2018-05-30 10:02:28 +08:00 `is`判断是否是同一个对象,即 2 个的引用是否指向同一个对象; `==`返回的是`__eq__`的返回值。  在题主的问题里,只要是指向同一个对象,a is a 都是为 True,a==a 可以通过重写`__eq__`方法达成目的 |
19 GeruzoniAnsasu 2018-05-30 11:40:13 +08:00 |
20 lifeishort 2018-05-31 08:01:22 +08:00 via iPhone 把 js 的 NAN 和 python 搞混了,尴尬的一楼。 |
21 gaMe5hGLc86G4U52 2018-06-01 09:16:32 +08:00 mark |