par*_*ier 5 python comparison logic types operators
这在某种程度上与我的问题有关为什么在Python中''> 0 True?
在Python 2.6.4中:
>> Decimal('0') > 9999.0
True
Run Code Online (Sandbox Code Playgroud)
从我对原始问题的回答中我了解到,在Python 2.x中比较不同类型的对象时,类型按其名称排序.但在这种情况下:
>> type(Decimal('0')).__name__ > type(9999.0).__name__
False
Run Code Online (Sandbox Code Playgroud)
那为什么Decimal('0') > 9999.0 == True呢?
更新:我通常在Ubuntu上工作(Linux 2.6.31-20-generic#57-Ubuntu SMP Mon Feb 8 09:05:19 UTC 2010 i686 GNU/Linux,Python 2.6.4(r264:75706,2009年12月7日,18 :45:15)[关于linux2的[GCC 4.4.1]).在Windows上(winX上的WinXP Professional SP3,Python 2.6.4(r264:75706,2009年11月3日,13:23:17)[MSC v.1500 32位(英特尔)]我的原始语句的工作方式不同:
>> Decimal('0') > 9999.0
False
Run Code Online (Sandbox Code Playgroud)
我现在更加困惑.% - (
Cha*_*iam 12
因为十进制模块不会与除long,int和Decimal之外的任何类型进行比较.在所有其他情况下,十进制静默地返回"不是它知道对象的东西"更大.您可以在decimal.py的_convert_other()函数中看到此行为
愚蠢,愚蠢的十进制课.
哦,请参阅http://bugs.python.org/issue2531.
那么,这是发生了什么:
Decimal.__gt__比较函数.Decimal.__gt__调用Decimal._convert_other将传入的float转换为Decimal.Decimal._convert_other不了解花车.倒在实施Decimal._convert_other
明确的检查long,int和Decimal类型的操作数.是的,这是一个错误,因为意外的库实现会导致进一步的错误.做正确的事情甚至只是做一件事情会更干净TypeException.相反,它NotImplemented通过将Decimal与例如Employee记录的哈希进行比较而发生的情况相同.我们到了吗?