阅读内置的python模块[重复]

Posted

技术标签:

【中文标题】阅读内置的python模块[重复]【英文标题】:Reading the builtin python modules [duplicate] 【发布时间】:2012-12-02 23:50:54 【问题描述】:

可能重复:How do I find the location of Python module sources?

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

import os;

dir(os)

但是当我尝试寻找函数 listdir 时,我找不到 def listdir 来读取它的实际作用。

【问题讨论】:

最简单的选择是look it up in the docs。 @Lattyware:文档在哪里告诉您来源?一些模块确实有指向源代码的链接,通常是那些与可用代码一样多的示例(如asyncore),但大多数没有(如os)。 @abarnert 我认为“阅读它的实际作用”是指如何使用它,而不是查看源代码。这个问题有点不清楚,但重读一下,你的解释可能是对的。 @HansEngel:这个答案已经过时了。他们在 2.1 中添加了inspect,因此您不必处理“有时有__file__,有时没有,有时是.pyc,有时是.py,它可能会有所不同不同的平台,甚至在 PyPy 等不同的实现上更糟糕。”东西了,从 3.0 开始,甚至没有记录规则(除了“它必须是 inspect 期望的任何东西”)。 【参考方案1】:

一个字:inspect。

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

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

请注意,一些标准库模块是用 C 编写的(或者甚至是内置在解释器中的假模块),在这种情况下,getsourcefile 什么也不返回,但getfile 至少会告诉你这是一个@987654329 @/.pyd/whatever,您可以使用它来查找原始 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 上的 ntposix 模块,并且代码中有一堆 #if defined(…) 的东西。)

【讨论】:

以上是关于阅读内置的python模块[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python基础(十五)

Python-内置函数

python基础---模块与包

python学习之模块-自定义模块

what's the python之自定义模块和包

python 模块与包