类的栈空间怎么如此快抛出异常?
import sys
class dynamic_regulation_recursion_limit:
def __init__(self, func):
self.func = func
self.Increased_limit = 1000
def __call__(self, *args, **kwargs):
while True:
try:
return self.func(*args, **kwargs)
except RecursionError:
print('x, y= ', *args)
print('stack= ', len(inspect.stack()))
print('self.recursionlimit= ', self.recursionlimit)
print()
self.recursionlimit = sys.getrecursionlimit() + self.Increased_limit
sys.setrecursionlimit(self.recursionlimit)
@dynamic_regulation_recursion_limit
def testadd(x, y):
if x==0:
print(y)
else:
return testadd(x-1, y+1)
testadd(999, 0)
运行打印出的结果很出乎我意料
x, y= 669 330
stack= 665
self.recursionlimit= 1000
x, y= 335 664
stack= 1333
self.recursionlimit= 2000
x, y= 2 997
stack= 1999
self.recursionlimit= 3000
**每次RecursionError 时,len(inspect.stack())显示都距离recursionlimit远着呢
怎么回事???**
def dynamic_regulation_recursion_limit(func):
def wrapper(*args, **kwargs):
while True:
try:
return func(*args, **kwargs)
except RecursionError:
print('x, y= ', *args)
print('stack= ', len(inspect.stack()))
print('self.recursionlimit= ', sys.getrecursionlimit())
print()
recursionlimit = 1000 + sys.getrecursionlimit()
sys.setrecursionlimit(recursionlimit)
return wrapper
我一开始写的函数型装饰器
结果是正常的
x, y= 503 496
stack= 997
self.recursionlimit= 1000
x, y= 3 996
stack= 1997
self.recursionlimit= 2000
改写成类装饰器
输出结果就不理解了
stack= 665
self.recursionlimit= 1000
stack= 1333
self.recursionlimit= 2000
stack= 1999
self.recursionlimit= 3000
一个规律,都是到限制值2/3时候抛出异常
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论