您可以查看 Python 字节码反汇编,了解for-loop 在 Python 中是如何实现的:
>>> import dis
>>> dis.dis('for x in it: pass')
1 0 SETUP_LOOP 14 (to 17)
3 LOAD_NAME 0 (it)
6 GET_ITER
>> 7 FOR_ITER 6 (to 16)
10 STORE_NAME 1 (x)
13 JUMP_ABSOLUTE 7
>> 16 POP_BLOCK
>> 17 LOAD_CONST 0 (None)
20 RETURN_VALUE
即使不查看源代码,我们也可以猜测它__iter__是由GET_ITER操作码__next__调用并在FOR_ITER.
事实上,CPython 的Python/ceval.c证实了这一点,例如,GET_ITER调用PyObject_GetIter(iterable)等效于iter(iterable)可以调用iterable.__iter__()方法的调用。
在 python 文件夹中,我在哪里可以看到其他内置方法的代码(如 len() 或 int()?
这些函数也在 C 中(在 CPython 中)实现。您可以在CPython 源代码库中看到它们。
内置方法来自在Python/bltinmodule.cbuiltins中实现的模块,例如,调用。len()PyObject_Size()
int是 Python 中的整数类。它在Objects/longobject.c (Python 3) 中实现。
Python文件夹里不是CPython代码吗?
不,Python 安装文件夹不包含 CPython 的源代码。它可能包含来自标准库(例如Lib/fractions.py )的纯 Python 模块,除非它们被压缩或仅安装了编译模块(例如.pyc,.pyo文件)。
要获取完整的源代码,请运行:
$ hg clone https://hg.python.org/cpython
Mercurial 可执行文件hg在哪里。
作为练习,您可以找到其他Python 实现(例如 Pypy、Jython 定义、、、、、GET_ITER)FOR_ITER的len()位置int()。