2

好的,我试图在 python 上进行一些非常大的评估 - 大约 10^(10^120) - 然后我意识到这是非常巨大的。无论如何,我随后回落到 10**10**5 和 10**10**6。检查两者的时差让我发现了这个有点奇怪的发现,我认为这是一种低效率的发现。

结果是,当我尝试时cProfile.run("x=10**10**6"),它花了0.3s40scProfile.run("print 10**10**6")

然后我尝试x= 10**10**6了几乎没有时间但此后每次我解释 xx然后是enter)都需要很长时间(我想是40秒)。所以,我假设每次我解释x它都会重新计算整个值。

所以我的问题是:这不是非常低效吗?假设我在模块中声明了一些变量,x= 10**10每次我引用python 解释器都会一遍又一遍地x计算值?10**10

血淋淋的细节将不胜感激。

4

2 回答 2

10

Python 可以使用二进制计算非常大的数字,但是要将其转换回可以显示的数字需要大量工作。

例如:(以及很多欧拉项目所要求的)-

比如说,所有数字的总和是多少2 ** 32768

Python 可以使用 BigNum 将结果计算为一个非常直接的数字,但只要你这样做:

sum(int(c) for c in str(my_big_number)) # ouch - that's a lot of digits to produce and store

这就是当您键入(然后按 Enter)变量名/打印变量名时发生的情况,它正在执行转换。

于 2012-07-06T22:12:45.090 回答
7

每次打印时都不会重新计算该值,您看到的长时间延迟是将大数字转换为字符串以进行显示的成本。

于 2012-07-06T22:14:38.737 回答