假设运行此程序的计算机具有无限的内存,我想知道在运行以下内容时Python会在何处中断:
为了好玩,我在Python中实现了超级运算符作为
基本上,该库只是一个递归的右折叠操作,对于 n=1 的基本情况有一个特殊的定义。最初,
然而,事实证明,你无法创建比C long的大小更大的列表。这是一个有趣的限制,大多数Python程序员在日常工作中可能不会遇到,它启发了以下问题。
为了好玩,我在Python中实现了超级运算符作为
hyperop
模块。其中一个例子是Graham数:def GrahamsNumber():
# This may take awhile...
g = 4
for n in range(1,64+1):
g = hyperop(g+2)(3,3)
return g
类hyperop
的简化版本如下:
def __init__(self, n):
self.n = n
self.lower = hyperop(n - 1)
def _repeat(self, a, b):
if self.n == 1:
yield a
i = 1
while True:
yield a
if i == b:
break
i += 1
def __call__(self, a, b):
return reduce(lambda x, y: self.lower(y, x), self._repeat(a, b))
基本上,该库只是一个递归的右折叠操作,对于 n=1 的基本情况有一个特殊的定义。最初,
__call__
被优美地压缩为:return reduce(lambda x, y: self.lower(y, x), [a,]*b)
然而,事实证明,你无法创建比C long的大小更大的列表。这是一个有趣的限制,大多数Python程序员在日常工作中可能不会遇到,它启发了以下问题。
在哪里(如果有的话),
hyperop
计算将因为 Python 技术限制(具体来说是 2.7.10)而失败?