'if __name__ =="__ main__"的目的:''

Chr*_*and 3 python program-entry-point

我试图理解我发现的一些代码读取命令行参数的代码(附在下面).我担心的是这条"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:])
Run Code Online (Sandbox Code Playgroud)

kin*_*all 11

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

有了if __name__ == "__main__",这不会发生.如果它作为模块运行,那么你的模块只能"做它的事" .否则它就像一个库.它通过简化代码来鼓励代码重用.

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


She*_*eng 6

这是用于单元测试的建议。

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

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

一般来说,如果您直接使用此脚本,它将运行该if块。否则,有人想将此文件用作函数/类库,并且测试用例名称可确保此代码不会打扰用户。


g.d*_*d.c 5

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

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