这是我参与8月更文挑战的第16天,活动详情查看: 8月更文挑战
回顾复习
我们上期已经学习模块化编程
模块化编程思想能够帮助我们快速复用已开发的代码,把已经开发完善的代码封装成模块,需要用到的时候直接导入复用,来提高我们的工作效率。
模块组成包含: 函数、类、变量、可执行的代码
模块的来源有三种:
(1)Python内置模块如:time、os、sys等
(2)第三方模块如:MessagePack
(3)自定义模块
模块使用: 在程序中,通过模块导入来使用已开发好的功能
本期,我们来学习模块导入相关方式以及导入模块遇到的常见问题
🎵🎵废话不多说,我们来学习模块导入相关的知识吧,Let's go~
1. import
语句导入
👉import 语句的基本语法格式如下:
-
导入一个模块
import 模块名 复制代码
-
导入多个模块
import 模块1,模块2,... 复制代码
-
导入模块并使用新名字
import 模块名 as 模块别名 复制代码
👉import 加载的模块分为四个通用类别:
- 使用Python编写的代码(.py文件)
- 已被编译为共享库或DLL的C或者C++扩展
- 包好一组模块的包
- 使用C编写并链接到Python解释器的内置模块
2. form_import
导入
Python 中使用from...import 导入模块中的成员。基本语法格式如下:
from 模块名 import 成员1,成员2,....
复制代码
如果希望导入一个模块中的所有成员,则可以采用如下方式:
from 模块名 import *
复制代码
如果导入模块成员需要取别名,则可以采用如下方式:
from 模块名 import 成员名 as 别名
复制代码
📢不建议使用 from 模块名 import *
(1)它表示导入模块中所有的不是以下划线(_)开头的名字都导入到当前位置。
(2) 由于不知道导入的名字,可能会覆盖之前已经定义的名字
(3) 可读性差,不便后期的维护查阅
3. import
与 from ...import
区别
-
import 导入的是模块
(1) 模块都是.py结尾的文件
(2) import 后面紧跟的是“文件名称”
(3) import 导入模块中的成员时,必须要添加模块名或者模块别名前缀
-
from...import 导入的是模块中的一个函数或者一个类
(1) 只能导入指定的成员
(2) 导入模块中的成员时,无需使用任何前缀,直接成员名或者成员别名
4. __import__
语句动态导入
import语句本质上是调用函数__import__()
.我们可以通过它实现动态导入,给__import__()
动态传递不同的参数值,就能导入不同的模块
动态导入模块步骤:
(1) 定义变量,并赋值为模块的名字
(2) 调用__import__()传入变量
>>> s='math'
>>> m= __import__(s)
>>> m.pi
3.141592653589793
>>> m.sin(3.14)
0.0015926529164868282
复制代码
⚠️ 一般不建议使用__import__()导入,其行为在Python2和Python3有差异,会导致意外的错误,如果需要动态导入可以importlib模块
>>> import importlib
>>> a = importlib.import_module("math")
>>> a.pi
3.141592653589793
复制代码
5. 模块搜索路径
当我们使用import语句导入模块后,Python解释器会按照如下顺序找到指定的模块文件
⭐ 模块文件查找步骤:
- 当前目录查找。在当前执行的程序文件所在目录下查找
- PYTHONPATH环境变量下的每个目录中查找
- 到Python 默认的安装site-packages目录下查找
🌟 以上目录都是保存在标准模块sys 的 sys.path 变量中,通过此变量我们可以看到指定程序文件支持查找的所有目录。
如果导入的模块没有存储在sys.path显示的目录中,导入模块运行程序后,Python解释器就会抛出ModuleNotFoundError(未找到模块)异常
6. 模块导入常见问题
-
模块不能二次导入。
(1)设计理念:import only once
(2)当导入一个模块时,模块中的代码都会被执行。
(3)导入模块更多的是定义模块中的变量、函数、对象等,这些不需要反复定义和执行所以再次导入这个模块,则不会再次执行。
总结: 一个模块无论导入多少次,这个模块在整个解释器进程内有且仅有一个实例对象
-
模块导入之后提示找不到(No module named 'xxx'问题)
(1) 对于第三方模块:先检查是否已下载模块,通过 CMD 查看pip list查看。
如果没有的,则pip install 模块名下载(2) 方法一:临时添加模块完整路径
向 sys.path 中临时添加模块文件存储位置的完整路径
import sys sys.path.append('path') 复制代码
(3) 方法二: 将模块保存到指定位置
将模块放在 sys.path 变量中已包含的模块加载路径中
模块文件添加到 `lib\site-packages` 路径下 复制代码
(4) 方法三:设置 path 系统环境变量。
总结
本期,我们学习模块导入两种方式,import 导入和from...import:
- import 导入模块后,调用实例方法前需要写模块名作为前缀
- from...import 导入模块中具体的成员,调用实例方法时可以直接使用
在实际工作场景中,以上两种方式来导入我们需要的模块,实现快速开发
以上是本期内容,欢迎大佬们点赞评论指正,下次见~ღ( ´・ᴗ・` )比心🌹🌹🌹🌹🌹✈️
近期评论