Python:有没有办法阻止从 int 到 long int 的自动转换发生?

2024-03-29

考虑这个例子:

>>> from sys import maxint
>>> type(maxint)
<type 'int'>
>>> print maxint
9223372036854775807
>>> type(maxint+2)
<type 'long'>
>>> print maxint+2
9223372036854775809
>>> type((maxint+2)+maxint)
<type 'long'>
>>> print ((maxint+2)+maxint)
18446744073709551616

Python 会自动推广 http://www.python.org/dev/peps/pep-0237/从一个int,在本例中是 python 的 64 位整数值(OS X,python 2.6.1)long任意精度的整数。尽管类型不相同,但它们很相似,并且 Python 允许使用常用的数字运算符。通常这很有用,例如能够在 32 位机器上使用需要 64 位值的代码。

然而,任意精度运算比本机 int 运算慢得多。例如:

>>> print maxint**maxint # execution so long it is essentially a crash

有没有办法阻止或禁止Python的自动升级int到Pythonlong?


所以你想抛弃“唯一正确的方法”并在溢出问题上复古。你傻。

C / C++ / C# / Java 风格的溢出没有什么好处。它不能可靠地引发错误情况 https://stackoverflow.com/questions/103654/why-dont-languages-raise-errors-on-integer-overflow-by-default。对于 C 和 C99,它是 ANSI 和 POSIX 中的“未定义行为”(C++ 要求模数返回),并且是已知的安全风险。你为什么想要这个?

The Python方法 http://docs.python.org/release/1.4/ref/ref5.html无缝溢出到 long 是更好的方法。我相信 Perl 6 也采用了同样的行为。

您可以使用十进制模块 http://docs.python.org/library/decimal.html获得更多有限溢出:

>>> from decimal import *
>>> from sys import maxint
>>> getcontext()
Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999999, Emax=999999999, capitals=1,
flags=[], traps=[DivisionByZero, Overflow, InvalidOperation])

>>> d=Decimal(maxint)
>>> d
Decimal('9223372036854775807')
>>> e=Decimal(maxint)
>>> f=d**e
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/decimal.py", line 2225, in __pow__
    ans = ans._fix(context)
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/decimal.py", line 1589, in _fix
    return context._raise_error(Overflow, 'above Emax', self._sign)
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/decimal.py", line 3680, in _raise_error
    raise error(explanation)
decimal.Overflow: above Emax

您可以使用 Decimal 类设置精度和边界条件,并且溢出几乎是立即的。您可以设置陷阱的内容。您可以设置最大值和最小值。真的——还有什么比这更好的呢? (说实话,我不知道相对速度,但我怀疑它比 numby 快,但显然比本机整数慢......)

对于您的图像处理的特定问题,这听起来像是考虑某种形式的自然应用程序饱和算术 http://en.wikipedia.org/wiki/Saturated_arithmetic。您还可以考虑,如果 32 算术发生溢出,请在明显情况下检查操作数:pow、**、*。你可能会考虑重载运算符 http://www.brpreiss.com/books/opus7/html/page596.html并检查您不想要的条件。

如果小数、饱和或重载运算符不起作用 --你可以写一个扩展 http://docs.python.org/extending/。如果你想抛弃Python的溢出方式来复古的话,天堂会帮助你的......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python:有没有办法阻止从 int 到 long int 的自动转换发生? 的相关文章

  • Mysql InnoDB性能优化和索引

    我有 2 个数据库 需要链接两个大表之间的信息 每个表超过 300 万个条目 并且不断增长 第一个数据库有一个表 pages 用于存储有关网页的各种信息 并包括每个页面的 URL URL 列是 varchar 512 并且没有索引 第二个数
  • 用于浮点和整数验证的 JavaScript

    我尝试创建一个 javascript 函数validate integer values从文本框 验证它的最佳方法是什么 以便仅integer and float值可以接受吗 数字验证所需的 javascript 函数 remove whi
  • 如何矢量化 3D Numpy 数组

    我有一个 3D numpy 数组 例如a np zeros 100 100 20 我想对每个执行操作x y涉及所有元素的位置z轴 结果存储在一个数组中 例如b np zeros 100 100 在同一个对应的x y位置 现在我使用 for
  • CPU缓存性能。存储未命中与加载未命中

    我使用 perf 作为基本事件计数器 我正在开发一个遭受数据缓存存储未命中的程序 其中比例高达80 我知道缓存原则上是如何工作的 它会在各种未命中情况下从内存加载 并在需要时从缓存中删除数据 我不明白的是 存储未命中和加载未命中之间有什么区
  • OpenCL 矩阵乘法应该更快?

    我正在尝试学习如何使 GPU 优化 OpenCL 内核 我以使用本地内存中的方形图块进行矩阵乘法为例 然而在最好的情况下 我只得到了约 10 倍的加速 约 50 Gflops 与 numpy dot 相比 5 Gflops 它使用的是 BL
  • 使用 pysam.TabixFile 注释读取的 Python 脚本中的处理速度振荡

    最初的问题 我正在用 python 3 5 编写一个生物信息学脚本 它解析一个大的 排序和索引的 bam https samtools github io hts specs SAMv1 pdf表示在基因组上对齐的测序读数的文件 将基因组信
  • 在 :before 和 :after 上为每个元素声明“content”属性是否会带来巨大的性能问题?

    您可能知道 如果您愿意使用 before and or after伪元素没有在其中设置文本 您仍然需要声明content 使它们可见 我刚刚将以下内容添加到我的基本样式表中 before after content 所以我不必再进一步声明了
  • SQLite3中确保唯一行的有效方法

    我在用SQLite3 http www sqlite org 在我的一个项目中 我需要确保插入表中的行相对于某些列的组合而言是唯一的 在大多数情况下 插入的行在这方面会有所不同 但如果匹配 新行必须更新 替换现有行 显而易见的解决方案是使用
  • 在保持元素/样式/脚本关系的同时缩小整个目录?

    目前是否存在可以缩小整个项目目录的解决方案 更重要的是 是否存在任何可以缩短类名 id 并在所有文档中保持一致的解决方案 可以扭转这个局面的东西 索引 html div class fooBar div 样式 css fooBar Comm
  • CSS动画表现

    I have a small hobby project in which I try to build a matrix rain See demo http www audenaerde org matrix html这里 或这个JSF
  • 通过列表搜索

    我一直在尝试定义一个函数 给定一个整数列表和一个整数 n 返回一个布尔值 指示 n 是否在列表中恰好出现一次 我有这个 但它不起作用 我无法弄清楚 once a gt a gt Bool gt Bool filter filter p x
  • 并行框架和避免错误共享

    最近 我回答了一个关于优化可能的并行方法来生成任意基数的每个排列的问题 我发布了类似的答案并行化 实施不佳代码块列表 有人几乎立即指出了这一点 这几乎肯定会给你带来错误的共享 并且可能会慢很多倍 归功于gjvdkamp https stac
  • 如何提高非持久 CGI 进程中的 Moose 性能?

    Moose http search cpan org dist Moose 是一个很棒的对象框架 问题在于 连同它的依赖项一起 它是very大的 我们的分析表明 在我们的平台上 仅加载 Moose 就会在非持久性 CGI 应用程序脚本上产生
  • Linq:Entity Framework Core 中的 Join 与 Include/ThenInlude

    我正在开发一个使用 SQL Server 和 EF Core v3 的项目 我有 4 个彼此相关的表 这是我的表格方案 我针对这些表编写了 2 个 Linq 查询 其中一个使用像这样的连接 var result from emailTemp
  • 缓慢的 data.frame 行分配

    我正在使用 RMongoDB 需要用查询的值填充空的 data frame 结果相当长 大约有 200 万个文档 行 当我进行性能测试时 我发现将值写入行的时间随着数据帧的维度的增加而增加 也许这是一个众所周知的问题 而我是最后一个注意到它
  • 为什么在比较范围内的数字时会在汇编代码中发生分支?

    我正在读书this https stackoverflow com questions 17095324 fastest way in c to determine if an integer is between two integers
  • Python 比 C++ 更快、更轻吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 提高我的脚本性能 Google Sheets 脚本

    我创建了一个函数 每当我运行 AppendRow 脚本时 AY 列中没有点 的每一行 包含我想要的每个信息 列的数组从该表将被转移到我的主表 其中有13k rows atm 通常 每天大约有 20 40 行被粘贴到第一个工作表中 此脚本会自
  • 最快的 SQL Server 协议?

    最快的 SQL Server 连接协议是什么 相关 哪些协议可以远程使用 哪些可以本地使用 这会影响最快协议的选择吗 VIA 这是最快的 SQL 协议 它在专用硬件上运行 并用于执行 SQL Server 基准测试记录 请注意 VIA 协议
  • Python 3 urllib 与请求性能

    我正在使用 python 3 5 并且正在检查 urllib 模块与 requests 模块的性能 我用 python 编写了两个客户端 第一个使用 urllib 模块 第二个使用 request 模块 它们都生成二进制数据 我将其发送到基

随机推荐

  • 带有 @MappedSuperclass 的 Hibernate TABLE_PER_CLASS 不会创建 UNION 查询

    我正在尝试创建一系列对象 这些对象全部存储在单独的表中 但所有这些表上都有一组共同的字段 我希望 Hibernate 对所有这些表进行 UNION 但不包括超类作为表 当我用以下方式注释超类时 MappedSuperclass Inheri
  • 插入、删除、最大值 O(1)

    有人能告诉我哪种数据结构支持 O 1 的插入 删除 最大操作吗 这是一个经典的面试问题 通常是这样提出的 设计一个类似堆栈的数据结构 在 O 1 时间内执行压入 弹出和最小 或最大 操作 没有空间限制 答案是 您使用两个堆栈 主堆栈和最小
  • 在 n 维数组上使用 scipy interpn 和 meshgrid

    我正在尝试翻译大型 4D 数组的 Matlab interpn 插值 但 Matlab 和 Python 之间的公式存在显着差异 几年前有一个很好的问题 答案here https stackoverflow com questions 39
  • 如何删除R中第n个分隔符之后的所有内容?

    我有这个向量myvec 我想删除第二个 之后的所有内容并得到结果 如何删除第 n 个 之后的字符串 myvec lt c chr2 213403244 213403244 G T snp chr7 55240586 55240586 T G
  • JA017:无法查找已启动的 hadoop 作业 ID

    当我在Hue的Oozie编辑器中提交mapreduce作业时 如何解决这个问题 JA017 无法查找与操作 0000009 150711083342968 oozie root W mapreduce f660 关联的已启动 hadoop
  • WordPress 数据库中的附加表

    我正在使用 WordPress 我想为我的网站开发更多服务 我正在考虑在 WordPress 数据库中创建新表 这种方法行得通吗 我不希望 WordPress 在更新等时删除我的表 这些服务将位于单独的页面上 它们不会是 WordPress
  • 如何在每次数据变化时刷新kivy RecycleView?

    我正在尝试创建一个简单的考勤应用程序 程序启动时 所有标签都在取消选择列表中 预期行为 当选择任何标签时 数据将移动到所选列表 现在所选标签位于连接列表的末尾 然后 RecycleView 刷新以显示此更改 所以我设法使数据从一个列表移动到
  • 如何使用GTK开发类似Eclipse的界面?

    我想使用 GTKMM 编写一个桌面应用程序 我希望界面由不同的面板组成 就像在 Eclipse 中一样 您有项目资源管理器 控制台 属性等 您应该能够拖动面板来更改其位置 关闭它们并弹出它们 不确定是否可以弹出 Eclipse 中的面板 但
  • 有人知道针对低内存使用进行优化的 java.util.Map 实现吗?

    我查看了通常的地方 apache commons google 但找不到一个 它应该是开源的 几乎正在寻找一个基于链接列表的 用例是 10 000 张地图 不一定有很多值 它不需要按比例放大 因为当它变得太大时我可以转换它 一些数字 大小使
  • RecyclerView SnapHelper 无法显示第一个/最后一个项目

    我有一个RecyclerView它附加到一个LinearSnapHelper捕捉到中心项目 当我滚动到第一个或最后一个项目时 这些项目不再完全可见 此问题如下图所示 怎么解决呢 一个迟到的答案只是用Java代码编写的 Create Cust
  • 如何将 Angular 应用程序部署到 Heroku 并保持为 PWA? [复制]

    这个问题在这里已经有答案了 总结一下问题 我正在尝试将我的 Angular 6 应用程序部署到 Heroku 并保留渐进式 Web 应用程序功能 Heroku 上的最终构建没有 Service Worker 背景 我已经在 Angular
  • Jodatime 是否有方法获取自某个较旧日期以来的月份和日期?

    我想确切地知道某个较早的日期距离今天有多少个月和天 可能是几年 有没有办法做到这一点 我知道如何获得月份的差异 我知道如何获得天数的差异 但我无法获得月份和日期 Ex 旧 2013 03 04 现在 2013 04 17 所以我寻找的结果类
  • Mingw-w64“无法下载repository.txt”错误

    我正在尝试在 Windows 7 中安装 MinGW w64 但我不断收到错误 无法下载repository txt 我已阅读有关此问题的多个线程并下载了多个 exe 文件 但它们都不适合我 我的 MATLAB R2016a 存在使用附加组
  • Java Logger:创建以轮转数+.log为后缀的文件

    我正在使用 java util logging 包中的 Java Logger 这就是我当前创建记录器的方式 FileHandler fileHandler new FileHandler filePath 5242880 5 true f
  • Angular2访问父组件的@input值

    我正在尝试使用 ComponentResolver 和 ViewContainerRef 服务动态加载组件 子组件加载正常并且模板已渲染 但是我想访问子组件内父级 字段 和 值 的输入 任何帮助将非常感激 父组件 import Compon
  • 如何在 Scala 中使用 >=> ?

    我正在尝试使用 gt gt Kleisli 箭头 在 Scala 中 据我了解 它由返回单子的函数组成 现在我正在尝试如下 scala gt val f i Int gt Some i 1 f Int gt Some Int
  • JFormattedTextField 未正确清除

    我正在做这个作业 制作一个解决数独的程序 我有一个带有 SudokuTextBox 网格扩展 JFormattedTextField 的面板 我有一个 MaskFormatter 因此每个文本框只接受一个整数 然后在我的面板中 当释放按键时
  • 如何跨 AppDomain 边界传递 CancellationToken?

    我有一个命令对象 根据请求队列中的请求执行工作 此特定命令将在子应用程序域中执行其工作 在子应用程序域中执行其工作的一部分涉及阻塞 ConcurrentQueue 操作 例如 添加或获取 我需要能够通过请求队列将中止信号传播到子应用程序域
  • ASP.NET MVC 3 中 ModelState.IsValid 的限制

    我总是用ModelState IsValid用于检查我在服务器端正确验证的所有模型验证 但我认为使用它有一个限制 例如我定义一个Remote验证属性 但如果我禁用javascript then ModelState IsValid不勾选Re
  • Python:有没有办法阻止从 int 到 long int 的自动转换发生?

    考虑这个例子 gt gt gt from sys import maxint gt gt gt type maxint