目录
一、模块的简介
1、什么是模块
2、为什么要用模块
3、模块的分类
4、模块存在的形式
二、模块的使用
1、import句式
2、from...import...句式
3、导入语句的其他用法
(1)起别名
(2)连续导入
(3)通用导入
4、循环导入
5、判断文件类型(执行文件、导入文件)
模块就是一系列功能的集合,模块中就是提前写好了很多的功能,直接拿来使用。
站在巨人的肩膀上,别人写好的一些功能我们把它下载下来直接用在我们自己的项目中,大大提高开发效率,别人已经开发好了,给它下载下来,直接挪到我们自己的python文件中使用就行了。
(1)、内置模块(python解释器原来就存在的,在任何位置,任何时间都可以直接使用)
eg:time
(2)、第三方的(别人写好的模块,人家放在了网上,去网上下载)
(3)、自定义的(我们自己写的模块)
一共有4种形式,只需要掌握2种
(1)、我们自己写的python代码(.py文件)
一个py文件就是一个模块
(2)、包的形式:就是一系列py文件的组合(文件夹)
文件夹内部有一个__init__.py文件
以后我们再开发一些复杂的功能的时候,就可以想想或者查查有没有别人已经写好了,直接下载下来使用,当你遇到一个你不会的技术栈的时候,一般情况都有人开发好了。
import md --------> 导入模块的时候,只写模块名字,不要写后缀名字
学习模块的时候一定要弄清楚:谁是执行文件,谁是导入文件?
运行当前文件,会导入md文件到此文件中,并且会执行导入文件
导入文件多次,那么,也只会执行一次导入文件中得代码,只需要导入一次即可
导入文件的时候发生了什么事儿
1. 首先会运行执行文件,产生执行文件的全局名称空间
2. 运行导入文件
3. 会产生导入文件的全局名称空间,把导入文件中的名字都丢到全局名称空间中
4. 会在执行文件中产生一个名字md指向导入文件的名称空间
在执行文件中如何使用导入文件中得数据
直接使用模块名字点变量名 直接使用
import md
money = 999
print(md.money) # 1000 知名道姓的调用,不会乱
def read1():
print('read1') # md 1000
md.read1()
money = 888
md.change() # 0
print(money) # 888
# md文件
print('from the md.py')
money = 1000
def read1():
print('md', money)
def read2():
print('md模块')
read1()
def change():
global money
money = 0
print(money)
from md import money, read1, read2, change # from the md.py
from...import...句式
导入模块也会执行导入文件,多次导入也只会执行一次,跟import句式一样
导入文件的时候发生了什么事儿
1. 首先会运行执行文件,产生执行文件的全局名称空间
2. 运行导入文件md
3. 会产生导入文件的全局名称空间,把导入文件中的名字都丢到全局名称空间中
4. 会在执行文件中产生一个名字money指向导入文件的名称空间中得money
如果使用from...import...句式的情况,在执行文件中会出现名字冲突的情况(在执行文件中出现了和导入的名字一样的时候)
出现冲突的时候离谁近用谁的
from md import money, read1, read2, change
money = 999
print(money)
from md import money
print(money)
print(read1)
read2()
change()
def read1():
print('from read1')
read1()
import md as m # 为导入的模块md在当前位置起别名m,以后再使用时就用这个别名m
m.x
m.get()
# 还可以为导入的一个名字起别名
from md import get as get_x
get_x()
import md
import time
import os
import sys
import md, time, os, sys
from md import *
read1()
change()
__all__ = ['money', 'read1', 'change']
在你编码的过程中,循环导入是不能允许出现的
如果你的代码出现了循环导入问题,那就是你的代码设计不合理,及时更正。
在这个判断里面写的代码,只有是以执行文件运行的时候,才会被执行,当被当成导入文件的时候,不会被运行
if __name__ == '__main__': # md
read2()