CPython源代码在哪里实现列表推导?

时间:2020-06-09 11:52:45

标签: python list list-comprehension cpython

我知道listobject.c包含CPython中list对象的实现,但是,如何找到处理列表推导的源代码?

1 个答案:

答案 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并简单地搜索每个操作码。

相关问题