zoukankan      html  css  js  c++  java
  • 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__'之下的代码块不被运行。

    种一棵树最好的时间是十年前,其次是现在!
  • 相关阅读:
    系统测试的策略
    POJ1611(并查集)
    POJ2752(KMP)
    POJ3176(DP)
    HDU2579(BFS)
    HDOJ1175(BFS)
    HDOJ1242(BFS)
    HDOJ1180(BFS)
    HDOJ1372(BFS)
    HDOJ2717(BFS)
  • 原文地址:https://www.cnblogs.com/gaozhidao/p/12313745.html
Copyright © 2011-2022 走看看