long integer python_Python:有没有办法保持从int到long int的自动转换?

Python比其他脚本语言更强类型.例如,在Perl中:

perl -E '$c=5; $d="6"; say $c+$d' #prints 11

但是在Python中:

>>> c="6"

>>> d=5

>>> print c+d

Traceback (most recent call last):

File "", line 1, in

TypeError: cannot concatenate 'str' and 'int' objects

Perl将检查字符串并转换为数字,并且+ - / * **运算符按预期使用数字.PHP类似.

Python用于+连接字符串,因此尝试的操作c+d失败,因为c是一个字符串,d是一个int.Python 比Perl 具有更强的数字类型感.好的 - 我可以解决这个问题.

但考虑一下:

>>> from sys import maxint

>>> type(maxint)

>>> print maxint

9223372036854775807

>>> type(maxint+2)

>>> print maxint+2

9223372036854775809

>>> type((maxint+2)+maxint)

>>> print ((maxint+2)+maxint)

18446744073709551616

现在Python 将从一个int 自动推进,在这种情况下,它是64位长(OS X,python 2.6.1)到python long int,它具有任意精度.即使类型不同,它们也是相似的,Python允许使用通常的数字运算符.通常这很有帮助.例如,它有助于平滑32位和64位之间的差异.

从转换int到long是单向的:

>>> type((maxint+2)-2)

转换完成后,该变量的所有操作现在都以任意精度完成.任意精度操作比原生int操作慢几个数量级.在我正在处理的脚本上,我会有一些执行是快速的,其他因为这个延长到几个小时.考虑:

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

所以我的问题是:有没有办法打败或不允许将Python自动推广int到Python long?

编辑,跟进:

我收到了几条评论,形式为'为什么你想要C风格溢出行为?' 问题是这段特殊的代码在C和Perl(带use int)中的32位上运行正常,带有C的溢出行为.尝试将此代码移植到Python失败了.Python的不同溢出行为最终成为问题的(部分).代码中有许多不同的习语(C,Perl,某些python)混合在一起(和那些评论混合在一起),所以它具有挑战性.

基本上,正在进行的图像分析是基于盘的高通滤波器以执行类似的图像比较.部分高通滤波器具有两个大多项式的基于整数的乘法.溢出本质上是一种"不关心,它很大......"的逻辑,因此结果与基于C的溢出一样.因此,使用具有O(n 2)时间的Horner规则是一种浪费,因为较大的多项式只是"大" - 粗略正义形式的carot-top饱和算法.

将基于循环的多项式乘法更改为FFT的形式可能要快得多.对于Horner的规则多项式乘法,FFT以接近线性的时间与O(n 2)运行.从光盘到内存也将加速这一进程.图像并不是非常大,但原始代码是在它们被认为是"巨大!!!"的时候编写的.代码所有者还没准备好丢弃他心爱的代码,所以我们会看到.他的'正确答案'可能只是保留Perl或C,如果他想要那个代码.

谢谢你的回答.我不知道Python的十进制模块,这似乎最接近我的要求 - 即使在这种情况下还有其他问题需要解决!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值