有关python入门的更多内容,请参考文章:

给我手册就够了 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())