2012-12-14 77 views
2

可能重复:
How do I find the location of Python module sources?读取内置Python模块

我不明白如何在内置的Python模块读取的代码。我知道如何找出最新例如在一个模块中,

import os; 

dir(os) 

但是当我尝试看看,例如用于功能listdir我无法找到一个def listdir阅读其实际作用。

+0

最简单的方法就是[在文档中查找](http://docs.python.org/3/library/index.html)。 –

+0

@Lattyware:文档在哪里告诉你源代码?一些模块_do_有源代码的链接,通常是那些与可用代码相同的例子(比如'asyncore'),但大多数不会(比如'os')。 – abarnert

+0

@abarnert我把'看看它实际上做了'是什么意思,如何使用它,没有看到源代码。这个问题有点不清楚,但重读它,你的解释可能是对的。 –

回答

4

一个字:inspect

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

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

注意一些标准库模块都写在C(或者甚至是内置在解释假模块),在这种情况下getsourcefile回报不算什么,但getfile至少会告诉你这是一个.so/.pyd /任何,你可以用它来查找Python源代码副本中的原始C源代码。

您也可以只输入help(os),而FILE右侧上方为您提供了路径(一般与getsourcefile为Python模块,同样一个getfile其他)。

您可以随时访问Python modulesC extension modules的在线资源。只需将URL中的“2.7”更改为“3.3”等即可获得不同的版本。 (我相信,如果你完全删除的版本,你得到的长途区号,目前相当于3.4预-α,但不可以引用我这句话。)

os.listdir功能实际上并不在os直接定义;它有效地导入from <platform-specific-module> import *。你可以通过几步自己追踪它,但是在大多数平台上,它通常在posixmodule.c中是posix_listdir。 (即使是Windows的最新版本使用相同的文件来定义在非Windows的posix模块,并在Windows上ntposix模块,并有代码一堆#if defined(…)东西。)