Skip to main content
 首页 » 编程设计

python之python 中 .format 的局限性

2025年05月04日11thcjp

所以我对 Python 相当陌生,我相信这会变得很明显。 无论如何,使用 .format 时我可以传递的参数数量是否有限制? 我有一个包含 8000 个数字的列表,需要在输入的各个位置替换长输入中的现有数字。目前,我正计划这样做:

text = """ very long input with many {0}..{1}..{8000} in various places """ 
file = open('new_input', 'w') 
file.write(text.format(x,x1,x2,....x8000)) 

如有任何建议,我们将不胜感激!

请您参考如下方法:

As wim notes ,你可以通过参数解包来做到这一点,但如果你实际上将它们作为单独的命名参数按位置传递,它就不起作用;有 255 个明确提供的单个参数的限制。

演示:

>>> globals().update(('x{}'.format(i), i) for i in range(8000)) 
>>> codestr = '("{{}}"*8000).format({})'.format(', '.join('x{}'.format(i) for i in range(8000))) 
>>> eval(codestr) 
Traceback (most recent call last): 
  File "<stdin>", line 1, in <module> 
  File "<string>", line 1 
SyntaxError: more than 255 arguments 

限制是由于 CALL_FUNCTION 操作码是如何定义的;它被编码为指示操作码的单个字节,然后一个字节表示位置参数的数量,一个字节表示关键字参数的数量。虽然理论上它可以处理多达 510 个参数,但它们实际上强加了 255 个参数的组合限制,大概是为了保持一致性。因此,如果不涉及 * 或 ** 解包,您实际上无法调用总参数超过 255 个的函数。

顺便说一句,这在技术上都是一个实现细节;没有语言要求它以这种方式工作,因此它可能会在 CPython 的 future 版本(引用解释器)中发生变化,并且现在在任何其他解释器(其中大多数不生成或使用 CPython 字节码)中表现不同。