• 11 模块、模块的搜索顺序、__file__内置属性、__name__属性


    模块的概念

    一个python文件就是一个模块。

    模块名同时也是一个标识符,需要符合标识符的命名规则。

    在模块中定义的全局变量、函数、类 都是个外界提供的直接使用的工具

    模块就好比工具包,要想使用一个模块,需要先导入它。

    模块的导入方式

    模块在被导入时,模块中没有任何缩进的代码,会被完全执行一遍。

    推荐方法

    import 模块名1
    import 模块名2
    

      

    不推荐方法

    import 模块名1,模块名2
    

      

    模块的别名

    模块导入后,可以给模块起别名,别名遵循大驼峰命名规则

    格式: import 模块名 as 别名

    模块导入的顺序规范

    按以下优先级导入

    • 官方标准模块
    • 第三方模块
    • 应用程序模块

    部分工具导入(局部导入)

    如果指向导入某个模块中的部分工具(全局变量、函数、类,则可以使用部分工具导入方法。

    优点:导入的工具可以直接使用,无需使用 模块名.的方法调用。

    格式: from <模块名> import <工具名>

    工具的别名:

    如果导入了两个名字相同的工具,则最后导入的会覆盖前面导入的。为了解决这个问题,也可以使用as关键字来给导入的工具起别名。

    别名遵循标识符命名规则

    例如:

    from xh_25_测试模块1 import module_name as tools1
    

      

    通过form <模块名> import * 导入全部工具(不推荐!了解即可)

    通过此方法可以模块的全部工具,但是不推荐

    因为工具重名覆盖不会有任何提示,不便于问题的排查。

    模块的导入顺序

    • 在python系统中,内置有系统模块方便用户使用(例如random模块)。
    • 在导入模块时,按照:当前文件目录、python系统模块目录 的顺序进行搜索。
    • 由于存在系统模块目录,在给模块起名时,不要和系统模块名相同。

    __file__内置属性

    使用:print(模块名.__file__)可输出模块的所在绝对路径。

    如果直接print(__file__)则输出当前python文件的绝对路径。

    __name__与模块测试代码块

    测试代码块

    在开发中,通常一个模块中都会写有测试代码块,这些代码块通常会将测试结果输出到控制台。

    而导入模块时,模块中没有任何缩进的代码,会被完全执行一遍。

    但对于一个模块来说,我们只需要它的工具,并不需要它的测试代码输出测试结果到控制台。

    为了解决这个问题,我们需要使用到__name__内置属性。

    __name__

    __name__属性储存的是文件的模块名。对于当前模块下对它进行的调用,它的值都是字符串"__main__"。

    但是!如果这个模块被导入到其它模块,此时__name__属性的值则为被调用模块的值。

    解决导入模块时测试代码块输出的问题

    利用__name__属性的特性,我们可以使用一个if语句来解决这个问题。

    在被导入的模块中,使用if 判断__name__的值,如果是"__main__"(在此模块测试时),则执行if下的测试代码,否则(被导入时),就不执行。

    如:

    if __name__ == "__main__":
        """if下的区域即为测试区域,测试代码就写在这里"""
        print("测试代码正常执行")
    

      

  • 相关阅读:
    py基础之模块与包
    py装饰器,生成器,迭代器
    py函数式编程
    py基础之列表生成式
    算法基础之递归算法
    Py基础之函数
    py基础之无序列表
    py基础之数据类型及基本语法
    jsp报错问题汇总
    mysql问题汇总
  • 原文地址:https://www.cnblogs.com/Scorpicat/p/11726212.html
Copyright © 2020-2023  润新知