我知道listobject.c包含 CPython 中 list
对象的实现,但是,我如何找到处理列表推导式的源代码?
最佳答案
没有处理列表推导的特定函数,而是使用操作码的组合来指导其创建。
如果你看一下 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
如果您需要更详细地了解每个操作码执行的操作,只需搜索每个操作码即可。
关于python - CPython 源代码中的列表推导式在哪里实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62281997/