- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
非常不言自明(我在 Windows 上):
>>> import sys, numpy
>>> a = numpy.int_(sys.maxint)
>>> int(a).__class__
<type 'long'>
>>> int(int(a)).__class__
<type 'int'>
为什么调用 int
一次得到一个 long
,而调用它两次得到一个 int
?
这是错误还是功能?
最佳答案
这个问题特定于 Numpy 和 Python 2。在 Python 3 中没有单独的 int
和 long
类型。
该行为的发生是由于 numpy 中的一个差一错误。 int(x)
用一个参数转换 x
调用电话号码 PyNumber_Int(x)
. PyNumber_Int
然后专门取path for int
subclasses , 作为 int64
由 numpy.int_
返回是 int
的子类:
m = o->ob_type->tp_as_number;
if (m && m->nb_int) { /* This should include subclasses of int */
/* Classic classes always take this branch. */
PyObject *res = m->nb_int(o);
if (res && (!PyInt_Check(res) && !PyLong_Check(res))) {
PyErr_Format(PyExc_TypeError,
"__int__ returned non-int (type %.200s)",
res->ob_type->tp_name);
Py_DECREF(res);
return NULL;
}
return res;
}
现在,此代码调用 a->ob_type->tp_as_number->nb_int
,在 numpy/core/src/umath/scalarmath.c.src 中实现.这是为不同类型参数化的代码的位置;这个是<typename>_int
用于填充 nb_int
的方法方法插槽。它有以下关闭一个 if
那里:
if(LONG_MIN < x && x < LONG_MAX)
return PyInt_FromLong(x);
两个运算符都应该是<=
反而。与 <
那里,既不LONG_MIN
也不LONG_MAX
通过条件,它们反而被转换成 PyLong
在 line 1432 :
return @func@(x);
与 @func@
被 PyLong_FromLongLong
取代在 int_
的情况下.因此,long(sys.maxint)
被退回。
现在,作为 sys.maxint
仍由 int
表示, int(long(sys.maxint))
返回 int
;同样int(sys.maxint + 1)
返回 long
.
关于python - 为什么 int(maxint) 给出的是 long,而 int(int(maxint)) 给出的是 int?这是 NumPy 错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44155560/
为什么 sys.maxint < (sys.maxint - 100 + 0.01) 在 Python 中? 最佳答案 这可能是由于非常大的浮点值的精度损失。 (添加 0.01 将右侧转换为 floa
非常不言自明(我在 Windows 上): >>> import sys, numpy >>> a = numpy.int_(sys.maxint) >>> int(a).__class__ >>>
我有一个项目组,其中所有 Win32 程序都具有相同的 ..\PatchLibs 搜索路径。此文件夹包含已修补的 System.Win.Ctrl.pas,其中包含: {$IFDEF WIN32} fu
情况 在处理 coding kata 之后我终于得到了适用于我的小测试用例的算法。 才发现它没有大规模工作,时间不是问题,但数字的大小是问题。 在其中一个测试用例的计算中,我需要执行以下计算。 var
在尝试打印对象的 retainCount 后,我得到 2147483647。为什么会得到这样的结果?应该是 1,不是吗? NSString *myStr = [NSString new]; NSU
我有一些代码可以将一些存储为字符串的时间戳转换为日期时间对象,并且今天注意到当它转换具有大于最大 int 的 int 时间戳值的日期时出现异常。 datetime.datetime.fromtimes
定义最大整数变量时出现错误: overflow in expression; result is 2147483647 with type 'int' [-Winteger-overflow] 代码中
据我所知,十进制和十六进制只是(比方说)int 的表示。 这意味着如果我定义一个整数 x 我应该能够将 x 打印为: 一个小数:printf("%d", x); 十六进制:printf("%x", x
我正在尝试使用 Python 3.7 运行以下代码: import sys print(sys.maxint) 但是我得到一个错误: D:\Python3.7\python.exe "D:/PyCha
我正在使用 Eventlog.Entries (c# .NET 4.0) 读取应用程序事件日志以获取 EventLogEntry 对象并使用它们进行处理。当新事件写入事件日志时,EventLogEnt
我一直在尝试找出如何表示最大整数,并且我已经阅读过使用 "sys.maxint"。但是,在 Python 3 中,当我调用它时,我得到: AttributeError: module 'object'
我在一个 2.5gb 的文件中迭代超过 80m 行,以创建每行开始位置的偏移量列表。内存按预期缓慢增加,直到我达到 40m 行左右,然后在 3-5 秒内迅速增加 1.5gb,然后由于内存不足导致进程退
我对系统架构不是很了解,刚刚开始学习Python。 在一个教程视频中提到,在解释器中运行 sys.maxint 将返回可用的最大整数。 还提到2147483647是对应32位系统的整数。这是我运行 s
我正在尝试从 0 迭代到 sys.maxint 但出现“MemoryError”。我应该怎么做? 这是简单的代码片段。 for i in range(sys.maxint): a = 1 错误:回
在 64 位 Debian Linux 6 上: Python 2.6.6 (r266:84292, Dec 26 2010, 22:31:48) [GCC 4.4.5] on linux2 Type
例如,SQL Server 会警告您还是直接死掉? 最佳答案 当 IDENTITY 列溢出时,SQL Server 2005 将抛出以下错误。 Server: Msg 8115, Level 16,
我是一名优秀的程序员,十分优秀!