可能的重复:
如何找到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上使用nt
和posix
模块,代码中有很多#if defined(…)
内容。)