python编程中的if __name__ == 'main': 的作用和原理

python的文件有两种使用的方法:第一是直接作为脚本执行,第二是import到其他的python脚本中被调用(模块重用)执行。

因此if __name__ == 'main': 的作用就是控制这两种情况执行代码的过程,在if __name__ == 'main': 下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而import到其他脚本中是不会被执行的。eg: 

             在test.py写入如下代码:
    • print("I love chengdu!")
      if __name__ == '__main__':
          print("I love you!")

              运行test.py,结果如下。即,if__name__='__main__':  语句之前和之后的代码都被执行。

    • I love chengdu!
      I love you!

               然后在同一个文件夹中创建一个import_test.py的脚本,只输入如下代码:

    • import test

                执行import_test.py脚本,输出结果如下:

    • I love chengdu!

                    只输出了第一行字符串,即,if__name__=='__main__':  之前的语句被执行,之后的没有被执行。

 

原理:

        每个python模块(python文件,也就是此处的test.py和import_test.py)都包含内置的变量__name__,当直接执行模块的时候,__name__等于文件名(包含了后缀.py);如果import到其他模块中,则__name__等于模块名称(不包含后缀.py)。而 '__main__' 等于当前执行文件的名称(包含了后缀.py)。进而当模块被直接执行时,__name__=='__main__'为真。

        同样举例说明,我们在test.py脚本if__name__=='__main__':  之前加入print(__name__),即将__name__打印出来,可以看出,此时变量__name__的值为:__main__ 。模块内容和执行结果如下:

    • print("I love chengdu!")
      print(__name__)
      if __name__ == '__main__':
          print("I love you!")
      
      >>>----------执行结果如下------
      I love chengdu!
      __main__
      I love you!

再执行import_test.py,模块内容和执行结果如下:

    • import test
      
      >>>--------执行结果如下--------
      
      I love chengdu!
      test

 

 此时,test.py中的__name__变量值为test,不满足__name__=='main' 的条件,因此无法执行其后的代码。

 

 

 

                      

 

 

 

posted @ 2019-11-20 15:21  城南九歌  阅读(166)  评论(0)    收藏  举报