本节内容:
1.认识模块
2.import
3.from xxx import xxx
一、什么是模块
模块可以认为是一个py文件. 模块实际上是我们的py文件运行后的名称空间
1、我们import加载的模块⼀共分成四个通⽤类别:
1. 使⽤pyhton编写的py⽂件(常用)
2. 已被编译为共享库或者DLL或C或者C++的扩展
3. 包好⼀组模块的包.(常用)
4. 使⽤c编写并连接到python解释器的内置模块
2、为什么要使⽤模块?
为了我们写的代码可以重⽤. 不⾄于把所有的代码都写在⼀个⽂件内.
当项⽬规模比较⼩的时候. 完全可以使⽤⼀个py搞定整个项⽬的开发.
但是如果是⼀个⾮常庞⼤的项⽬. 此时就必须要把相关的功能进⾏分离.
⽅便我们的⽇常维护. 以及新项⽬的开发
二、import
import random # 一次性把模块所有内容导入
from random import randint # 把模块加载。 导入randint
import 模块名
模块名.属性/方法/类
每个模块都有自己的独立的名称空间,每个都有一个global, 互相并不影响
模块.属性 = 值. # 不要这么干
1、导入模块时会系统会自动执行的三个操作
1. 先去 sys.modules 查看当前模块是否已经被导入
如果该模块已经导入,则不会重复导入
2. 开辟一段内存空间, 在该空间中执行该模块的代码
3. 给该空间一个名称,把这个名称引入当前模块
2、在当前模块,对导入的模块的一些操作
1.使用模块名可以直接访问模块的内容
2.global升华一个变量只在自己的模块有用
3. __name__ 可以屏蔽引入模块的测试代码
__name__ 如果该模块是启动模块,值是:__main__
如果该模块是被引入的,值是:模块名
4.用模块名.变量/方法/函数/类,可以改变导入的模块里面的内容,yitian.main_person_man = "灭绝" # 一般不要这么干
3、if name == “main“: 的使用
特别特别要注意. 如果我们在不同的模块中引入了同⼀个模块.
并且在某⼀个模块中改变了被引入模块中的全局变量.
则其他模块看到的值也跟着边.
原因是python的模块只会引入⼀次. ⼤家共享同⼀个名称空间
fe: 在其中一个模块修改,引用的同一个模块
⾦庸:
import yitian
yitian.main_person_man = "灭绝师太" ⾦庸⼆号: import yitian import ⾦庸 print(yitian.main_person_man)
4、我们还可以对导入的模块进⾏重新命名:
import yitian as yt
5、一次引入多个模块
import time, random, json, yitian
6、正确的导入模块的顺序:
1. 所有的模块导入都要写在最上⾯. 这是最基本的
2. 先引入内置模块
3. 再引入扩展模块
4. 最后引入你⾃⼰定义的模块
三、from xxx import xxx
确定自己要用什么,使用这种方法
from 模块 import 函数/变量
当作自己的变量或者函数来使用
from xxx import * 导入所有(尽量不要这样导入,如果被导入的模块写__all__的话,就只会导入__all__里面的内容,其他内容不导入)
导入的内容都可以起别名 as
1、一些用法
import random
2、两个小坑
fe1:如果当前⽂件中出现了重名的变量时. 会覆盖掉模块引入的那个变量.
from yitian import main_person_man
fe2: 自己的py文件,跟内置的模块,第三方模块同名
我们⾃⼰创建的py⽂件的名字不要和系统内置的模块重名.
否则,引入的很有可能是自己,写的py文件,程序根本跑不动!!!