我知道这两个关于__init__.py__main__.py的问题:

What is __init__.py for?

What is __main__.py?

但我真的不明白他们之间的区别.或者我可以说我不明白他们是如何相互作用的.

推荐答案

当你把一个包放入一个正在运行的python程序中时,__init__.py就会运行.例如,程序中的import idlelib运行idlelib/__init__.py,它不做任何事情,因为它的唯一目的是将idlelib目录标记为包.另一方面,tkinter/__init__.py包含大部分tkinter代码,并定义了所有小部件类.

当您将一个包作为主程序时,__main__.py将作为"_main__"运行.例如,命令行中的python -m idlelib运行idlelib/__main__.py,这会导致空闲.这一行有tkinter/__main__.py,同样有tkinter/__main__.py:

from . import _test as main

在这个上下文中,.tkinter,所以导入.导入tkinter,它运行tkinter/__init__.py._test是在该文件中定义的函数.因此,调用main()(下一行)与在命令行中运行python -m tkinter.__init__具有相同的效果.

Python-3.x相关问答推荐

在多个测试中维护和报告变量

PythonPandas READ_EXCEL空数据帧

无法使用Python发送带有参数和标头的POST请求

在循环中使用Print&S结束参数时出现奇怪的问题

使用 Fetch 提交表单到 Django 视图

在 Python 中比较和排序列之间的值(带有不匹配列)

PyQt5 中耦合滑块和拨号小部件.解决结果不一致的问题

Python webdrivermanager 和 Chrome 115.0 的 URL https://chromedriver.storage.googleapis.com/LATEST_RELEASE_115.0.5790 错误没有此类驱动程序

为什么 get_form 方法中小部件的更改没有反映 Django 管理站点中的更改

requests.exceptions.InvalidSchema:未找到连接适配器.我试图遍历一个列表

如何在不使用循环的情况下根据另一个数组的索引值将 numpy 数组中不同通道的值设置为零?

使用 pandas 数据帧映射到中转( node )点的跨容量请求

如何查找 tensorflow.python.data.ops.dataset_ops.MapDataset 对象的大小或形状,make_csv_dataset 的输出

`pyspark mllib` 与 `pyspark ml` 包

为什么不切换到 Python 3.x?

Python 3.9.8 使用 Black 并导入 `typed_ast.ast3` 失败

如何将 cv2.imread 匹配到 keras image.img_load 输出

如何使用请求发送带有标头的 PATCH 请求

Python pathlib 获取父级相对路径

如何将文档字符串放在 Enums 上?