lomg 发表于 2015-4-27 08:38:31

python 中的if __name__ == 'main'

网上搜索的,下了保存

关于python模块问题:

    首先说模块:模块基本上就是一个包含了所有你定义的函数和变量的文件。为了在其他程序中重用模块,模块的文件名必须以.py为扩展名。我们利用import语句 输入需要使用的模块。
    每个模块都有一个内置的变量__name__。在模块自己运行的时候,该__name__就等于'main',而如果被其他的模块import,则该模块的__name__就等于模块名,也就是文件名去掉py扩展名的部分。
如下例子:转自http://www.iyunv.com/jansen2008/archive/2009/08/01/1536518.html
test.py

def test():
    print "test is running"

if __name__ == "__main__":#自运行时调用该程序块
    print "test main is working"

if __name__ == "test":#import时调用该程序块
    print "test is invoked"


自执行效果如图:

import执行效果如图:

执行test()方法效果如图:

通过这个例子,python应用模块的自测试程序都放在 if __name__ == "__main__" 条件块下是多么方便。
  
  
  if name=='_main_': #‘非导入时启动’功能
main()

  
  
  就是直接执行这个脚本时, name='_mian_' 就成立了。
  就是执行本单元文件内的代码的入口
比如,你写一个代码文件 x.py
当你直接用python运行x.py的时候,会通过这个__main__作为入口!
  这样写可以方便测试,这个判断主要是判断主执行文件是不是当前文件。
  
  你运行当前脚本,就会执行if __name__=="__main__"下的函数,如果你是当模块被其他程序import的,那么就不会执行。主要是测试用,测试你写的这个模块有没有实现你想要的功能
  
  一般来说python写的文件既可以运行,也可以作为模块来被其他程序调用。
当程序是自身运行时,其__name__的值就是字符串"__main__"了,如果是被其他程序调用,那么它的__name__的值就不是字符串"__main__",使用下面这个判断的作用就是使程序只有在自身被运行的情况下才执行,如果只是被调用,那么就不运行了。
例如,有一个python程序是main.py,代码如下:



Python code


def run():
print "你好,世界!"
if __name__=="__main__":
run()

  
当你双击main.py时,那么这个程序就会运行了——因为它的__name__的值为"__main__"。
当你在其它程序中调用这个main.py文件,例如use.py:



Python code


import main.py #此处把前面的main.py作为模块调用

if __name__=="__main__":
main.run() #调用main.py中的run()函数!


  
这个if __name__=="__main__"判断,可以使这个条件语句块中的命令只在它独立运行时才执行!
(注意:此处main.py,和use.py两个文件必须放在一起!)
  
  
  


  当你打开一个.py文件时,经常会在代码的最下面看到if __name__ == '__main__':,现在就来介 绍一下它的作用.
  模块是对象,并且所有的模块都有一个内置属性 __name__。一个模块的 __name__ 的值取决于您如何应用模块。如果 import 一个模块,那么模块__name__ 的值通常为模块文件名,不带路径或者文件扩展名。但是您也可以像一个标准的程序样直接运行模块,在这 种情况下, __name__ 的值将是一个特别缺省"__main__"。
  ///////////////////////////////////////////////////////////////////////////////////////////////////
  在cmd 中直接运行.py文件,则__name__的值是'__main__';
  而在import 一个.py文件后,__name__的值就不是'__main__'了;
  从而用if __name__ == '__main__'来判断是否是在直接运行该.py文件
  如:
  #Test.py
  class Test:
  def __init(self):pass
  def f(self):print 'Hello, World!'
  if __name__ == '__main__':
  Test().f()
  #End
  
  你在cmd中输入:
  C:>python Test.py
  Hello, World!
  说明:"__name__ == '__main__'"是成立的
  
  你再在cmd中输入:
  C:>python
  >>>import Test
  >>>Test.__name__                #Test模块的__name__
  'Test'
  >>>__name__                     #当前程序的__name__
  '__main__'
  无论怎样,Test.py中的"__name__ == '__main__'"都不会成立的!
  所以,下一行代码永远不会运行到!
  //////////////////////////////////////////////////////////////////////////////////
  
页: [1]
查看完整版本: python 中的if __name__ == 'main'