python代码学习——模块导入
- 导入第三方库
- 本地库与第三方库的定义与区别
- 引用本地库
- 相对路径与绝对路径
- 包和模块
- 导入语句
- import
- 代码执行入口
- from……import
- from……import*
- from……import……as A
- 总结
- import语句
- from语句
- 自定义模块的命名规则
- 模块的搜索规则
- 绝对导入和相对导入
导入第三方库
本地库与第三方库的定义与区别
- 本地库:PyCharm自带的库为本地库
- 第三方库:需要PyCharm在线安装的库,为第三方库
- 区别:本地库可以不导入直接使用,第三方库需要导入模块后使用
引用本地库
- 1.安装第三方库后,可直接使用
import
引用 - 2.创建文件时,不能创建与第三方库和本地库名称冲突的py文件名,否则会报错(报错类型:ImportError)
- 3.导入模块时,寻找寻找顺序为:先到当前目录找,然后去我们环境变量配置的Python路径里面找
相对路径与绝对路径
- 以使用open函数举例:遇到操作打开/编辑文件的函数:
- 1.相对路径:在与自己同级的目录下找
- 2.绝对路径:任何情况下都不会出错的路径
- 3.使用相对路径寻找与自己不同级的文件,就会报错,一般情况下使用绝对路径可避免报错
- 报错信息如下:
FileNotFoundError: [Errno 2] No such file or directory: 'a.txt'
- 绝对路径打开文件的代码为:
`open(r'C:\Users\11\api_cases\logrizhi')`
- 绝对路径中:
"../"
表示返回上一级
包和模块
- python中只有一种模块对象类型,但是为了弄快华组织模块方便,提供了一个新的概念——包
- 模块:module,指的是python的源代码文件,一个模块就干一件事情
- 包,package,指的是模块组织在一起的,和报名同名的目录及其相关文件
导入语句
import
- 1.自己安装的库 本地库 可以直接从包名开始定位导入
- 2.导入方式:一层一层的去定位,不同的层级之间使用“.”来隔开
- 3.导入模块后可以直接运行导入的py文件的代码
- 4.使用import方式导入文件后,如果要调用py文件中的方法,也需要一层一层的定位,具体到模块名,如果直接调用方法,就会报错
- import语句找到制定的模块后,加载和初始化他,生成模块对象;找不到,就直接 报ImportError的异常
- 在import所在作用于或者局部命名空间中,增加名称和上一步创建的对象关联
- 如果是一个包或者一个模块,可以直接使用import
代码执行入口
- 代码执行入口快捷键:main然后直接输入回车
- 代码执行入口的作用: 一般情况下,导入文件后,导入文件不执行的代码会放在代码入口下方,一般用来放置测试代码
- 这个模块主要用于功能测试,测试本模块中的函数和类
- 避免主模块变更的副作用
from……import
- 1.此种方法也需要一层一层的去定位
- 2.导入模块后,调用模块中的方法,可直接调用函数名来执行代码
- 3.此种方法看可以具体到方法名,也可以具体到模块名,不能具体到包名。如果具体到模块名,调用函数时就需要上使用**模块名.函数名 的格式
- 4**.推荐使用此种方法导入函数
- 其本质是在当前名词空间中导入模块下的指定成员
from openpyxl import load_workbook
workbook = load_workbook(filename= "aaa.txt") # 打开excel表格
import json
b = '{"a":111}'
a = json.loads(b)
from……import*
- 此种方法与form……import一致,**“”**代表所有的方法,存在“”时,不需要分类输入方法信息
- 此代码的意思是:是将模块中的所有方法都导入进来
- 其本质是在当前名词空间中导入模块下的公共成员
from openpyxl import *
workbook = load_workbook(filename= "aaa.txt") # 打开excel表格
#里面不仅仅有load_workbook的方法,只要是openpyxl 下的所有方法都可用
from……import……as A
- 1.此种方法也需要一层一层的去定位
- 2.as A为取别名为A,是将方法名/模块名重命名为A
- 3.取别名后,使用方法或调用模块中的方法时,可使用别名来调用,避免名称过长而导致名称输入错误
- 4.import导入也可以使用as方法去别名
from openpyxl import load_workbook as B
workbook = B(filename= "aaa.txt") # 打开excel表格
总结
import语句
- 导入顶级模块(object),其名称会加入到本地名词空间中,并绑定到其模块对象
- 导入非顶级模块,将其顶级模块加入到本地名词空间中
- 导入的模块必须使用完全限定名称来访问
- 如果使用了as,其后的名称直接加入到本地名词空间中,并绑定到导入的模块对象
from语句
- 找到from子句中指定的模块,加载并初始化它(注意并不是导入)
- 对于import子句后的名称
- 先查询from子句导图的模块是否具有该名称的属性
- 如果不是,则尝试导入该名称的子模块
- 还没有找到,则抛出ImportError的异常
- 这个名称保存到本地名词空间中,如果有了as子句,则使用as子句后的名称
自定义模块的命名规则
- 模块名就是文件名
- 模块名必须符合标识要求,非数字开头的字母、数字和下划线组合
- test-moudle.py这样的文件名不能作为模块名
- 不要使用系统模块名来避免冲突,除非你明确的知道这个模块名的用途
- 通常模块名是全小写,下划线来分割
模块的搜索规则
- 当加载一个模块的时候,需要从python模块的搜索路径中从前到后一次查找
- 查找时不搜索这些目录的子目录,搜索到就加载,搜索不到就抛出异常
- 路径可以是字典,zip文件或者egg文件
- 路径的顺序为:
- 程序主目录,程序运行的主程序脚本所在的目录
- PATHONPATH目录,环境变量PATHONPATH设置的目录,也就是搜索模块的路径
- 标准库目录,python自带库模块所在的目录
绝对导入和相对导入
- 绝对导入
- 在import语句,或者在from语句中,导入模块
- 模块名称最前面不是以.开头的
- 绝对导入总是去搜索模块搜索路径中找
- 相对导入
- 只能在包内使用,且只能在from语句中使用
- 使用. 表示在当前目录内
- 使用…表示上一层目录
- 不要在顶层模块中使用相对导入
from .import sf_py # 同层级中的其他py文件
from ..import AA # 导入上一级的py文件
from .sf_py import Celsius # 导入同层级py文件下的类或者函数