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文件下的类或者函数