- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
所以我有一个衬垫:
import decimal; h = decimal.Decimal('100.0'); (h > .01, h < .01, h.__gt__(.01), h.__lt__(.01))
它所做的只是创建一个包含 100.0 的 Decimal 对象,并以各种方式将其与 .01( float )进行比较。
我的结果是:
>>> import decimal; h = decimal.Decimal('100.0'); (h > .01, h < .01, h.__gt__(.01), h.__lt__(.01))
(False, True, NotImplemented, NotImplemented)
来自文档:“丰富的比较方法可能会返回单例 NotImplemented 如果它没有为给定的参数对实现操作。”
所以这里真的有三个问题。
当丰富的比较方法返回 NotImplemented 时,会发生什么?为什么它不引发异常?
当它获得 NotImplemented 时,为什么它在第一种情况下返回 False,而在第二种情况下返回 True? bool(NotImplemented) 应该是一个常量。
它是否简单地回退到 id() 检查?似乎没有(或者是,但倒退):
(忽略这一行,格式搞砸了,这个可以修复)
from decimal import Decimal
h = Decimal('100.0')
f = .01
print h < f, id(h) < id(f)
print h > f, id(h) > id(f)
我的结果测试于:
Python 2.6.4 (r264:75708, Oct 26 2009, 08:23:19) [MSC v.1500 32 bit (Intel)] on win32
Python 2.6.5 (r265:79096, Mar 19 2010, 21:48:26) [MSC v.1500 32 bit (Intel)] on win32
编辑:关于订购的文档:http://docs.python.org/library/stdtypes.html#comparisons
最佳答案
When a rich comparison method returns NotImplemented, what happens? Why doesn't it raise an Exception?
它委托(delegate)给相反的方法(例如,__lt__
,当运算符是 >>
)比较中的 RHS(float
)——在这种情况下,它也返回 NotImplemented —— 并最终退回到 Python 2 用于异构比较的愚蠢的旧规则。
When it gets NotImplemented, why does it return False in the first case, and True in the second? bool(NotImplemented) should be a constant.
不涉及 bool
——因为比较的双方都返回 NotImplemented(由于故意设计决定不支持小数和 float 之间的任何操作),愚蠢的旧规则被用作后备(并且在最近的版本中将比较类型,而不是实例——因此 id
与它无关)。在 Python 3 中,这种不受支持的异构比较会失败,并引发明显的异常,但在 Python 2 中,为了向后兼容,这是不可能发生的——它必须在 Python 2 的整个生命周期中以愚蠢的方式运行。
引入向后不兼容来修复现在被认为是设计错误的问题,例如关于 het 比较的这一部分,是引入 Python 3 的核心原因。只要您坚持使用 Python 2(例如因为它有更多的第三方扩展等),您需要微笑并忍受这些仅在 Python 3 中修复的缺陷。
关于Python 的丰富比较行为(或者,当 Decimal ('100.0' 时)< .01),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2834953/
我是 Python 编程的新手,最近我一直在学习数据类型的某些方面。正如我所读,decimal.Decimal() 方法创建了一个小数对象; decimal.Decimal.from_float()
这是我今天在 filmmaster.com: 遇到的错误 PicklingError: Can't pickle : it's not the same object as decimal.Decim
简单的问题 - 为什么 Decimal 类型定义这些常量?何必呢? 我正在寻找一个原因,为什么这是由语言定义的,而不是可能的用途或对编译器的影响。为什么首先把它放在那里?编译器可以像 Decimal.
我在用 Python 编码为 JSON 时遇到问题,特别是 decimal.Decimal 值。我正在使用它为 Google App Engine 应用程序输出 JSON。 为了避免 Python 中
我在 Django 项目中有一些 python 代码曾经可以正常工作。托管该项目的服务器丢失了,我不得不将代码复制到新服务器上。现在,我收到一个似乎毫无意义的错误。 我的一个 python 文件中包含
我发现生成具有特定数量 的 decimal.Decimal 数字的最佳方法 significant figures 是用来初始化下面的变量 kluge 的: import decimal THIS_I
我在应用空合并运算符时遇到以下错误。 private decimal _currentImpulseId; // ... later on used in public property getter
我想使用 decimal.Decimal 对转换后的数字字符串进行算术运算。无论转换后的数字字符串有多少小数,我都希望返回有两位小数。 在这种特殊情况下,为什么两位小数精度返回一位小数,为什么三位小数
我想使用 decimal.Decimal 对转换后的数字字符串进行算术运算。无论转换后的数字字符串有多少小数,我都希望返回有两位小数。 在这种特殊情况下,为什么两位小数精度返回一位小数,为什么三位小数
是什么导致 sum 始终为 null? object[] data = new object[] { 2.2M, 3m, 1, "string", true,
我似乎失去了很多 float 的精度。 例如我需要求解一个矩阵: 4.0x -2.0y 1.0z =11.0 1.0x +5.0y -3.0z =-6.0 2.0x +2.0y +5.0z =7.0
这个问题在这里已经有了答案: Why python decimal.Decimal precision differs with equable args? (2 个答案) 关闭 5 年前。 我知道
当我尝试转换 Task 时出现此错误至 decimal : Could not load file or assembly 'EntityFramework, Version=5.0.0.0, Cul
我听到有人说在 C# 中,大写十进制比小写十进制使用更多的内存,因为小写十进制被解析为小写十进制并且需要内存。 这是真的吗? 最佳答案 没有。 decimal 只是 System.Decimal 的别
我有一个对象,它是 dict、list、常规数据类型和 decimal.Decimal 的嵌套组合。我想用 PyMongo 将这个对象插入到 MongoDB 中。 PyMongo 拒绝插入 Decim
sdr 是我的 sqldatareader,我想检查小数类型的 curPrice 值是否为空。 inrec.curPrice = sdr.IsDBNull(7) ? (十进制?)空:sdr.GetDe
变量 'a' 的类型可以是 - int/float/decimal.Decimal(但不是字符串) 我想检查它是否是 decimal.Decimal 类型。 以下作品: import decimal
我正在使用一个在函数调用中使用一些十进制类型参数的库。但是我有 numpy.int32 类型变量。当我将它传递给函数调用时,出现以下错误: TypeError: conversion from num
考虑以下代码: public class DecimalWrapper { public static implicit operator DecimalWrapper
考虑以下代码: public class DecimalWrapper { public static implicit operator DecimalWrapper
我是一名优秀的程序员,十分优秀!