我知道 listobject.c 包含了 list
我知道cpythonobjectslistobject.c中包含了列表容器在python中的实现,但是,我不知道在哪里可以找到处理列表理解的源码。
并没有一个特定的函数来处理列表理解,而是用操作码的组合来指导其创建。
如果你看一下 dis.dis
的理解,你可以看到这些步骤。
dis.dis('[i for i in ()]')
Disassembly of <code object <listcomp> at 0x7fc24c04a6f0, file "<dis>", line 1>:
1 0 BUILD_LIST 0
2 LOAD_FAST 0 (.0)
>> 4 FOR_ITER 8 (to 14)
6 STORE_FAST 1 (i)
8 LOAD_FAST 1 (i)
10 LIST_APPEND 2
12 JUMP_ABSOLUTE 4
>> 14 RETURN_VALUE
我只包含了列表理解的相关拆解。
正如你看名字所看到的那样,这将建立一个列表,然后通过提供的迭代器并追加值。你可以打开 ceval.c
如果您需要更详细地了解每个操作码的执行情况,只需搜索每个操作码。