首页 > 代码库 > python中if __name__ == '__main__': 的解析

python中if __name__ == '__main__': 的解析

http://www.cnblogs.com/xuxm2007/archive/2010/08/04/1792463.html

 

当你打开一个.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__‘"都不会成立的!

所以,下一行代码永远不会运行到!

//////////////////////////////////////////////////////////////////////////////////

 

 

http://zhidao.baidu.com/link?url=12yWQq3fKp4vZ5i-uFAtPsp-69owQh3vcjmTFBACaoOln5VqhJAZoTpjSg4F313LXvr7_xeHFQxaEhlZOm6RG_

__name__是指示当前py文件调用方式的方法。如果它等于"__main__"就表示是直接执行,如果不是,则用来被别的文件调用,这个时候if就为False,那么它就不会执行最外层的代码了。
比如你有个Python文件里面
def XXXX():
#body
print "asdf"
这样的话,就算是别的地方导入这个文件,要调用这个XXXX函数,也会执行print "asdf",因为他是最外层代码,或者叫做全局代码。但是往往我们希望只有我在执行这个文件的时候才运行一些代码,不是的话(也就是被调用的话)那就不执行这些代码,所以一般改为
def XXXX():
#body
if __name__="__main__":
print "asdf"




http://keliang.blog.51cto.com/3359430/649318

想必很多初次接触python的同学都会见到这样一个语句,if __name__ == "__main__":

那么这个语句到底是做什么用的呢?在解释之前,首先要声明的是,不管你是多么小白,你一定要知道的是:

1.python文件的后缀为.py;

2..py文件既可以用来直接执行,就像一个小程序一样,也可以用来作为模块被导入(比如360安全卫士,就是依靠一个个功能模块来实现的,好比360安全卫士本身框架是一个桌面,而上面的图标就是快捷方式,这些快捷方式所指向的就是这一个个功能模块)

3.在python中导入模块一般使用的是import

好了,在确定知道以上几点之后,就可以开始解释if __name__ == "__main__":这个语句了。

首先解释一下if,顾名思义,if就是如果的意思,在句子开始处加上if,就说明,这个句子是一个条件语句。学习if语句的使用是很简单的,当然想要真正灵活运用还需大量的实践。

接着是 __name__,__name__作为模块的内置属性,简单点说呢,就是.py文件的调用方式。

最后是__main__,刚才我也提过,.py文件有两种使用方式:作为模块被调用和直接使用。如果它等于"__main__"就表示是直接执行。

总结:在if __name__ == "__main__":之后的语句作为模块被调用的时候,语句之后的代码不执行;直接使用的时候,语句之后的代码执行。通常,此语句用于模块测试中使用。

 

-------------------------------------------------

The if __name__ == "__main__": ... trick exists in Python so that our Python files can act as either reusable modules, or as standalone programs. As a toy example, let‘s say that we have two files:

mumak:~ dyoo$ cat mymath.py

 

mymath.py文件

1
2
3
4
5
def square(x):
    return * x
 
if __name__ == ‘__main__‘:
    print "test: square(42) ==", square(42)

 

mumak:~ dyoo$ cat mygame.py

mygame.py 文件

1
2
3
4
5
import mymath
 
print "this is mygame."
 
print mymath.square(17)

 

In this example, we‘ve written mymath.py to be both used as a utility module, as well as a standalone program. We can run mymath standalone by doing this:

mumak:~ dyoo$ python mymath.pytest: square(42) == 1764

But we can also use mymath.py as a module; let‘s see what happens when we run mygame.py:

mumak:~ dyoo$ python mygame.pythis is mygame.289

Notice that here we don‘t see the ‘test‘ line that mymath.py had near the bottom of its code. That‘s because, in this context, mymath is not the main program. That‘s what the if __name__ == "__main__": ... trick is used for.

 

在这个例子里面mygame.py里面调用square函数的时候,就不会执行mymath.py里面的main函数了。

python中if __name__ == '__main__': 的解析