zoukankan      html  css  js  c++  java
  • python-模块详解

    模块:

    模块的分类:

    第三方模块/扩展模块:没在安装python解释器的时候安装的那些功能

    自定义模块:你写的功能如果是一个通用的功能,那你就把它当做一个模块

    内置模块:安装python解释器的时候跟着装上的那些方法

    什么是模块:

    • 有的功能开发者自己无法完成,这样的话需要借助已经实现的函数类来完成这些功能
    • 你实现不了的功能都由别人替你实现了
    • 操作系统打交道
    • 和时间
    • 1000取随机数
    • 压缩一个文件
    • 和网络通信
    • 别人写好的一组功能 文件夹/py文件/C语言编译好的一些编译文件

    为什么要有模块?

    • 分类 管理方法
    • 节省内存
    • 提供更多的功能

    模块的创建和导入;

    import my_module  要导入一个py文件的名字,但是不加.py后缀名
    import my_module  模块的名字必须要满足变量的命名规范
    一般情况下 模块都是小写字母开头的名字

    PEP8规范:

    所有的模块导入都应该尽量放在这个文件的开头
    模块的导入也是有顺序的
    先导入内置模块
    再导入第三方模块
    最后导入自定义模块

    import


    import 的时候发生了什么
    在import的时候命名空间的变换
    重命名 as
    一行导入多个模块

    from ... import ...

    from import 的时候发生了什么 仍然相当于执行了整个py文件
    在import的时候命名空间的变换

    重命名 as
    一行导入多个名字 导入了什么 就能使用什么 不导入的变量 不能使用 不导入并不意味着不存 而是没有建立文件到模块中其他名字的引用
    from 模块 import *
    * 和 __all__ 的相关性 __all__可以控制*导入的内容

    from my_module import *
    login()
    from my_module import name
    print(name)

    模块相关的其他知识


    1.把模块当成脚本运行 : 从本模块中反射本模块中的变量

    if __name__ == '__main__':
    所有不需要调用就能执行的内容

    import sys
    getattr(sys.modules[__name__],'要反射的变量名')


    2.模块搜索路径 sys.path

    模块没导入之前在哪儿? 在硬盘上

    安装python
    python整个包的结构不变
    它会记录一个安装目录
    其他所有目录都是根据安装目录来写死的
    除了你当前运行的脚本所在的目录和pycharm在你打开项目的时候给你添加进来的项目根目录
    剩余所有都是python内置的目录
    内置模块的导入
    第三方模块的导入
    内置模块的导入和第三方模块的导入都不需要你操心了
    自定义的模块能否被导入
    看sys.path当中 是否存在你要导入的文件 所在的目录

    总结:
    模块的搜索路径全部存储在sys.path列表中,导入模块的顺序,是从前到后找到一个符合条件的模块就立即停止不再向后寻找
    如果要导入的模块和当前执行的文件同级,直接导入即可
    如果要导入的模块和当前执行的文件不同级,需要把要导入模块的绝对路径添加到sys.path列表中

    3.pyc编译文件

    python的执行
    解释 - 编译
    当一个文件作为一个脚本被导入的时候
    就会在这个文件所在的目录的__pycache__下生成一个编译好的文件
    为了之后导入这个文件的时候直接读这个编译好的pyc文件就可以
    可以节省一些导入时候的时间

    4.重新加载模块 已经导入的模块即便被修改在程序执行过程中也不会生效

    importlib.reload(aaa) # 表示重新加载
    reload这种方式可以强制程序再重新导入这个模块一次
    非常不推荐你使用

    5.模块的循环引用 - 不允许

    在模块的导入中 不要产生循环引用问题
    如果发生循环导入了
    就会发现明明写在这个模块中的方法,确偏显示找不到




  • 相关阅读:
    Bzoj 2820: YY的GCD(莫比乌斯反演+除法分块)
    Cogs 2221. [SDOI2016 Round1] 数字配对(二分图)
    Cogs 750. 栅格网络(对偶图)
    最小环问题
    浅谈卡特兰数
    洛谷 P1744 采购特价商品
    HDU 1212 Big Number
    HDU 2108 Shape of HDU
    HDU 1029 Ignatius and the Princess IV
    HDU 1021 Fibonacci Again
  • 原文地址:https://www.cnblogs.com/zycorn/p/9415073.html
Copyright © 2011-2022 走看看