📜  __main__.py 在Python中的使用

📅  最后修改于: 2022-05-13 01:54:42.669000             🧑  作者: Mango

__main__.py 在Python中的使用

我们中的许多人都曾在Python中创建自己的自定义模块,并且非常熟悉候选“ __init__.py ”。如果您不知道,那么在深入探讨相关主题之前,让我们先简要介绍一下“__init__.py”。实际上,默认情况下,当我们尝试将模块导入Python时, Python会访问 __init__.py 以查找必要的导入。

现在有两种情况。

  • 组织良好的Python文件可以作为模块导入
  • 可以直接通过命令行运行的Python文件(单文件结构)

在第一种情况下,当我们尝试将其作为模块导入时, __init__.py开始发挥作用。对于第二种情况,我们使用一些 hackish 语法,例如

def main ():
    pass
  
if __name__ == '__main__':
    main()

此语法可能与其他语言(如Java和 C++)中的 main 开头有关。但是这种语法不适用于第三种情况。那么如果我们想直接从命令行运行这些文件怎么办?
这就是 __main__.py 来拯救的地方。

举个例子,我们会求矩形、正方形和圆形的面积。为了便于理解,我们将这三个操作划分为三个独立的 .py 文件,并将其存储在一个名为 src 的模块中。

文件树将如下所示

+---src
|   |   circle.py
|   |   rectangle.py
|   |   square.py
|   |   __init__.py
|   |   

现在 src 如果添加到路径中,可以作为任何其他Python程序的模块导入。但是如果我们想从命令行运行它怎么办。为此,我们将 src 文件夹存储在名为area_finder的文件夹下,并在其下添加一个名为__main__.py的文件。树看起来像

area_finder
|   readme.md
|   __main__.py
|   
+---src
|   |   circle.py
|   |   rectangle.py
|   |   square.py
|   |   __init__.py
|   |   

__main__.py的内容

print("____-menu_____")
print("1: to find area of square \n\
2: to find area of rectangle\n\
3: to find area of circle")
  
ch = int(input())
  
if ch == 1:
    from src.square import square
    print("enter side")
    s = int(input())
    print ("the area is ", square(s))
  
if ch == 2:
    from src.rectangle import rectangle
    print("enter length and breadth")
    l = int(input())
    b = int(input())
    print("the area is ", rectangle(l, b))
  
if ch == 3:
    from src.circle import circle 
    print("enter radius")
    r = int(input())
    print("the area is ", circle(r))

现在,当我们像这样从终端/命令提示符运行它们时

python area_finder

输出将是 -

python-main.py_

那么当我们执行命令时会发生什么。 Python查找名为__main__.py的文件以自动开始执行。如果它没有找到它会抛出一个错误,否则它将执行 main.py 并且从代码中,你可以很好地理解它会从 src 导入模块来找到该区域。

所以现在我们已经了解了 __main__.py 是如何工作的。现在,让我们来看看它最大的优势:

  • 它消除了最终用户之间关于程序入口点的歧义,因为Python会自动执行它
  • 它有助于干净地执行代码