Purpose of 'if __name__ == "__main__":'



我正在努力理解我发现的一些读取命令行参数的代码(附在下面)。我关心的是"if __name__ == __main__"线的用途是什么…

为什么我要使用这一行而不只是使用下面的代码main(sys.argv[1:])。它有什么额外的用途?

import sys, getopt
def main(argv):
   inputfile = ''
   outputfile = ''
   try:
      opts, args = getopt.getopt(argv,"hi:o:",["ifile=","ofile="])
   except getopt.GetoptError:
      print 'test.py -i <inputfile> -o <outputfile>'
      sys.exit(2)
   for opt, arg in opts:
      if opt == '-h':
         print 'test.py -i <inputfile> -o <outputfile>'
         sys.exit()
      elif opt in ("-i", "--ifile"):
         inputfile = arg
      elif opt in ("-o", "--ofile"):
         outputfile = arg
   print 'Input file is "', inputfile
   print 'Output file is "', outputfile
if __name__ == "__main__":
   main(sys.argv[1:])

想象一下,其他人想在自己的程序中使用模块中的函数。他们导入你的模块。。。它开始做自己的事情!

对于if __name__ == "__main__",这种情况不会发生。仅您的模块";做它的事";如果它作为main模块运行。否则,它的行为就像一个库。它通过简化代码重用来鼓励代码重用。

(正如Sheng所提到的,出于测试目的,您可能需要自己将模块导入另一个脚本中。)

它用于单元测试建议。

如果您直接运行此脚本,它将执行if块。所以你可以在这里做一些单元测试工作。但是,如果您将此文件作为模块导入,则不希望执行此部分。

它类似于Java中的主函数。在每个Java类中,都可以有一个用于单元测试的主函数。但是类被导入/用作模块,主函数将不会执行。

通常,如果您直接使用此脚本,它将运行if块。否则,有人会将此文件用作函数/类的库,测试用例name确保此代码不会困扰用户。

Python中的if __name__ == '__main__'约定旨在允许您编写可以直接运行或导入的代码。

如果导入,则不会执行if块。如果运行python.exe myscript.py,则为.

这是判断Python模块是作为脚本执行还是从另一个模块导入的惯用方法。只有当文件作为脚本执行时(也就是说,它是主模块),您才会进入if __name__ == "__main__"块。

相关内容

  • 没有找到相关文章

最新更新