模块

模块的四种形式

一、什么是模块

模块是一系列工能的集合体,而函数是某一个功能的集合体,因此模块可以看成是一堆函数的集合体。一个py文件内部就可以放一堆函数。所以一个py文件可以看成一个模块。

二、模块的四种形式

  • 自定义模块:自己写的各种功能的文件
  • 第三方模块:需要通过下载,功能众多的文件
  • 内置模块:python解释器自带的内置函数
  • 包:把一系列模块组织到一起的文件夹

三、为什么要使用模块:

  1. 可以让代码变得更加简洁
  2. 让代码变得更加容易
  3. 提升开发速度

四、如何使用模块

一般使用import和from...import来导入模块

import和from...import

一、import 模块名

什么是模块名:

上述说如果我们编写的一个py文件,那么这个py文件也是一个模块。

例如我们取名abs.py,那么模块名就叫abs

#import语法
import abs
abs.方法名

使用import时,这个语句其实做了三件事情

  1. 通过语句,在内存中创建一个模块的空间
  2. 执行对应模块文件,将执行中所产生的丢入模块在内存中的空间
  3. 在当前执行文件中拿到一个模块名

二、form模块名 import具体的功能

说完了import的语法,那么其实还有另一种导入的方式 form...import...方法

#语法
from abs impoty abs
abs=10

使用import时,这个语句其实做了三件事情

  1. 通过语句,在内存中创建一个模块的空间
  2. 执行对应模块文件,将执行中所产生的丢入模块在内存中的空间
  3. 在当前执行文件的名称空间中拿到一个名字,该名字直接指向模块中的某一个方法(名字),意味着可以不用加前缀
    • 优点:不用加前缀
    • 缺点:容易与文件产生冲突

三、impor和form import的异同

相同点:

  1. 两者都会执行模块对应的文件,两者都会产生模块的名称空间
  2. 两者调用功能时,需要跑到定义时寻找作用域关系,与调用位置无关

不同点

  1. 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 模块和包

导入模块发生的三件事:

  1. 创建一个包的名称空间
  2. 执行py文件,将执行过程中产生的名字存放于名称空间中。
  3. 在当前执行文件中拿到一个名字aaa,aaa是指向包的名称空间的

导入包发生的三件事:

  1. 创建一个包的名称空间
  2. 由于包是一个文件夹,无法执行包,因此执行包下的.py文件,将执行过程中产生的名字存放于包名称空间中(即包名称空间中存放的名字都是来自于.py)
  3. 在当前执行文件中拿到一个名字aaa,aaa是指向包的名称空间的

导入包就是在导入包下的.py,并且可以使用以下两种方式导入:

  1. import ...
  2. from ... import...