Python-模块
Python-模块
1、前言
在python中,一个py文件就是一个模块,可以作为模块被导入和引用,在python中使用模块会使得程序结构更加清晰,维护起来也更加方便。每次编程定义的变量,函数随着py文件的关闭就会被内存释放,现在通过把这些方法放在py文件中可以通过导入的方式调用,极大的提升了程序的效率!
2、模块详细
-
定义:模块就是一系列功能的结合体
-
模块的分类:
- 内置模块
- 第三方模块
- 自定义模块
-
模块的四种表现形式:
- 使用python编写的代码(.py文件)
- 已被编译为共享库或DLL的C或C++扩展
- 包好一组模块的包(文件夹)(包里面通常有一个双下init.py文件)
- 使用C编写并链接到python解释器的内置模块
3、import句式
-
想导入py文件,只需要使用import语句即可
-
格式:import 模块名
1、内置模块
内置模块导入示例:
'''导入内置模块'''
import time
time.sleep(1) # 一秒后执行print
print('累了,睡1秒')
# 结果
# 累了,睡1秒
2、自定义模块
自定义模块示例:
'''导入自定义模块'''
'''test.py'''
print('听说你想导入我?')
a = 1
b = 2
'''module.py'''
# 导入自定义模块
import test
if test.a>test.b:
print('用导入模块的值来比较,a大')
else:
print('用导入模块的值来比较,b大')
# 结果
# 听说你想导入我?
# 用导入模块的值来比较,b大
'''module.py'''
# 导入自定义模块
import test
import test
import test
import test
# 结果
# 听说你想导入我?
注意:多次导入相同模块,只会执行一次
3、第三方模块
第三方模块示例:
python内的第三方模块,需要下载,只要找到想下载的模块,通过pip即可安装,在pycharm安装也非常方便,另外给大家推荐Anaconda,下载好好多第三方模块不需要下载。
-
没有pip的小伙伴点👉[pip官网](pip · PyPI)
-
没有Anaconda的小伙伴点👉[Anaconda官网](Anaconda | Individual Edition)
-
没有pycharm的小伙伴点👉[pycharm官网](PyCharm: the Python IDE for Professional Developers by JetBrains)
pip安装命令:pip install 包名/模块名
pycharm安装步骤:
- Settings>>Project>>Python interpreter
因为我使用的是pycharm,给大家举个栗子:
'''使用第三方模块'''
'''使用第三方模块'''
import requests
url = 'https://www.baidu.com/'
res = requests.get(url)
print(res.status_code)
print(res.text)
# 结果大家自己动动手叭~
4、import底层原理
- import语句导入模块之后,通过模块点的方式就可以使用到模块中所有的名字,并且肯定不会产生冲突!
示例如下:
- 首次导入模块发生的事:
- 运行导入文件(import句式.py)产生该文件的全局名称空
- 运行test.py文件
- 产生test.py全局名称空间 运行test文件内代码 将产生的名字全部存档于test.py名称空间
- 在导入文件名称空间产生一个test的名字指向test.py全局名称空间
- 图示如下:
4、from /import句式
- from/import语句与import大致一样,使用from/import句式可以直接引用被导入文件中的名字使用
test.py文件上面定义好了,实例如下:
'''module.py'''
# 导入自定义模块
from test import a
print(a)
a = a+1
print(a)
# 结果
听说你想导入我?
1
2
'''显然module.py中没有a,a被导入到当前名称空间,可以直接使用,也可以对a进行修改'''
- from/import语句支持将文件所有名字导入
- 格式:from 模块名(文件名)import *
'''module.py'''
# 导入自定义模块
from test import *
print(a,b)
#结果
听说你想导入我?
1 2
导入模块的扩展用法
-
起名
既可以给模块名起别名也可以给模块中某个名字起别名
实例如下:
import test as t print(t.a) from test import a as A print(A) # a的结果都为1
-
连续导入
- 格式:import 模块1,模块2
- 格式2:from 模块名1 import 名字1,名字2,名字3
- 可以连续导入多个模块,但是只有当多个模块功能相似或者属于同一个系列
- 如果功能不同并且不属于一个系列 那么推荐分行导入
- import 模块名1
import 模块名2
-
通用导入
格式:__ all __ = [‘名称1’ , ‘名称2’]
实例如下:
'''test.py''' print('听说你想导入我?') a = 1 b = 2 # 只允许使用名称a __all__ = ['a'] # 如果导入所有名称,只能使用a,使用其他名称报错 '''module.py''' # 导入自定义模块 from test import * print(a,b) # NameError: name 'b' is not defined
5、模块导入的顺序
- 先从内存中查找
- 再去内置模块中查找
- 最后去sys.path系统路径查找(自定义模块)
- 最后如果没有查找到则报错
实例如下:
import sys
print(sys.path)
'''结果中第一个元素永远是当前执行文件所在的路径'''
当某个自定义模块查找不到的时候解决方案
1.自己手动将该模块所在的路径添加到sys.path中
import sys
sys.path.append(r'E:\fourth\test.py')
2.from...import...句式
from 文件夹名称.文件夹名称 import 模块名
from 文件夹名称.模块名称 import 名字
6、补充知识
判断文件类型:
if __ name __ = ‘__ main __’: //后期会出一篇有关的教程
作用为判断py文件是否作为模块文件还是执行文件
循环导入
- 如果在编程的时候有循环导入的情况,说明程序设计的不合理。
例如:
修改方法:
- 调整顺序:
- 调用函数
绝对导入与相对导入
在程序中涉及到多个文件之间导入模块的情况,一律按照执行文件所在的路径为准
- 绝对导入
始终按照执行文件所在的sys.path查找模块
- 相对导入
句点符 .
.表示当前文件路径
..表示上一层文件路径
注意!!!
- 相对导入能够打破以执行文件为准的规则,只考虑两个文件之间的位置
- 相对导入只能用在模块文件中,不能在执行文件中使用
注意,在自定义模块名的时候,不要和内置模块名相同!