找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2411|回复: 12

Python之父教你写main()函数

 火.. [复制链接]
  • 打卡等级:常驻代表
  • 打卡总天数:34
  • 打卡月天数:6
  • 打卡总奖励:9027
  • 最近打卡:2025-12-17 23:15:51

2823

主题

541

回帖

2万

积分

管理员

积分
22569
发表于 2021-3-2 21:17:01 | 显示全部楼层 |阅读模式
编程派微信号:codingpy
每个程序员在学习编程的过程中,肯定没少写过main()函数,Python程序员也不例外。本文为大家分享Python之父Guido van Rossum推荐的函数写法,可以大大提高这个函数的灵活性。
有篇文章将Guido列入了历史上最伟大的12名程序员之一哦。
一般来说,Python程序员可能是这样写main()函数的:
Guido也承认之前自己写的main()函数也是类似的结构,但是这样写的灵活性还不够高,尤其是需要解析复杂的命令行选项时。为此,他向大家提出了几点建议。
添加可选的 argv 参数
首先,修改main()函数,使其接受一个可选参数 argv,支持在交互式shell中调用该函数:
def main(argv=None):
if argv is None:
argv = sys.argv
# etc., replacing sys.argv with argv in the getopt() call
这样做,我们就可以动态地提供 argv 的值,这比下面这样写更加的灵活:
def main(argv=sys.argv):
# etc.
这是因为在调用函数时,sys.argv 的值可能会发生变化;可选参数的默认值都是在定义main()函数时,就已经计算好的。
但是现在sys.exit()函数调用会产生问题:当main()函数调用sys.exit()时,交互式解释器就会推出!解决办法是让main()函数的返回值指示退出状态(exit status)。因此,最后面的那行代码就变成了这样:
if __name__ == "__main__":
sys.exit(main())
并且,main()函数中的sys.exit(n)调用全部变成return n。
定义一个Usage()异常
另一个改进之处,就是定义一个Usage()异常,可以在main()函数最后的except子句捕捉该异常:
这样main()函数就只有一个退出点(exit point)了,这比之前两个退出点的做法要好。而且,参数解析重构起来也更容易:在辅助函数中引发Usage的问题不大,但是使用return 2却要求仔细处理返回值传递的问题。

工控课堂 www.gkket.com

0

主题

197

回帖

406

积分

注册会员

积分
406
发表于 2021-3-4 15:36:54 | 显示全部楼层
我只是路过打酱油的。
工控课堂 www.gkket.com

0

主题

113

回帖

255

积分

注册会员

积分
255
发表于 2021-3-4 19:56:02 | 显示全部楼层
感恩无私的分享与奉献
工控课堂 www.gkket.com

0

主题

67

回帖

94

积分

新手上路

积分
94
发表于 2025-11-13 02:55:40 | 显示全部楼层
路过混个脸熟,顺便为优质内容打 call~
工控课堂 www.gkket.com

0

主题

100

回帖

156

积分

新手上路

积分
156
发表于 2025-11-13 03:08:52 | 显示全部楼层
救命!这回复笑到我捶桌,必须置顶~
工控课堂 www.gkket.com

0

主题

96

回帖

150

积分

新手上路

积分
150
发表于 2025-11-13 03:15:48 | 显示全部楼层
已转发给朋友,一起感受这份快乐~
工控课堂 www.gkket.com

0

主题

77

回帖

105

积分

新手上路

积分
105
发表于 2025-11-13 03:29:45 | 显示全部楼层
这波分析到位,逻辑满分!
工控课堂 www.gkket.com

0

主题

82

回帖

114

积分

新手上路

积分
114
发表于 2025-11-16 08:10:39 | 显示全部楼层
理性围观,感觉大家说的都有道理~
工控课堂 www.gkket.com

0

主题

118

回帖

397

积分

注册会员

积分
397
发表于 2025-11-16 09:25:07 | 显示全部楼层
楼主辛苦啦,期待下一篇分享!
工控课堂 www.gkket.com

0

主题

85

回帖

129

积分

新手上路

积分
129
发表于 2025-11-16 10:42:03 | 显示全部楼层
求个链接 / 教程,楼主好人一生平安~
工控课堂 www.gkket.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|手机版|免责声明|本站介绍|工控课堂 ( 沪ICP备20008691号-1 )

GMT+8, 2025-12-22 14:35 , Processed in 0.359380 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表