模块
模块的四种形式
一、什么是模块
模块是一系列工能的集合体,而函数是某一个功能的集合体,因此模块可以看成是一堆函数的集合体。一个py文件内部就可以放一堆函数。所以一个py文件可以看成一个模块。
二、模块的四种形式
- 自定义模块:自己写的各种功能的文件
- 第三方模块:需要通过下载,功能众多的文件
- 内置模块:python解释器自带的内置函数
- 包:把一系列模块组织到一起的文件夹
三、为什么要使用模块:
- 可以让代码变得更加简洁
- 让代码变得更加容易
- 提升开发速度
四、如何使用模块
一般使用import和from...import来导入模块
import和from...import
一、import 模块名
什么是模块名:
上述说如果我们编写的一个py文件,那么这个py文件也是一个模块。
例如我们取名abs.py,那么模块名就叫abs
#import语法
import abs
abs.方法名
使用import时,这个语句其实做了三件事情
- 通过语句,在内存中创建一个模块的空间
- 执行对应模块文件,将执行中所产生的丢入模块在内存中的空间
- 在当前执行文件中拿到一个模块名
二、form模块名 import具体的功能
说完了import的语法,那么其实还有另一种导入的方式 form...import...方法
#语法
from abs impoty abs
abs=10
使用import时,这个语句其实做了三件事情
- 通过语句,在内存中创建一个模块的空间
- 执行对应模块文件,将执行中所产生的丢入模块在内存中的空间
- 在当前执行文件的名称空间中拿到一个名字,该名字直接指向模块中的某一个方法(名字),意味着可以不用加前缀
- 优点:不用加前缀
- 缺点:容易与文件产生冲突
三、impor和form import的异同
相同点:
- 两者都会执行模块对应的文件,两者都会产生模块的名称空间
- 两者调用功能时,需要跑到定义时寻找作用域关系,与调用位置无关
不同点
- import需要加前缀;from...import...不需要加前缀
循环导入
一、什么是循环导入
当我们创建了两个py文件,一个为a.py,一个为b.py
#循环导入
###a.py
from b import x
y=20
print(x)
###b.py
from a import y
x=10
print(y)
当执行上述代码时,我们会发现上述代码会产生报错等,其原因时因为进入了死循环导致
但是当我们将俩个py文件中的变量拿出来以后,会发现死循环结束了
原因:当我们执行a.py时,系统自上而下运行,当导包时,系统会自动打开,同时b.py文件会在内存打开一个空间,这个时候由于没有找到x的值,又开始导入x就进入了死循环
python文件的两种用途
- 脚本:一个文件就是一整个程序,用来被执行
- 模块,文件中存放多种功能,用来被导入使用
包
一、什么是包:
包就是有一堆功能性的执行文件的文件夹
二、为什么要有包?
模块的第一个版本只有10个功能,但是未来在扩展版本的时候,模块名和用法应该最好不要去修改,但是这只是对使用者友好,而由于版本扩展,文件越来越大,模块设计者对模块的管理、维护会越来越复杂,因此我们可以使用包来扩展模块的功能。
三、如何用包?
3.1 模块和包
导入模块发生的三件事:
- 创建一个包的名称空间
- 执行py文件,将执行过程中产生的名字存放于名称空间中。
- 在当前执行文件中拿到一个名字aaa,aaa是指向包的名称空间的
导入包发生的三件事:
- 创建一个包的名称空间
- 由于包是一个文件夹,无法执行包,因此执行包下的.py文件,将执行过程中产生的名字存放于包名称空间中(即包名称空间中存放的名字都是来自于.py)
- 在当前执行文件中拿到一个名字aaa,aaa是指向包的名称空间的
导入包就是在导入包下的.py,并且可以使用以下两种方式导入:
- import ...
- from ... import...