Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python为什么要使用";。0“;用反汇编字节码表示迭代器?_Python_Iterator_Bytecode - Fatal编程技术网

Python为什么要使用";。0“;用反汇编字节码表示迭代器?

Python为什么要使用";。0“;用反汇编字节码表示迭代器?,python,iterator,bytecode,Python,Iterator,Bytecode,以这个例子为例 dis.dis(“[1代表范围(3)]”中的i) 1 0加载常数0() 2荷载常数1(“”) 4生成函数0 6加载单元名称0(范围) 8负载常数2(3) 10调用函数1 12获取ITER 14调用函数1 16返回值 在0x10d6045d0处反汇编: 1 0生成\u列表0 2 LOAD_FAST 0(.0)这是一个变量名。为列表理解生成的函数采用单个参数,该参数被赋予通常禁止的名称.0,以确保该名称不会与任何常规变量冲突。如果Python必须生成更多的名称,那么它们将使用.1、.

以这个例子为例

dis.dis(“[1代表范围(3)]”中的i) 1 0加载常数0(<0x10d6045d0处的代码对象列表,文件“dis”,第1行>) 2荷载常数1(“”) 4生成函数0 6加载单元名称0(范围) 8负载常数2(3) 10调用函数1 12获取ITER 14调用函数1 16返回值 在0x10d6045d0处反汇编: 1 0生成\u列表0
2 LOAD_FAST 0(.0)这是一个变量名。为列表理解生成的函数采用单个参数,该参数被赋予通常禁止的名称
.0
,以确保该名称不会与任何常规变量冲突。如果Python必须生成更多的名称,那么它们将使用
.1
.2
,等等


dis
输出显示
.0
,因为
LOAD\u FAST
指令是从
.0
变量读取的
dis
不会去寻找变量值来自的表达式;这将需要大量的额外工作,一般来说是不可能的,而且它所分解的字节码也不太真实。

谢谢。此规则是否仅适用于位置参数?@laike9m:当CPython实现需要生成变量名时,生成的名称如下所示。它实际上与位置参数没有任何关系。