zoukankan      html  css  js  c++  java
  • 当直接运行包含main函数的程序时,main函数会被执行,同时程序的__name__变量值为'__main__'

    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函数不会被执行。

    结论:因此需要注意的是,python程序是逐行执行的,因此事先定义main()函数很重要,以防程序中有if条件语句去执行main()函数,这样就可以避免程序执行报错NameError: name "main" not defined

  • 相关阅读:
    OleDbCommand 的用法
    递归求阶乘
    C#重写窗体的方法
    HDU 5229 ZCC loves strings 博弈
    HDU 5228 ZCC loves straight flush 暴力
    POJ 1330 Nearest Common Ancestors LCA
    HDU 5234 Happy birthday 01背包
    HDU 5233 Gunner II 离散化
    fast-IO
    HDU 5265 pog loves szh II 二分
  • 原文地址:https://www.cnblogs.com/vmsysjack/p/14161546.html
Copyright © 2011-2022 走看看