3

可能重复:
如何找到 Python 模块源的位置?

我不明白如何阅读内置 python 模块中的代码。例如,我知道如何找出模块中的内容,

import os;

dir(os)

但是,当我尝试寻找该功能的示例时,listdir我找不到 adef listdir来阅读它的实际作用。

4

1 回答 1

5

一个字:检查

inspect 模块提供了几个有用的函数来帮助获取有关活动对象的信息,例如模块、类、方法、函数、回溯、框架对象和代码对象。例如,它可以帮助您检查类的内容、检索方法的源代码、提取和格式化函数的参数列表,或者获取显示详细回溯所需的所有信息。

它在标准库中,文档中有示例。所以,你只是print(inspect.getsource(os)),或者做inspect.getsourcefile(os),等等。

请注意,一些标准库模块是用 C 编写的(或者甚至是内置在解释器中的假模块),在这种情况下getsourcefile不返回任何内容,但getfile至少会告诉您它是.so/ .pyd/whatever,您可以使用它来查找例如,Python 源代码的副本中的原始 C 源代码。

您也可以只键入help(os)FILE顶部的右侧为您提供路径(通常与getsourcefilePython 模块相同,getfile否则相同)。

您可以随时访问Python 模块C 扩展模块的在线资源。只需将 URL 中的“2.7”更改为“3.3”等即可获得不同的版本。(我相信如果你完全删除版本,你会得到主干代码,目前对应于 3.4 pre-alpha,但不要引用我的话。)

os.listdir函数实际上并未直接定义在os; 它是有效from <platform-specific-module> import *进口的。您可以自己通过几个步骤来追踪它,但它通常会出现posix_listdirposixmodule.c大多数平台上。(即使是 Windows——最近的版本也使用相同的文件来定义posix非 Windows 上的模块,以及 Windows 上的ntandposix模块,而且#if defined(…)代码中有很多东西。)

于 2012-12-14T23:48:28.723 回答