lchengshao

模块的使用

1. 模块简介

复制代码
1. 什么是模块?
     模块就是一些列功能的集合,模块中就是提前写好了很多的功能,直接拿来使用

2. 为什么要用模块?
     站在巨人的肩膀上,别人写好的一些功能我们把它下载下来直接用在我们自己的项目中,大大提高开发效率

3. 模块的分类
    1. 内置模块(python解释器原来就存在的,在任何位置,任何时间都可以直接使用)
        eg:time
       2. 第三方的(别人写好的模块,人家放在了网上,去网上下载)
       3. 自定义的(我们自己写的模块)


4. 模块存在的形式
    一共有4钟形式,只需要掌握2钟
    1. 我们自己写的python代码(.py文件)
        # 一个py文件就是一个模块
        
    2. 包的形式:就是一系列py文件的组合(文件夹)
        # 文件夹内部有一个__init__.py文件
"""
    以后我们再开发一些复杂的功能的时候,就可以想想或者查查有没有别人已经写好了,直接下载下来使用
"""
复制代码

2. 模块的导入方式之 import 句式

复制代码
import md # 导入模块的时候,只写模块名字,不要写后缀名字 代表导入的是这个文件的全部模块 

注意:
"""
    学习模块的时候一定要弄清楚:谁是执行文件,谁是导入文件?
    
    运行当前文件,会导入md文件到此文件中,并且会执行导入文件
    
    导入文件多次,那么,也只会执行一次导入文件中得代码,只需要导入一次即可
    
    
    导入文件的时候发生了什么事儿?
        1. 首先会运行执行文件,产生执行文件的全局名称空间
        2. 运行导入文件
        3. 会产生导入文件的全局名称空间,把导入文件中的名字都丢到全局名称空间中
        4. 会在执行文件中产生一个名字md指向导入文件的名称空间
        
"""
复制代码

3. from  import 句式

复制代码
from md import money,read1,read2,change  # from the md.py
import md
"""
    from...import...句式
        导入模块也会执行导入文件,多次导入也只会执行一次,跟import句式一样
    
    导入文件的时候发生了什么事儿?
        1. 首先会运行执行文件,产生执行文件的全局名称空间
        2. 运行导入文件md
        3. 会产生导入文件的全局名称空间,把导入文件中的名字都丢到全局名称空间中
        4. 会在执行文件中产生一个名字money指向导入文件的名称空间中得money
        
    如果使用from...import...句式的情况,在执行文件中会出现名字冲突的情况(在执行文件中出现了和导入的名字一样的时候)
        出现冲突的时候离谁近用谁的
    
    以后所有的导入语句都写在文件的开头
"""
复制代码

4. 导入文件的用法

复制代码
1. 起别名 
    from md import money as m
    from md import read1 as r1

2. 连续导入
    import md
    import time
    import os
    import sys
    
    import md,time,os,sys # 也可以一次性导入

3. 通用导入
    from md import *
    from md import *

限制导入 :__all__ = ['money', 'read1', 'change']

4. from.improt 模块名
        . 代表的是当前目录下的文件
        .. 代表的是上一级的文件目录 但不会超出文件夹

复制代码

5. 判断文件类型(执行文件、导入文件)

if __name__ == '__main__': # md
    read2()

if __name__ == '__main__':
    '''在这个判断里面写的代码,只有是以执行文件运行的时候,才会被执行,当被当成导入文件的时候,不会被运行'''

 6. 名字的查找顺序

复制代码
"""
1. 先从内存中查找
2. 再从内置模块中查找
3. 最后去环境变量sys.path中查找

如果以上都找不到,直接报错!
"""
# 以后再给文件名或者叫模块名起名字的时候一定不能跟内置模块名冲突

"""如果找不到,那就去sys.path中查找"""
import sys
print(sys.path)
# 上面的列表中第一个元素永远是当前文件所在的路径

以后遇到模块找不到的情况:
    1. 把模块所在的路径添加到sys.path中
        import sys
        sys.path.append(r'D:\Python27\day20\aaa\bbb')
    2. 使用from...import句式
        from aaa.bbb.ccc import m1
        from aaa.bbb.ccc.m1 import f1

        f1()
        m1.f1()
复制代码

7. 绝对导入和相对导入

复制代码
"""在导入模块的时候,模块的查找始终以执行文件所在的路径为准"""

绝对导入:
    它始终是以执行文件所在的sys.path路径为基准查找

相对导入:
    """
        .(句点符)
        . 代表的是当前路径
        .. 代表的是上一级路径    
    """
# 相对导入可以打破始终以执行文件及准的查找顺序
from .ccc import m2
from .ccc.ddd import m2

只要py文件中出现了相对导入语句(.开头的语句),那么,这个文件就不能当成执行文件了,只能被导入
复制代码

8. 包的使用

复制代码
什么是包?
    就是文件夹,其实就是文件夹中包含了一些列的py文件(模块)
    # 包就是一些列模块的组合
包和模块有什么区别呢?
    包中有一个特殊文件:__init__.py文件 当前·包下的模块都可以放到__init__.py 中 因为是先在这个文件中先找

    
"""导包其实就是在导包下的__init__.py文件的!"""
# 首次导入包这种模块,发生两件事
# 1、创建模块的名称空间,运行包下的__init__.py的文件,将运行过程中产生的名字都丢入模块的名称空间中
# 2、在当前位置拿到一个名字aaa,该名字指向__init__.py的名称空间,即aaa.名字,名字是来自于__init__.py中的
复制代码

 

posted on   Lubomierz  阅读(20)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix

导航

统计信息

点击右上角即可分享
微信分享提示