• 如何理解if __name__ == '__main__'


    Python初学者在学习代码时常常会看到if __name__== '__main__': 这样的代码,这个是什么意思呢?

    Python中有很多内置变量和内置方法(也称魔术变量/魔术方法),为了避免和用户的变量冲突,内置变量和内置方法通常以两个下划线开头和结尾。

    常见的内置变量有:

    • __file__:表示当前文件(路径)
    • __package__:当前文件所在包名
    • __name__:当前模块名
    • __cached__: 当前缓存路径
    • __buildins__: 当前可用所有内置方法(字典)

    注意这些都是正常的变量,使用时不加引号。

    内置(魔术)方法就更多,如__init____str____get_attr__等等。

    所以,if __name__ == '__main__':是判断当前模块名是不是字符串'__main__'
    我们知道Python中每个文件(模块)都可以导入其他模块。
    当前运行的文件(模块)被称为主模块,此时其模块名__name__为字符串'__main__'
    而其他导入的模块的模块名__name__则为导入的模块名(导入路径+文件名去掉.py)。

    例如, 有两个文件a.py和b.py,a中导入b模块执行,代码如下:
    b.py代码

    print('我是b模块,我的模块名为', __name__)
    
    if __name__ == '__main__':
        print('只有我自己运行时才会打印,别人导入我时不会打印')
    

    a.py代码

    import b
    print('我是a模块,我的模块名为', __name__)
    

    运行a.py后打印结果为:

    我是b模块,我的模块名为 b
    我是a模块,我的模块名为 __main__
    

    这里我们可以看到a模块是主模块,及运行的是a.py文件。b.py中if __name__=='__main__':中的代码没有打印。
    如果我们运行b.py,则会打印if __name__=='__main__':中的代码,运行结果如下:

    我是b模块,我的模块名为 __main__
    只有我自己运行时才会打印,别人导入我时不会打印
    

    因此 if __name__ == '__main__':可以用来判断是从当前文件运行的,如果是当前模块才执行if里面的代码。
    也称为模块私有代码, 常用作测试当前模块使用,并且不影响别的模块导入使用。

  • 相关阅读:
    SQL查询效率100w数据查询只要1秒
    超级实用且不花哨的js代码大全 (四) JavaScript[对象.属性]集锦
    Sql Server实用操作维护小技巧集合
    asp.net截取字符串方法
    自己整理的asp.net 缓存 相关资料
    【译】初识SSRS 通向报表服务的阶梯系列(一)
    【译】无处不在的数据 通向报表服务的阶梯系列(三)
    【译】SSRS基础 通向报表服务的阶梯系列(二)
    浅谈SQL Server中的事务日志(三)在简单恢复模式下日志的角色
    SQL Server中生成测试数据
  • 原文地址:https://www.cnblogs.com/superhin/p/16103732.html
Copyright © 2020-2023  润新知