如何阅读Python模块的源代码?

3

我正在尝试理解一些Python内置模块的工作原理。

例如,使用以下代码:

from Tkinter import *
root = Tk()
root.mainloop()

函数 Tk 的定义在哪里?

我已经搜索了 tkinter 源代码,但未能找到它。 代码多次调用 import Tkinter,这也很奇怪,因为这就是 Tkinter,为什么要导入自己呢?

希望有人能帮助解决我的困惑。


4
它有助于认识到事物是一个类,而不是一个函数。另外,请参阅https://docs.python.org/3/library/inspect.html#inspect.getsource。 - user2357112
2个回答

6
尽管cxw的回答准确无误,但如果您经常查看Python模块的代码,我建议安装IPython。它是Python控制台的更好版本。
$ pip install IPython
...
$ ipython

然后,要查看类/函数/模块的代码,请键入其名称并添加??

from Tkinter import *
Tk??

5

Tk 类所在位置如下:

通常情况下,当你导入 Foo 时,如果 Foo 是使用 Python 代码实现的模块,并且在 Python 的搜索路径中存在一个 Foo/__init__.py 文件,则会运行该文件。这里有更多信息,以及关于Python 3Python 2模块的官方文档。但对于内置于 Python 解释器的模块(例如 2.7 中的 Tkinter),可能并非如此。

Tkinter 的特别之处

  • 在 Python 2 中,Tkinter 是一个 Python 模块,而小写的 tkinter 是一个 C 模块,Tkinter 使用它 (来源)。
  • 在 Python 3 中,小写的 tkinter 是一个 Python 模块,而带有下划线的 _tkintertkinter 使用的 C 模块 (来源)。

2
在Python2.7中,Tk不在__init__.py中,而是在Tkinter.py中。我认为它只在Python 3的__init__.py中。在这种情况下,我们知道OP正在使用Python2,因为他们正在使用Tkinter而不是tkinter - Bryan Oakley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接