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__'之下的代码块不被运行。

    种一棵树最好的时间是十年前,其次是现在!
  • 相关阅读:
    bugku crypto 告诉你一个秘密(ISCCCTF)
    递归法求组合数C(m,n)
    bugku 逆向 take the maze
    P1118 [USACO06FEB]数字三角形`Backward Digit Su`… (dfs)
    递归 dfs 记忆化搜索 动态规划
    c++ 取整:四舍五入 向上取整 向下取整
    2019 计蒜之道 初赛 第一场 商汤的AI伴游小精灵
    华南理工大学“三七互娱杯” D HRY and array
    华南理工大学 “三七互娱杯” G HRY and tree
    2019年湘潭大学程序设计竞赛(重现赛)
  • 原文地址:https://www.cnblogs.com/gaozhidao/p/12313745.html
Copyright © 2011-2022 走看看