【问题标题】:What's the point of a main function and/or __name__ == "__main__" check in Python? [duplicate]Python 中的 main 函数和/或 __name__ == "__main__" 检查有什么意义? [复制]
【发布时间】:2010-12-29 14:36:18
【问题描述】:

可能重复:
What does <if __name__==”__main__”:> do?

我偶尔会在 Python 脚本中注意到类似以下内容:

if __name__ == "__main__":
    # do stuff like call main()

这有什么意义?

【问题讨论】:

  • 在您阅读 Python 文档中的相关内容后,您可以提出什么具体问题?例如,请参阅docs.python.org/library/python.html。阅读本节后,您有哪些具体问题。
  • S.Lott:他的问题似乎很具体。他在问这种情况通常是为了什么......
  • 昨晚我自己也在想这个问题。
  • @Fragsworth:我看不出这是如何“具体”的。 “……有什么意义”的问题是开放式的。他们没有解决编程问题。此外,“有什么意义”的答案在文档中。如果有一个更集中的问题而不是 - 琐碎 - 文档的一部分,那就太好了。

标签: python


【解决方案1】:

让所有重要的 Python 代码都存在于一个函数中(即 不是 在模块顶层)是一个关键的性能优化以及良好的代码组织的一个重要因素(Python 编译器可以优化访问函数中的局部变量比优化“局部”变量(实际上是模块的全局变量)要好得多,因为后者的语义要求更高)。

以当前模块作为“主脚本”运行(而不是从另一个模块导入)对函数的调用有可能使模块中包含的功能块具有可重用性(因为其他模块可能会导入它并只需调用适当的函数或类),更重要的是它支持可靠的单元测试(在执行和测试模块的功能之前,通常可能需要设置外部子系统的各种模型和伪造品)。

【讨论】:

  • 我再也不会把我所有的代码放在模块顶层了。谢谢。
  • 这对我来说是一个比拥有数千票的解释更好的解释。即使在所有示例之后,我也无法真正理解这一点。谢谢!
【解决方案2】:

这允许导入或独立运行 python 脚本是一种明智的方式。

如果直接运行 python 文件,__name__ 变量将包含__main__。如果你导入脚本就不会这样了。通常,如果您导入脚本,您希望从文件中调用函数或引用类。

如果您没有进行此检查,则任何不在类或函数中的代码都会在您导入时运行。

【讨论】:

    【解决方案3】:

    这样做的唯一目的是,假设它位于 main.py 中,以便其他文件可以 import main 包含您的“主”程序中的类和函数,但无需运行源代码。

    如果没有这个条件,全局范围内的代码在被其他脚本导入时会被执行。

    【讨论】:

      【解决方案4】:

      这是进行模块测试的好地方。这只会在模块直接从 shell 运行时运行,但如果导入则不会运行。

      【讨论】:

        猜你喜欢
        • 2017-05-19
        • 2013-09-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-22
        相关资源
        最近更新 更多