python中有主函数吗 python在主函数中调用函数( 二 )


main()1234567891011121314151617181920212223242526
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.1234
这样做 , 我们就可以动态地提供 argv 的值,这比下面这样写更加的灵活:
def main(argv=sys.argv):
# etc.12
这是因为在调用函数时,sys.argv 的值可能会发生变化;可选参数的默认值都是在定义main()函数时 , 就已经计算好的 。
但是现在sys.exit()函数调用会产生问题:当main()函数调用sys.exit()时,交互式解释器就会推出!解决办法是让main()函数的返回值指示退出状态(exit status) 。因此,最后面的那行代码就变成了这样:
if __name__ == "__main__":
sys.exit(main())12
并且 , main()函数中的sys.exit(n)调用全部变成return n 。
定义一个Usage()异常
另一个改进之处,就是定义一个Usage()异常,可以在main()函数最后的except子句捕捉该异常:
import sysimport getoptclass Usage(Exception):
def __init__(self, msg):
self.msg = msgdef main(argv=None):
if argv is None:
argv = sys.argvtry:try:
opts, args = getopt.getopt(argv[1:], "h", ["help"])except getopt.error, msg:raise Usage(msg)# more code, unchanged
except Usage, err:print sys.stderr, err.msgprint sys.stderr, "for help use --help"
return 2if __name__ == "__main__":
sys.exit(main())123456789101112131415161718192021222324
这样main()函数就只有一个退出点(exit)了,这比之前两个退出点的做法要好 。而且,参数解析重构起来也更容易:在辅助函数中引发Usage的问题不大,但是使用return 2却要求仔细处理返回值传递的问题 。
在Python中定义Main函数目录
许多编程语言都有一个特殊的函数python中有主函数吗,当操作系统开始运行程序时会自动执行该函数 。这个函数通常被命名为main()python中有主函数吗,并且依据语言标准具有特定的返回类型和参数 。另一方面,Python解释器从文件顶部开始执行脚本,并且没有自动执行的特殊函数 。
尽管如此,为程序的执行定义一个起始点有助于理解程序是如何运行的 。Python程序员提出了几种方式对此进行实现 。
本文结束时,您将了解以下内容:
Python中的基本main()函数
一些Python脚本中,包含一个函数定义和一个条件语句,如下所示:
此代码中,包含一个main()函数,在程序执行时打印Hello World! 。此外 , 还包含一个条件(或if)语句,用于检查__name__的值并将其与字符串"__main__"进行比较 。当if语句为True时,Python解释器将执行main()函数 。更多关于Python条件语句的信息可以由此获得 。
这种代码模式在Python文件中非常常见,它将作为脚本执行并导入另一个模块 。为了帮助理解这段代码的执行方式,首先需要了解Python解释器如何根据代码的执行方式设置__name__ 。
Python中的执行模式
Python解释器执行代码有两种方式:
更多内容可参考如何运行Python脚本 。无论采用哪种方式,Python都会定义一个名为__name__的特殊变量,该变量包含一个字符串,其值取决于代码的使用方式 。
本文将如下示例文件保存为execution_methods.py , 以 探索 代码如何根据上下文改变行为:
在此文件中,定义了三个对print()函数的调用 。前两个打印一些介绍性短语 。第三个print()会先打印短语The value __name__ is,之后将使用Python内置的repr()函数打印出__name__变量 。

推荐阅读