python 中 if __name__ == '__main__' 的解释

主要解释下python 中 if __name__ == '__main__' 的意思

先来看两个简单的示例。

demoa.py 文件

#定义一个全局变量
PI = 3.14
def print_pi():
    print 'PI:{}'.format(PI)

def say_hello():
    print 'hello world'

say_hello()
demob.py 文件

from demoa import PI

def calc_round_area(radius):
    return PI * (radius ** 2)

print calc_round_area(2)

执行demob.py 文件,结果如下:

hello world
12.56

由执行结果可以看到,执行demob.py 文件时,demoa.py 文件中的 say_hello() 函数先执行了。

现在,修改demoa.py 文件为如下内容:

#定义一个全局变量
PI = 3.14
def print_pi():
    print 'PI:{}'.format(PI)

def say_hello():
    print 'hello world'

if __name__ == '__main__':
    say_hello()

再次执行demob.py 文件,结果如下:

12.56

由上述执行结果可以看到,demoa.py 文件中的say_hello() 函数未执行。从上述的例子中,可以看出 if __name__ == '__main__' 的作用了。

一个模块A中定义了一个函数a,并在模块A中直接调用了函数a(没有在if __name__ == '__main__' 下调用). 
在模块B 中导入模块A, 在执行模块B 的内容时,模块A 中的函数a 会先被调用。
(也就是说,在模块B 中导入模块A 时,会把A 中的代码执行一遍。)

简单说明

简单理解__name__ == '__main__'
__name__是内置变量,可用于表示当前模块的名字。
demoa.py,在demob.py中,它是demoa(__name__ == 'demoa');在demob自己眼中,它是它自己(__name__ == '__main__')

demob.py 文件中

import demoa

def calc_round_area(radius):
    return demoa.PI * (radius ** 2)

print calc_round_area(2)
print __name__  # __main__
print demoa.__name__  # demoa

if __name__ == '__main__'的意思是:当.py文件被直接运行时,if __name__ == '__main__'之下的代码块将被运行;当.py文件以模块形式被导入时,if __name__ == '__main__'之下的代码块不被运行。

种一棵树最好的时间是十年前,其次是现在!
原文地址:https://www.cnblogs.com/gaozhidao/p/12313745.html