Python - 内存效率 - 范围
Python - memory efficiency - range
我正在寻找方法来使 MaxPower()
功能的以下最小代码更有效地使用我的代码和示例。
MaxPower()
的用途:对于整数 i
和 N_remainder
,到 return m
的最大值使得 i^m
除N_remainder
。
MaxPower()
仅在 factorise()
函数中调用,如果 i
除 N_remainder
目前,下面的链接代码对于要分解的数字具有以下结果(以标准形式编写):
- 1x10^8 - 工作正常。产生了两个结果数组并且是正确的
- 5x10^8 - 挂起 Linux & OS 完全没有反应。计算机需要硬重启。
- 1x10^9 - 在终端中给出内存错误。
Python 使用的版本是 Linux Mint 17 上的 2.74。
我目前正在学习python。
def MaxPower(i,N_remainder):
m=1
MxP=1
for n in range (2, N_remainder + 1):
b = i**n
a = N_remainder % b
if a==0:
m = m+1
else:
MxP = m
break
return MxP
自最初发布以来修改后的代码:
def MaxPower(i,N_remainder):
m=1
MxP=1
for n in xrange (2, N_remainder + 1):
b = pow(i,n)
a = N_remainder % b
if a==0:
m = m+1
else:
MxP = m
break
return MxP
我知道以下内容(自从新出现以来我还没有尝试过,目前我还没有尝试过);
- 可以在编译后的 C 代码中做更多工作 - 转换为 "list comprehension"
- 使用线程并确保每个线程在使用后都被删除。
Python 2 range
function 为给定范围内的每个数字创建一个列表,其中包含一个条目。整个列表需要存储在内存中,因此对于 N_remainder
的大值,它会变得非常大。
取而代之的是 xrange
函数,它的作用几乎相同。这使用常量内存,仅存储参数并仅在需要时计算每个值,并且在使用后不存储旧值。如果您将对 range
的调用替换为对 xrange
的调用,您的函数应该使用几乎恒定的内存。
请注意,如果 N_remainder + 1
对于 python int
来说太大了,xrange
函数将不起作用,但文档提供了替代方法。
不是内存问题,但您不需要显式调用 long
; Python 2 必要时自动转换为 long
类型。
我正在寻找方法来使 MaxPower()
功能的以下最小代码更有效地使用我的代码和示例。
MaxPower()
的用途:对于整数 i
和 N_remainder
,到 return m
的最大值使得 i^m
除N_remainder
。
MaxPower()
仅在 factorise()
函数中调用,如果 i
除 N_remainder
目前,下面的链接代码对于要分解的数字具有以下结果(以标准形式编写):
- 1x10^8 - 工作正常。产生了两个结果数组并且是正确的
- 5x10^8 - 挂起 Linux & OS 完全没有反应。计算机需要硬重启。
- 1x10^9 - 在终端中给出内存错误。
Python 使用的版本是 Linux Mint 17 上的 2.74。
我目前正在学习python。
def MaxPower(i,N_remainder):
m=1
MxP=1
for n in range (2, N_remainder + 1):
b = i**n
a = N_remainder % b
if a==0:
m = m+1
else:
MxP = m
break
return MxP
自最初发布以来修改后的代码:
def MaxPower(i,N_remainder):
m=1
MxP=1
for n in xrange (2, N_remainder + 1):
b = pow(i,n)
a = N_remainder % b
if a==0:
m = m+1
else:
MxP = m
break
return MxP
我知道以下内容(自从新出现以来我还没有尝试过,目前我还没有尝试过);
- 可以在编译后的 C 代码中做更多工作 - 转换为 "list comprehension"
- 使用线程并确保每个线程在使用后都被删除。
Python 2 range
function 为给定范围内的每个数字创建一个列表,其中包含一个条目。整个列表需要存储在内存中,因此对于 N_remainder
的大值,它会变得非常大。
取而代之的是 xrange
函数,它的作用几乎相同。这使用常量内存,仅存储参数并仅在需要时计算每个值,并且在使用后不存储旧值。如果您将对 range
的调用替换为对 xrange
的调用,您的函数应该使用几乎恒定的内存。
请注意,如果 N_remainder + 1
对于 python int
来说太大了,xrange
函数将不起作用,但文档提供了替代方法。
不是内存问题,但您不需要显式调用 long
; Python 2 必要时自动转换为 long
类型。