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
之类的东西,并且生成的函数调用符合内置的定义行为在功能中。
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
之类的东西,并且生成的函数调用符合内置的定义行为在功能中。