详解Python中的main函数

发表于:2023-7-26 09:56

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:佚名    来源:知乎

  何时以及如何在 Python 中执行 main 方法呢?
  如果您是 Python 新手,您可能已经注意到可以在有或没有 main 方法的情况下运行 Python 脚本。并且 Python 中用于定义一个(即if name == ‘__main__')的符号绝对不是不言自明的,尤其是对于新手而言。
  在今天的教程中,我们将探讨和讨论 main 方法的用途,以及在 Python 应用程序中定义该方法时的预期结果。
  __name__的目的是什么?
  在执行程序之前,Python 解释器将 python 模块的名称分配给一个名为__name__. 根据您是通过命令行执行程序还是将模块导入另一个模块,分配__name__将有所不同。
  例如,如果您将模块作为脚本调用:
  python my_module.py
  然后 Python Interpreter 会自动将字符串分配'main'给特殊变量__name__。另一方面,如果您的模块是在另一个模块中导入的。
  # Assume that this is another_module.py
  import my_module
  然后字符串'my_module'将被分配给__name__.
  主要方法是如何工作的?
  现在假设我们有以下模块,其中包含以下代码行:
  # first_module.py
  print('Hello from first_module.py')
  if __name__ == '__main__':
      print('Hello from main method of first_module.py')
  所以在上面的模块中,我们有一个在 main 方法之外的打印语句和一个在内部的打印语句。main 方法下的代码只有在模块作为脚本从(例如)命令行调用时才会执行,如下所示:
  python first_module.py
  Hello from first_module.py
  Hello from main method of first_module.py
  现在,假设我们不想将模块first_module作为脚本调用,而是想将其导入另一个模块:
  # second_module.py
  import first_module
  print('Hello from second_module.py')
  if __name__ == '__main__':
      print('Hello from main method of second_module.py')
  最后,我们second_module作为脚本调用:
  python second_module.py
  Hello from first_module.py
  Hello from second_module.py
  Hello from main method of second_module.py
  请注意,第一个输出来自模块first_module,特别是来自 main 方法之外的打印语句。由于我们没有first_module作为脚本调用,而是将其导入到second_modulefirst_module 的 main 方法中,因为if name == ‘__main__'计算结果为False. 回想一下,从上面的调用中,__name__变量 forsecond_module被分配了字符串'main',而first_module's__name__变量被分配了模块的名称,即’first_module’。
  尽管下面的所有内容都if name == ‘__main__'被认为是我们所说的“main 方法”,但最好定义一个适当的 main 方法,如果条件评估为 True 则调用该方法。例如,
  # my_module.py
  def main():
      """The main function of my Python Application"""
      print('Hello World')
  if __name__ == '__main__': 
      main()
  注意:我通常不鼓励您在单个 Python 应用程序中拥有多个主要功能。为了这个例子,我使用了两种不同的主要方法。
  最后的想法
  在本文中,我描述了 main 方法如何在 Python 中执行以及在什么条件下执行。当一个模块作为一个字符串被调用时,Python 解释器会将这个字符串分配'main'给一个名为 call 的特殊变量,随后将执行__name__在该条件下定义的代码。if name == ‘__main__'另一方面,当一个模块被导入到另一个模块中时,Python 解释器会将带有该模块名称的字符串分配给特殊变量__name__。这意味着在这种情况下if name == ‘__main__'将评估为False这意味着只有在这种情况之外的代码才会在导入后执行。
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号