文件读取速度快(<;1s):with open('number.txt') as f:
data = f.read()
将一个3000万位的字符串转换为整数,这很慢:
^{pr2}$
如果将数字存储为原始的大端或低位二进制数据,则int.from_bytes(data,'big')要快得多。在
如果我的数学计算正确(注意_在Python的交互式解释器中表示“最后一行的答案”):>>> import math
>>> math.log(10)/math.log(2) # Number of bits to represent a base 10 digit.
3.3219280948873626
>>> 30000000*_ # Number of bits to represent 30M-digit #.
99657842.84662087
>>> _/8 # Number of bytes to represent 30M-digit #.
12457230.35582761 # Only ~12MB so file will be smaller :^)
>>> import os
>>> data=os.urandom(12457231) # Generate some random bytes
>>> z=int.from_bytes(data,'big') # Convert to integer (<1s)
99657848
>>> math.log10(z) # number of base-10 digits in number.
30000001.50818886
编辑:仅供参考,我的数学不正确,但我修正了它。感谢您投了10张赞成票,恕不另行通知:^)