我知道listobject.c包含CPython中list
对象的实现,但是,如何找到处理列表推导的源代码?
答案 0 :(得分:0)
没有用于处理列表推导的特定功能,而是使用操作码的组合来指导其创建。
如果您对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
并简单地搜索每个操作码。