• 模块的初识与引用


    模块

    • 一个模块就是一个py文件
    • 如果10万行代码都写在一个文件中会造成
      1. 不易维护
      2. 效率低
    • 分文件:10个文件,每个文件有50个函数,有一些相同功能或者相似功能的函数.代码冗余,重复性.我们应该将这10个函数提取出来,放在一个文件中,随用随拿.
      2. 容易维护,组织结构更清晰
    • 一个模块就是一个py文件,这个模块存储很多相似的功能,相似的函数集合体
    • 模块的分类:
      • 内置模块,标准库,python解释器自带的times,os,sys等等,200多种.
      • 第三方库(模块),各种大神写的一些模块,通过pip install...安装.600多种.
      • 自己写的模块,自定义模块

    模块的引用

    import引用

    引用模块的过程

    1. 将tbjx.py文件加载到内存.
    2. 在内存中创建一个以tbjx命名的名称空间.
    3. 通过tbjx名称空间的名字.等方式引用此模块的名字(变量,函数名,类名等等).
    

    注意点

    1.坑:通过模块名.的方式引用此模块的名字时,一定一定是从此模块中寻找. 没有就报错
    2.通过import 引用模块 他有自己的独立名称空间,与当前执行文件没有关系.
    3.可以起别名:将一个比较长的模块名化简成简单的.
    

    举例

    import time,os,sys  #同时引入多个模块 不推荐.
    import time
    import os
    import sys
    易于阅读 易于编辑 易于搜索 易于维护。
    

    from 引入模块

    原理

    相当于从 被引用模块 的全局空间中将 引用的变量与值的对应关系复制到当前执行文件的全局名称空间中.
    

    注意

    优点:使用起来方便了.
    缺点:容易与当前执行文件产生覆盖效果.
    
    特殊情况:极值情况,工作中不会出现.(了解)
    因为如果你要是引用一些模块的变量,那么执行文件中就不应该出现同名变量.
    

    使用

    from sq import name
    from sq import name as n#也可以起别名
    from sq import * 与__all__配合使用(写在模块文件中)
    	__all__ = ['name', 'read1', 'read2']
    

    __name__的用法

    用来控制.py文件在不同的应用场景下执行不同的逻辑(或者是在模块文件中测试代码)
    被引入 
    	就是原名__name__ == '模块名':
    当前脚本运行
    	就是__name__ == '__main__':
    

    模块引用路径

    寻找模块的路径: 内存 ----> 内置模块  ---> sys.path中找
    只要这三个地方:内存 内置模块 sys.path可以找到这个引用的模块的路径,这个模块就可以直接引用到.
    

    如何引用到在其他文件夹的sq.py模块

    第一步。先把sq.py的路径加进去sys.path中
    import sys
    sys.path.append(r'D:s2316-20模块 包day16 初识模块 及引用')
    import sq
    print(sq.name)
    # import sys
    # print(sys.path)#是python的搜索模块的路径集
    # import sq
    # print(sys.modules)
    #
    

    sys.modules方法

    python sys.modules模块
    sys.modules是一个全局字典,该字典是python启动后就加载在内存中。每当程序员导入新的模块,sys.modules都将记录这些模块。字典sys.modules对于加载模块起到了缓冲的作用。当某个模块第一次导入,字典sys.modules将自动记录该模块。当第二次再导入该模块时,python会直接到字典中查找,从而加快了程序运行的速度。
    字典sys.modules具有字典所拥有的一切方法,可以通过这些方法了解当前的环境加载了哪些模块
    
  • 相关阅读:
    .net大文件上传
    java文件上传和下载
    文件上传系统
    plupload上传大文件
    代码坏味道之夸夸其谈的未来性
    freemarker中的substring取子串
    【翻译自mos文章】在Oracle GoldenGate中循环使用ggserr.log的方法
    3种浏览器性能測试
    SDUTOJ 2772 KMP简单应用
    C++库研究笔记--用__attribute__((deprecated)) 管理过时代码
  • 原文地址:https://www.cnblogs.com/saoqiang/p/12388517.html
Copyright © 2020-2023  润新知