编程语言
首页 > 编程语言> > 为什么Python对可以嵌套的静态块的数量有限制?

为什么Python对可以嵌套的静态块的数量有限制?

作者:互联网

Python中静态嵌套块的数量限制为20个.
也就是说,为循环嵌套19将是正常的(虽然过度耗时; O(n ^ 19)是疯狂的),但嵌套20将失败:

SyntaxError: too many statically nested blocks

有这样限制的根本原因是什么?
有没有办法增加限额?

解决方法:

此限制不仅适用于for循环,也适用于所有其他控制流程块.嵌套控件流块数量的限制在code.h中定义,并带有一个名为CO_MAXBLOCKS的常量:

#define CO_MAXBLOCKS 20 /* Max static block nesting within a function */

此常量用于设置Python用于执行名为blockstack的异常和循环的堆栈的最大大小.此限制强加于所有框架对象,并显示在frameobject.h中:

int blockstack[CO_MAXBLOCKS];       /* Walking the 'finally' blocks */

此限制的最可能原因是在执行嵌套块时将内存使用保持在理智水平.它可能类似于the limit Python imposes on recursive calls.这个限制可以看作是在compile.c强制执行的:

if (c->u->u_nfblocks >= CO_MAXBLOCKS) {
    PyErr_SetString(PyExc_SyntaxError,
                    "too many statically nested blocks");
    return 0;
}

关于为什么Python有这个特定限制以及为什么它们无法摆脱它的更具体的答案是由Michael Hudson in a 2004 Python mailing list letter给出的:

Spot on. This has to do with the ‘blockstack’, very much an internal
detail to Python’s implementation. We’d like to get rid of it (not
because we want to let people write code with more than 20 nested for
loops

标签:nested-loops,python,language-implementation
来源: https://codeday.me/bug/20191004/1851477.html