3

我是一名 Python 初学者,并且已经成功地让我的第一个带有 CLI 参数的程序运行起来。从这个处理命令行选项中得到了很多帮助。

我的问题是:为什么在示例 5.45 中使用了单独def main(argv)的,而不是在其内部调用try/except__main__

示例 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的人可以分享您的智慧。

TIA - 阿尚特

4

2 回答 2

2

没有严格的技术原因,但保持函数外部代码尽可能短是非常惯用的。具体来说,将代码放入模块范围会将变量转换为全局公共变量grammar,即使它们仅在主代码中是必需的。此外,使用专用函数简化了对该函数的单元测试。optsargsmain

于 2011-12-18T08:26:12.533 回答
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 作者关于如何编写好的函数的一些提示。

于 2011-12-18T17:35:53.027 回答