一切都归结为Python中的内置对象吗?

2024-04-27 23:57:54 发布

您现在位置:Python中文网/ 问答频道 /正文

有一些函数,如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代码


Tags: 文件对象函数代码py字节os计算机
1条回答
网友
1楼 · 发布于 2024-04-27 23:57:54

在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用户不需要知道它是用什么语言编写的,这通常是不可见的

相关问题 更多 >