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提到的,您可能希望自己将模块导入另一个脚本以进行测试.)
这是用于单元测试的建议。
如果您直接运行此脚本,它将执行该if
块。所以你可以在这里做一些单元测试工作。但如果您将此文件作为模块导入,则您不希望执行此部分。
类似于Java中的main函数。在每个 Java 类中,您都可以有一个用于单元测试的 main 函数。但是该类作为模块导入/使用, main 函数将不会被执行。
一般来说,如果您直接使用此脚本,它将运行该if
块。否则,有人想将此文件用作函数/类库,并且测试用例名称可确保此代码不会打扰用户。
Python 中的约定if __name__ == '__main__'
旨在允许您编写可以直接运行或导入的代码。
如果导入它,则if
不会执行该块。如果你运行python.exe myscript.py
它是。
归档时间: |
|
查看次数: |
18031 次 |
最近记录: |