为什么在Python函数中可以使用超过2 ^ 16个常量?

时间:2014-04-13 06:16:12

标签: python python-internals

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)常量的函数时,它仍然可以正常运行。

可能是什么原因?

1 个答案:

答案 0 :(得分:6)

来自dis文档:

  

EXTENDED_ARG(EXT)

     

前缀任何参数太大的操作码   适合默认的两个字节。 ext保存另外两个字节,   与随后的操作码的论证一起,包括一个   四字节参数,ext是两个最重要的字节。

如果操作码需要超过2个字节的参数,则EXTENDED_ARG操作码会提供2个字节的参数。