'if __name__ ==“__ main__”的目的:''

时间:2014-04-10 22:14:54

标签: python 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:])

4 个答案:

答案 0 :(得分:10)

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

使用if __name__ == "__main__",这不会发生。你的模块只是&#34;做它的事情&#34;如果它作为模块运行。否则它就像一个库。它通过简化代码来鼓励代码重用。

(正如@Sheng提到的,您可能希望自己将模块导入另一个脚本以进行测试。)

答案 1 :(得分:1)

用于单元测试建议。

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

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

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

答案 2 :(得分:1)

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

如果导入它,则不会执行if块。如果你运行python.exe myscript.py,那就是。

答案 3 :(得分:1)

这是判断Python模块是作为脚本执行还是从其他模块导入的惯用方法。如果文件作为脚本执行(也就是主模块),则只会输入if __name__ == "__main__"块。