一、知识点
Python作为一门较为灵活的解释型脚本语言,其中定义的main()函数只有当该Python脚本直接作为执行程序时才会执行;
当该python脚本被作为模块(module)引入(import)时,其中的main()函数将不会被执行。
两方面原因:
一方面,main函数是所有执行程序的入口;
另一方面,python的解释器是顺序执行脚本的并且不会调用任何不属于程序本身的代码和函数,需要补充说明的一点是,如果是被作为一个模块或库import到程序中,则会直接成为代码的一部分。
二、例证
下面通过程序来更好地了解main函数的作用,这里有两段程序print_main_function.py和print_main_module.py
print_main_function.py代码:
# import os
# import time
import datetime
print('Hello World!')
print('Time is ', datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S %A'))
print('__name__ value: ', __name__)
def main():
print('this message is from main function')
if __name__ == '__main__':
main()
# print(__name__)
print_main_module.py代码:
import print_main_function
print("Done!")
单独运行print_main_function.py程序,结果如下:
运行print_main_module.py程序(将print_main_function.py作为module引入执行),结果如下:
对比两段程序运行结果可发现,当直接运行某个脚本中包含main函数的程序时,该脚本(程序)中的main函数会被执行,同时程序的__name__变量值为'__main__'。
当包含有main函数的程序被作为module被import时,该module程序(如此例子中的print_main_function.py)对应的__name__变量值为该module对应的函数名称,因此该module程序(print_main_function.py)中的main函数不会被执行。
三、总结:
1. main()函数只有当该Python脚本直接作为执行程序时才会执行。
2. 需要注意的是,python程序是逐行执行的,因此事先定义main()函数很重要,以防程序中有if条件语句去执行main()函数,这样就可以避免程序执行报错NameError: name "main" not defined。
3. 程序运行一次,只有一个__main__函数,也就是运行的第一个文件。