可能重复:
如何找到 Python 模块源的位置?
我不明白如何阅读内置 python 模块中的代码。例如,我知道如何找出模块中的内容,
import os;
dir(os)
但是,当我尝试寻找该功能的示例时,listdir
我找不到 adef listdir
来阅读它的实际作用。
可能重复:
如何找到 Python 模块源的位置?
我不明白如何阅读内置 python 模块中的代码。例如,我知道如何找出模块中的内容,
import os;
dir(os)
但是,当我尝试寻找该功能的示例时,listdir
我找不到 adef listdir
来阅读它的实际作用。
一个字:检查。
inspect 模块提供了几个有用的函数来帮助获取有关活动对象的信息,例如模块、类、方法、函数、回溯、框架对象和代码对象。例如,它可以帮助您检查类的内容、检索方法的源代码、提取和格式化函数的参数列表,或者获取显示详细回溯所需的所有信息。
它在标准库中,文档中有示例。所以,你只是print(inspect.getsource(os))
,或者做inspect.getsourcefile(os)
,等等。
请注意,一些标准库模块是用 C 编写的(或者甚至是内置在解释器中的假模块),在这种情况下getsourcefile
不返回任何内容,但getfile
至少会告诉您它是.so
/ .pyd
/whatever,您可以使用它来查找例如,Python 源代码的副本中的原始 C 源代码。
您也可以只键入help(os)
,FILE
顶部的右侧为您提供路径(通常与getsourcefile
Python 模块相同,getfile
否则相同)。
您可以随时访问Python 模块和C 扩展模块的在线资源。只需将 URL 中的“2.7”更改为“3.3”等即可获得不同的版本。(我相信如果你完全删除版本,你会得到主干代码,目前对应于 3.4 pre-alpha,但不要引用我的话。)
该os.listdir
函数实际上并未直接定义在os
; 它是有效from <platform-specific-module> import *
进口的。您可以自己通过几个步骤来追踪它,但它通常会出现posix_listdir
在posixmodule.c
大多数平台上。(即使是 Windows——最近的版本也使用相同的文件来定义posix
非 Windows 上的模块,以及 Windows 上的nt
andposix
模块,而且#if defined(…)
代码中有很多东西。)