Python 我在哪里可以看到”的数量;“额外递归”;为从递归限制恢复而保留的堆栈?
这个问题是关于如何理解python内部的 以代码为例:Python 我在哪里可以看到”的数量;“额外递归”;为从递归限制恢复而保留的堆栈?,python,recursion,internals,Python,Recursion,Internals,这个问题是关于如何理解python内部的 以代码为例: import sys sys.setrecursionlimit(100) def myfunc(n): print(n, sys.getrecursionlimit()) try: myfunc(n+1) except Exception as e1: print('Cannot proceed') print(e1) try:
import sys
sys.setrecursionlimit(100)
def myfunc(n):
print(n, sys.getrecursionlimit())
try:
myfunc(n+1)
except Exception as e1:
print('Cannot proceed')
print(e1)
try:
myfunc(n+1)
except Exception as e2:
print('That went wrong')
print(e2)
myfunc(0)
警告-此代码用于python内部研究,并导致python崩溃。导致实际的致命Python错误:无法从堆栈溢出中恢复。
结果是:
....
....
92 100
93 100
94 100
95 100
Cannot proceed
maximum recursion depth exceeded while calling a Python object
95 100
96 100
97 100
98 100
99 100
100 100
101 100
102 100
103 100
104 100
105 100
106 100
107 100
108 100
109 100
110 100
111 100
112 100
113 100
114 100
115 100
116 100
117 100
118 100
119 100
120 100
121 100
122 100
123 100
124 100
125 100
126 100
127 100
128 100
129 100
130 100
131 100
132 100
133 100
134 100
135 100
136 100
137 100
138 100
139 100
140 100
141 100
142 100
143 100
144 100
Fatal Python error: Cannot recover from stack overflow.
Current thread 0x0000379c (most recent call first):
File "....test.py", line 7 in myfunc
File "....test.py", line 9 in myfunc
....
....
这就是我大致想象的情况:
我的问题:我是否可以使用与
sys.getrecursionlimit()
)等价的东西来查看某个系统变量中的“额外递归”堆栈的数量?我认为,在这种情况下,之所以可以超过100,是因为第二次递归使用了不同的起始点。据我所知,堆栈溢出错误只是内存不足的一种情况——在运行更多、更少或更高质量的计算机上尝试它,我希望它会有所不同。我认为,在这种情况下,之所以可以超过100,是因为第二次递归使用了不同的起始点。据我所知,堆栈溢出错误只是内存不足的一种情况——在运行更多或更少的东西时,或者在质量更高的计算机上尝试它,我希望它会有所不同。