Python getopt() 在 __main__ 中
我是一名Python初学者,刚刚成功让我的第一个程序运行起来,并且可以接收命令行参数。在这个过程中,我得到了很多帮助,特别是来自这篇关于处理命令行选项的文章。
我想问的是:为什么在示例5.45中使用了一个单独的def main(argv)
,而不是直接在__main__
里面调用try/except
块呢?
示例5.45
def main(argv):
grammar = "kant.xml"
try:
opts, args = getopt.getopt(argv, "hg:d", ["help", "grammar="]) 2
except getopt.GetoptError:
usage()
sys.exit(2)
...
if __name__ == "__main__":
main(sys.argv[1:])
希望有经验的Python高手能分享一下你们的见解。
谢谢大家 - Ashant
2 个回答
1
使用 main
函数的一个好处是,它让代码更容易重复使用:
import sys
import script
script.main(sys.argv[1:])
# or, e.g. script.main(['-v', 'file.txt']), etc
如果这个脚本被当作模块导入,那么脚本中 __main__
块里的代码就不会被执行。所以,main
函数就像一个简单的接口,让你可以访问脚本的所有正常功能。通常,__main__
块里只会包含对 main
的一次调用,还有一些其他不太重要的代码(比如测试代码)。
关于如何写一个好的 main
函数,Python 的作者提供了一些建议,可以在 这里 找到。
2
其实没有什么严格的技术原因,但通常大家会习惯性地把函数外面的代码写得尽量简短。具体来说,如果把代码放在模块的范围内,就会把grammar
、opts
和args
这些变量变成全局变量,虽然它们其实只在主代码里用到。此外,使用一个专门的main
函数可以让我们更简单地进行单元测试。