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

问题描述 投票:-3回答:1

有一些函数,如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 built-in cpython
1个回答
1
投票

一切都归结为Python中的内置对象吗?这取决于你对问题的意思,但猜测你在谈论代码流,那么答案是否定的。

以python的C实现为基准 - 记住有用Java,C#甚至Python编写的Python版本。模块可以用C或C ++编写,因为有一个API。

创建一个目录(mkdir)。在某些时候需要内核调用,这取决于操作系统。例如,将有一个Windows和一个UNIX或Posix低级接口来进行内核调用,它几乎肯定会用C编写。这是因为大多数现代操作系统都有C内核API,而不是Python内核。

例如,请参阅Python源代码中的Modules/posixmodule.c,它是调用OS内核接口mkdir的地方。用于创建目录的C接口只需要一个文本字符串(不是python str对象),一个用于权限的C八进制整数,以及一个用于存储其结果的变量。这些必须在C和Python之间进行转换,但是模块内部可以使用其他类型的纯C,并且不需要转换回python。

仅仅因为模块是用C编写的并不意味着它是内置的(builtin模块的一部分)。你可以编写自己的C模块并从python中调用它 - python用户不需要知道它所写的语言,通常是不可见的。

© www.soinside.com 2019 - 2024. All rights reserved.