您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python函数中最大参数个数是多少?

Python函数中最大参数个数是多少?

在Python 3.7和更高版本中,没有限制。这是在问题#27213问题#12844中完成的工作的结果;#27213重新设计了CALL_FUNCTION*操作码系列,以提高性能和简化性(3.6的一部分),释放了操作码参数以仅对单个参数计数进行编码,并且#12844删除了编译时检查,该检查防止了带有更多参数代码无法编译。

因此,从3.7开始,使用EXTENDED_ARG()opcode,现在可以使用显式参数传递多少个参数,保存多少可以装入堆栈(现在受内存 限制)就完全没有限制

>>> import sys
>>> sys.version_info
sys.version_info(major=3, minor=7, micro=0, releaselevel='alpha', serial=2)
>>> def f(*args, **kwargs): pass
...
>>> exec("f({})".format(', '.join(map(str, range(256)))))
>>> exec("f({})".format(', '.join(map(str, range(2 ** 16)))))

请注意,列表,元组和字典仅限于sys.maxsize元素,因此,如果被调用函数使用*args和/或包含**kwargs所有参数,则这些元素将 受到限制。

对于*argsand**kwargs调用语法(扩展参数),除sys.maxintPython标准类型的大小限制相同外,没有其他限制。

在Python 3.7之前的版本中,cpython在调用中限制为255个显式传递的参数:

>>> def f(*args, **kwargs): pass
...
>>> exec("f({})".format(', '.join(map(str, range(256)))))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1
SyntaxError: more than 255 arguments

之所以存在此限制,是因为直到Python 3.5,CALL_FUNCTION操作码都将操作码参数重载以对堆栈上的位置参数和关键字参数数量进行编码,每个参数都编码为一个字节。

python 2022/1/1 18:44:00 有314人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶