我不明白如何阅读内置python模块中的代码。我知道如何找出模块中的最新信息,例如,
import os;
dir(os)
但是当我试图找到函数listdir
的示例时,我找不到def listdir
来读取它实际上做的事情。
答案 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 modules和C 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上的nt
和posix
模块,并且有一堆{{1}代码中的东西。)