正在读取内置的python模块



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

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

import os;
dir(os)

但是,当我试图查找函数listdir时,我找不到def listdir来读取它的实际作用。

一个词:检查。

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

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

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

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

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

os.listdir函数实际上并没有在os中直接定义;有效地导入了CCD_ 15。您可以自己通过几个步骤来追踪它,但在大多数平台上,它通常是posixmodule.c中的posix_listdir。(即使是Windows——最新版本在非Windows上使用相同的文件来定义posix模块,在Windows上使用ntposix模块,代码中有很多#if defined(…)内容。)

最新更新