我在计算十万位数!,正好是456574。我是这样做的:
import math
math.factorial(100000)
我把它的输出作为参数复制粘贴到str()
并调用len()
(这个数字很大,所以不能合理地粘贴到这里):
print len(str(<copy-pasted output from math.factorial()>))
计算数字的数目花了一些时间!然后我在引号之间粘贴了相同的输出:
print len('<same copy-pasted output>')
这一次的结果是瞬间的。你知道吗
有人能解释一下:str()
方法比' '
方法花费的时间更长吗,因为它们都表示字符串?你知道吗
将一个456574位数字转换成一个字符串并非没有成本;这是一个大字符串,将近50万个字符几乎是半兆字节的内存(在OS X系统上,使用Python 2.7):
Python需要一点时间来生成该字符串,操作系统需要分配所需的内存:
因此,平均需要2.5秒才能将这些数字转换成字符串。如果您实际复制并粘贴了所有这些数字(而不是像我那样使用变量),那么您还需要添加更多的时间,因为Python必须解析int文本,并在转换为字符串之前首先生成integer对象。你知道吗
您无法将其与长度为1(
'p'
)的字符串进行比较,后者只占用几个字节的内存(在我的系统中为38字节)。你知道吗len(str(result))
首先从result
创建一个字符串,然后计算它的长度。你知道吗另一方面,
len('result')
在引号中已经有了这个字符串,所以在运行代码之前基本上已经把它转换成了一个字符串。你知道吗我猜对大数做
str()
需要很多时间。你知道吗print len('100000!')
不会实际计算阶乘,而只计算字符串长度'100000!'
,这比实际计算阶乘快得多相关问题 更多 >
编程相关推荐