读取内置的python模块

use*_*410 3 python module built-in

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

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

import os;

dir(os)
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试查找该函数的示例时,listdir找不到一个def listdir读取它实际作用的函数。

aba*_*ert 5

一句话:检查

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

它在标准库中,并且文档包含示例。因此,您只是print(inspect.getsource(os))或做inspect.getsourcefile(os)等等。

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

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

而且,您始终可以在线获取Python模块C扩展模块的资源。只需将URL中的“ 2.7”更改为“ 3.3”等即可获得不同的版本。(我相信如果您完全删除该版本,则会得到主代码,当前对应于3.4 pre-alpha,但请不要在此引用我的名字。)

os.listdir函数实际上并未直接在中定义os;它是有效from <platform-specific-module> import *导入的。你可以跟踪它向下穿过了几步自己,但它通常将是posix_listdirposixmodule.c大多数平台上。(即使是Windows,最新版本也使用同一文件来定义posix非Windows上的模块,以及Windows上的ntposix模块,并且#if defined(…)代码中包含很多东西。)