有关python入门的更多内容,请参考文章:
python语法中没有定义main函数作为程序的入口,因为python的本质是个脚本语言。然而这却让很多人不适应。
重新看一下这段代码样例:
if __name__ == '__main__': print("233")
这种写法的意思是:这是由于当你以单个文件运行时,__name__这个内置属性便是‘__main__’,而当你以模块导入使用时,这个属性便是这个模块的名字。所以只在这个文件单独执行的时候实行以下代码,便达成了跟main函数差不多的功能。
但是这个写法有个问题,那就是main函数将没有返回值(退出代码),而且也不能直接传入命令行参数。从python语法角度来讲,这个根本不算是一个函数,而只是一个if条件句的执行代码块。
因此我们有了一个更复杂的main函数写法。
import sys def main(): print("233") if __name__ == "__main__": main()
这样一来main便成了为真正的python函数,但是这样的main函数结构灵活度并不高。
添加可选的 argv 参数
首先,修改main()函数,使其接受一个可选参数 argv,支持在交互式shell中调用该函数:
import sys def main(argv=None): if argv is None: argv = sys.argv if len(argv) < 2: print("233") else: print(argv[1]) return 0 if __name__ == "__main__": sys.exit(main())
在这里,我们不把main函数的参数表写成def main(argv=sys.argv):
是因为在调用函数时,sys.argv 的值可能会发生变化;可选参数的默认值都是在定义main()函数时,就已经计算好的。
但是现在sys.exit()函数调用会产生问题:当main()函数调用sys.exit()时,交互式解释器就会推出“!”。解决办法是让main()函数的返回值指示退出状态(exit status)。因此,最后面的那行代码就变成了这样:sys.exit(main())