对Python模块及其中的函数感到困惑

1 投票
4 回答
1349 浏览
提问于 2025-04-16 13:30

为了简明扼要地描述我的问题,请看下面的例子:

  1. 模块 os 有一个函数 getcwd(),它可以返回当前的工作目录。但是在 /usr/lib/python2.7/os.py 文件中没有关于 os.getcwd() 的详细信息。那这个函数的实现在哪里呢?

  2. os.path 也是 Python 中的一个模块,但在 /usr/lib/python2.7 目录下并没有名为 os.path 的文件。那么当你在 Python 脚本中使用 import os.path 时,实际上是导入了哪个文件呢?

感谢大家的帮助...

4 个回答

1

如果你在使用POSIX系统(比如Linux或Mac OS X),那么os.py文件中的这些代码会引入相关的功能:

from posix import *
import posixpath as path

而在Windows系统上:

from nt import *
import ntpath as path

(还有一些其他选项是为了不太常见的系统)

需要注意的是,使用from x import *这种写法通常是不太推荐的。这算是一种特殊情况。

2

模块不一定非得是Python脚本。你可以使用C-API来用C或C++编写模块。你可以把它们编译成动态库,这样解释器就可以动态加载这些库,或者你也可以重新编译解释器,把模块直接链接到里面。

3

1. getcwd() 这个函数是在 C 语言中实现的,具体的代码可以在 这里 找到。

2. os.path 是在 os 模块中定义的,它会根据操作系统的类型动态检测并导入相应的库,然后通过 sys.modules['os.path'] = path 来设置。

撰写回答