进入python的世界_day17_python基础——了解模块、如何使用和导入模块、包的原理

一、模块介绍

1.什么是模块

​ 其实我们前一阵已经接触过了,import xxx 、from xx import xxx

​ 能够有一定功能的集合体就是模块,比如有某些功能的py文件,包含这个文件的文件夹

​ python之所以流传的这么广有很重要一个因素就是模块非常丰富,社区活跃,干活效率高

2.模块的分类

  • 内置模块

    ​ >>>pycharm准备好了的

  • 第三方模块

    ​ >>>行业大佬写的,我们可以拿来使用里面的功能

  • 自定义模块(自创模块)

    ​ >>>自己写的python文件,.py文件就是一个模块

3.好处

  • 能极大的减少代码的冗余,使结构更清晰
  • 能提升写代码的效率

二、怎么用模块

​ 只要运行文件,必然会涉及到名称空间来存放名字,可以在全局导模块,也可以在局部导模块

1.import 导入模块名字

​ 比如说有一个叫a的py文件(a.py),那模块名就是a

​ 模块的名称空间和执行文件的名称空间的关系图我们来画一下

​ !!!注意是首次哦,之后的导入不会再产生新的名称空间,没必要

​ 因为模块点名字是指名道姓,如果执行文件A本身自己也有某名字,当在执行文件A内调用自身的变量名,不受模块的影响,就算模块那边用了破界函数关键字声明,也不会影响到执行文件A这边的名称空间

​ 执行文件的相同变量名和模块文件的相同变量名是指向关系,模块改不会影响执行文件,是如果再调用模块中的被改过变量名,会得到模块中变量名对应的最新的数据值

​ 如果要导入多个模块,推荐用:

​ import time

​ import func

​ import a

​ 这种格式为好

2.import 导入模块拓展

​ 如果导入模块名字不好认或者太长,可以拿一个变量名接受这个调火来的内存地址,这样以后直接变量名点也是一样的使用

​ 例:import hihihihihihihi as t

​ t.xxx = hihihihihihihi.xxx

3.from import导入模块名字

​ import必须加前缀才能调用模块的名称,所有有一种针对模块某一名称的导入方法

​ from...import...

  • 缺点:

​ 容易名称混淆

三、循环导入

  • 首先,不应该让两个模块相互导入,因为某模块导入一次后Python就不会再次理会导入,如果导入完毕时变量名未产生,那就不会产生名称空间,循环导入就会报错

  • 如何解决:

    ​ 1.把变量名赋值代码上移到导入模块代码前(提前准备好名字,产生好名称空间)

    ​ 2.造一个函数,利用函数不调用不执行代码的特点——只针对一个函数用到的前提

四、判断文件类型

1.缘由

​ 模块作者在写模块时,也想测测自己模块的功能,比如一些函数,如果在自己模块文件中直接写函数名(),自己看确实没问题,但是别人导入这个模块时,就会也跑一次函数名执行,会干扰别人的执行文件功能,所以就有一个内置函数功能,可以判断当前文件是本身还是被调用

2.用法及pycharm优化

__name__
如果是自身,打印后会反馈__main__
如果是被导入,打印后会反馈模块名字

可以把自己想测试的代码丢入到判断文件类型的条件的子代码下去
if __name__ == '__main__':
    func()
    ....
else:
    pass
pycharm优化:
	顶格敲一个main,就会自动补全if __name__ == '__main__':
main = "if __name__ == '__main__':"

五、模块的查找顺序

​ 是文件一定有存放的路径,所以就来捋捋查找的优先级

!!!一定要清楚谁是执行文件,谁是被导入文件

优先级:

​ 1.内存

​ 如果调一次完成了,会暂存在内存中,在再次执行调用前把模块删除了,可以再执行一次,然后会被释放,再导会报错

​ 2.内置模块

​ 3.文件夹找

​ >>>按照sys.path中存放的文件的顺序依次查找

  • sys模块

    	执行文件都可以调用sys,打印一下sys.path可以查看执行文件所在的系统环境
    

    如果模块和执行文件不在一个文件夹内:

    ​ import sys

    ​ sys.path.append(r'想加的模块的文件夹的路径')

    ​ 就可以使用了

就可以了>>>>

六、包

1.定义

就是一个包含有__inin__.py文件的文件夹
本质就是一个模块
python2必须要求__inin__.py文件 python3无所谓
如果导包的名字,就是在导__inin__

七、模块的导入(绝对导入、相对导入)

一个例子:
	如果一个模块开发者,有一个模块,功能很多,不想后期自己维护太乱,可以把每个功能单独拎出来做一个模块,然后用一个包包住,在__init__.py文件中把包路径下的文件导入一下即可,包的名字用以前模块的名字,这样日后使用这个个包的人不会察觉到原模块已经变成包了,,只要添加一下包的那个文件夹的路径到环境变量依旧可以正常使用
    

绝对导入:以包的文件夹路径来导入(基于执行文件的根目录)

相对导入: .在路径中表示当前目录
..在路径中表示上一层目录
....在路径中表示上上一层目录
不在依据执行文件所在的sys.path 而是以模块自身路径为准
from . import b
相对导入只能用于模块文件中 不能在执行文件中使用

  • 拓展:

  • 导入模块书写的规范

    ​ 1内置模块

    ​ 2第三方模块

    ​ 3自创模块

  • 自定义模块命名推荐用纯小写+_的风格

  • from a import *  *默认是将模块名称空间中所有的名字导入
    被导入模块会默认有一个__all__  = []的列表,列表里面存所有的名称
    __all__  = ['名字1', '名字2']  针对*可以限制拿的名字
    ——————————————————————————————————————————————
    大多数情况不会用,太容易混淆
    
posted @   yiwufish  阅读(239)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示