首页 > 编程语言 >进入python的世界_day17_python基础——了解模块、如何使用和导入模块、包的原理

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

时间:2022-10-18 19:25:21浏览次数:52  
标签:__ 文件 python 导入 day17 模块 import 执行

一、模块介绍

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']  针对*可以限制拿的名字
    ——————————————————————————————————————————————
    大多数情况不会用,太容易混淆
    

标签:__,文件,python,导入,day17,模块,import,执行
From: https://www.cnblogs.com/wznn125ml/p/16803731.html

相关文章

  • python中展示json数据不换行(手动换行)
    https://blog.csdn.net/chichu261/article/details/82784904Settings—>keymap—>在搜索框输入wraps—>选择UseSoftWraps—>之后设置快捷键就可以了。针对第......
  • Python基础17
    今日内容概要索引取值与迭代取值的差异模块简介模块分类导入模块的两种句式导入模块补充说明循环导入问题判断文件类型模块的查找顺序绝刀导入与相对导入包概述......
  • 模块与导包
    索引取值与迭代取值的差异索引索引可以重复取值,任意位置取值不支持无序类型的数据取值迭代取值迭代取值只能按照,迭代器内部顺序依次取值支持所有类型的数据取值两......
  • Python爬虫(学习笔记)
    Python爬虫(学习笔记)  常见的反爬机制及应对策略名称描述解决方案/反反爬措施1.Headers 从用户的headers进行反爬是最常见的反爬策略,Headers是......
  • 【Python】第3章-7 求最大值及其下标
    本题要求编写程序,找出给定的n个数中的最大值及其对应的最小下标(下标从0开始)。输入格式:输入在第一行中给出一个正整数n(1<n≤10)。第二行输入n个整数,用空格分开。输出格式......
  • Python 2 数据类型
    关键字规则变量定义使用#作者:咸瑜#代码时间:2022/10/1715:57name="咸瑜"print('值',name)print('id',id(name))print('类型',type(name))......
  • Python项目生成requirements.txt文件
    一、前言对于Python项目,生成和使用requirements.txt是十分必要的。通过requirements.txt可以一次性保存和安装项目所需要的所有库。尤其是在不同电脑操作时。allure......
  • python模块
    今日内容概要索引取值与迭代取值的差异模块简介导入模块的两种句式导入模块的局势补充循环导入问题及解决策略判断文件类型模块的查找顺序模块的绝对导入与相对......
  • 模块简介
    今日内容概要索引取值与迭代取值的差异模块简介导入模块的两种语法句式模块循环导入问题解决策略判断文件类型模块查找顺序模块的绝对导入与相对导入1.索引取值......
  • 如何让不给听得歌乖乖听话?python教你如何做...
    前言嗨喽,大家好呀~这里是爱看美女的茜茜呐又到了学Python时刻~在面对想听的歌没得权时,正常人一般的操作是百度一下又或者直接找朋友借但是程序员就不一样了~直接展示......