'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:])

原文由 Chris Headleand 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 463
2 个回答

好吧,假设其他人想在他们自己的程序中使用您的模块中的函数。他们导入你的模块……然后它开始做自己的事情!

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

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

原文由 kindall 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

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

原文由 g.d.d.c 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题