A number smaller than negative infinity in python? [duplicate]

扶醉桌前 提交于 2019-12-20 02:05:36

问题


This is possible in python2:

None < float('-inf')

Also, it always returns

True

However, on python3, this throws

TypeError: unorderable types: NoneType() < int()

Why is None comparable to integers/floats with python2? Are there any benefits or applications to None being orderable in python2?


回答1:


First of all Python 2 allowed comparing all types of mixed types. This wart was fixed in Python 3 eventually.

CPython implementation detail: Objects of different types except numbers are ordered by their type names; objects of the same types that don’t support proper comparison are ordered by their address.

For None a quick decision was made by Guido and Tim Peters and it resulted in this commit in Python 2.1(emphasis mine):

Part of fixing that was removing some cases of "compare objects of different types by comparing the type name strings". Guido & I were both in the office at the time, and one said to the other: "what about None? Comparing that to other types via comparing the string 'None' doesn't make much sense." "Ya, OK ... how about changing None to - by default - comparing 'less than' objects of other types?" "Don't see why not - sure." "OK, done!

No more than 2 minutes of thought went into it. There was no intent to cater to any real use case here - the only intent was to pick some arbitrary-but-consistent rule that didn't suck quite as badly as pretending None was the string "None" ;-)



来源:https://stackoverflow.com/questions/45449718/a-number-smaller-than-negative-infinity-in-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!