在peephole等内部模块中,LOAD_CONST
的参数存储在opcode
之后的两个字节中。
例如,用于获取操作参数的宏实现为:
#define GETARG(arr, i) ((int)((arr[i+2]<<8) + arr[i+1]))
LOAD_CONST
的参数是consts
数组的索引。
所以我猜想也许我们在Python函数中最多只能使用2 ^ 16个常量。
但是当我尝试使用66666(&gt; 65536)常量的函数时,它仍然可以正常运行。
可能是什么原因?
答案 0 :(得分:6)
来自dis
文档:
EXTENDED_ARG(EXT)
前缀任何参数太大的操作码 适合默认的两个字节。 ext保存另外两个字节, 与随后的操作码的论证一起,包括一个 四字节参数,ext是两个最重要的字节。
如果操作码需要超过2个字节的参数,则EXTENDED_ARG操作码会提供2个字节的参数。