阅读内置的python模块

时间:2012-12-14 23:43:20

标签: python module built-in

  

可能重复:
  How do I find the location of Python module sources?

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

import os;

dir(os)

但是当我试图找到函数listdir的示例时,我找不到def listdir来读取它实际上做的事情。

1 个答案:

答案 0 :(得分:5)

一个字:inspect

  

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

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

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

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

您可以随时访问Python modulesC extension modules的在线来源。只需将URL中的“2.7”更改为“3.3”等,即可获得不同的版本。 (我相信如果您完全删除该版本,则会获得中继代码,目前对应于3.4 pre-alpha,但请不要引用我。)

os.listdir函数实际上并未直接在os中定义;它实际上是from <platform-specific-module> import *导入的。您可以自己通过几个步骤跟踪它,但在大多数平台上posixmodule.c通常都是posix_listdir。 (甚至Windows最新版本使用相同的文件来定义非Windows上的posix模块,以及Windows上的ntposix模块,并且有一堆{{1}代码中的东西。)