__main__ 中的 Python getopt()
我是一名 Python 初学者,并且已经成功地获得了我的第一个程序,并传入了 CLI 参数来运行。从此处理命令行选项获得了很多帮助。
我的问题是:为什么在示例 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的人能够分享你的智慧。
TIA- 阿尚特
I'm a Python beginner and have successfully gotten my first program with CLI parameters passed in to run. Got lots of help from this Handling command line options.
My question is: Why in Example 5.45 a separate def main(argv)
has been used, instead of calling the try/except
block within __main__
itself.
Example 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:])
Hope someone versed in Python could share your wisdom.
TIA -
Ashant
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
没有严格的技术原因,但保持函数外部的代码尽可能短是相当惯用的。具体来说,将代码放入模块作用域会将变量
grammar
、opts
和args
转换为全局公共变量,即使它们只是必需的在主代码里面。此外,使用专用的main
函数可以简化该函数的单元测试。There is no strict technical reason, but it is quite idiomatic to keep the code outside functions as short as possible. Specifically, putting the code into the module scope would turn the variables
grammar
,opts
andargs
into global public variables, even though they are only required inside the main code. Furthermore, using a dedicatedmain
function simplifies unit-testing this function.使用
main
函数的优点之一是它可以轻松地重用代码:如果将脚本的
__main__
块中的任何代码导入为模块。因此,main
函数充当一个简单的接口,提供对脚本的所有正常功能的访问。然后,__main__
块通常只包含对main
的单个调用,以及任何其他非必要代码(例如测试)。Python 作者关于如何编写良好的
main
函数的一些提示可以在 这里。One advantage of using a
main
function is that it allows for easy code re-use:Any code in the script's
__main__
block won't be run if it is imported as a module. So themain
function acts as a simple interface providing access to all the normal functionality of the script. The__main__
block will then usually contain just a single call tomain
, plus any other non-essential code (such as tests).Some tips from the author of Python on how to write a good
main
function can be found here.