CPython源码中哪里实现了列表理解?

问题描述 投票:0回答:1

我知道 listobject.c 包含了 list 我知道listobject.c包含了CPython中列表对象的实现,但是,我怎么能找到处理列表理解的源代码呢?

python list list-comprehension cpython
1个回答
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 如果您需要更详细地了解每个操作码的执行情况,只需搜索每个操作码。

© www.soinside.com 2019 - 2024. All rights reserved.