有一些函数,如print
,嵌入在CPython中,还有一些函数,如os.makedirs
,写入外部.py文件(即os.py
)
据我所知,print()
会调用一些已经在CPython内部编写的C代码,这些C代码会被编译成字节码,以便计算机理解
在os.makedirs
的情况下会发生什么?它没有嵌入到CPython中,所以CPython对os.makedirs
一无所知
或者makedirs
正在使用一些可以追溯到CPython知道的内置对象的对象
例如,os.py
导入abc.py
,后者导入_weakrefset.py
,后者最终导入内置的_weakref
对象?因此,os.py
可以追溯到内置的_weakref
对象,对于这个对象,CPython有一些C代码
在Python中,一切都归结为内置对象吗<这取决于你所说的问题是什么意思,但是假设你说的是代码流,那么答案是否定的
以python的C实现作为我们的基准——请记住,有些python版本是用Java、C#甚至python编写的。模块可以用C或C++编写,因为有API。p>
以创建目录(
mkdir
)为例。在某些时候,这将需要一个内核调用,这取决于操作系统。例如,将有一个Windows和一个UNIX或Posix较低级别的接口来进行内核调用,而且它几乎肯定是用C编写的。这是因为大多数现代操作系统都有C内核api,而不是Python内核api例如,请参见Python源代码中的
Modules/posixmodule.c
,这是调用OS内核接口mkdir
的地方。用于创建目录的C接口只需要一个文本字符串(而不是pythonstr
对象)、一个用于权限的C八进制整数和一个用于存储其结果的变量。这些类型必须在C和Python之间转换,但是模块内部可以使用其他类型,这些类型是纯C的,不需要转换回Python仅仅因为一个模块是用C编写的,并不意味着它是一个内置的(是
builtin
模块的一部分)。您可以编写自己的C模块并从python调用它—python用户不需要知道它是用什么语言编写的,这通常是不可见的相关问题 更多 >
编程相关推荐