包、模块
一、包
1、什么是包?
包指的是内部包含__init__.py的文件夹
2、包的作用
存放模块,也可以更好的管理模块
二、模块
1、什么是模块?
模块是一系列功能的结合体,本质上是一个个的py文件,里面包着一堆函数与代码
2、模块的三种来源
① python内置模块(python解释器自带的):sys,time,os,turtle等等
② 第三方模块(大佬写的):requests,urllib2,beautifulsoup
③ 自定义模块(自己写的):自己定义的demo.py
3、模块的四种表现形式
① 使用python编写的py文件(了解)
② 编译后的共享库DLL或者是C或者C++库(了解)
③ 包下面带有__init__.py的一组py文件
- 使用pycharm创建一个名字为py_demo的Python Package
- __init__.py
- demo.py
- demo2.py
④ python解释器下的py文件
4、为什么要使用模块?
① 模块可以帮我们更好的管理功能代码,比如:函数、变量、类...
② 可以将项目拆分成一个个的功能,分别存放在不通的py文件(模块)中
5、如何创建、编写并使用模块?
① 创建模块:创建模块(创建.py文件)
② 编写模块:在py文件中编写python代码
③ 使用模块:通过import关键字导入模块
import 模块名
注意:import 模块时,模块后不能添加.py
在使用模块阶段,必须要注意,哪个是执行文件,哪个是被导入文件(被导入的模块)
模块在首次导入时,就已经固定好了,当前文件查找的顺序是先从内存中查找
模块在导入时会发生的事情:
1.会先执行当前执行文件,并产生执行文件中的名称空间
2.当执行到导入模块的代码时,被导入的模块会生成一个模块的名称空间
3.会将被导入模块的名称空间加载到内存中
6、给模块起别名
import 模块 as 别名
7、模块的导入方式
① import 模块
在执行文件中直接导入
② from 包 import 模块
from 模块 import 函数名/变量名/类名
8、循环导入问题
例:模块间互相调用
demo1.py :
from demo2 import name
name = "bear"
demo2.py :
from demo1 import name
name = 'apple'
run.py :
from demo1 import name
print(name)
运行run.py一定会报错,报错信息如下:
如何规避这种错误?
解决方法:
1.需要查找的名字放在导入模块的上方
修改demo1.py
无需修改demo2.py
执行run.py # run.py的代码无需修改
2.在函数内部导入模块,将模块变成函数名称空间中的名字
修改demo1.py或者demo2.py(以demo1.py为例,将from...import...放进函数中,使用时再调用模块demo1中的函数)
无需修改demo2.py
执行run.py # run.py的代码无需修改