python 如何处理内置函数?

How does python deal with built-in functions?

print('Hello World')

以上代码第一次编译时,字节码中是否包含print函数的源代码? Python解释器如何获取print的源代码?

您可以使用 dis 模块来查看 CPython 如何处理内置函数。

$ cat tmp.py
print('Hello World')
$ python3 -m dis tmp.py
  1           0 LOAD_NAME                0 (print)
              2 LOAD_CONST               0 ('Hello World')
              4 CALL_FUNCTION            1
              6 POP_TOP
              8 LOAD_CONST               1 (None)
             10 RETURN_VALUE

函数的名称及其参数被加载到堆栈上,然后 CALL_FUNCTION 负责使用通常的查找算法查找名称。在 print 的情况下,名称存在于内置作用域中,查找的结果是 Python 实现提供的对象。

其他实现可能不同;唯一真正的要求是 print('Hello World') 不引发 NameError,假设在调用之前没有使用 del print 之类的东西,并且生成的函数调用符合内置的定义行为在功能中。