简单来说一个模块就是一个py文件,这个模块是存储很多相似的功能,相似的函数的集合体
当执行文件引用多次模块时,实际只加载一次
import LY
#当我引用LY模块时,实际上将LY.py执行一遍,加载到内存
import LY
import LY
#只是第一次引用时,将此模块加载到内存
运行结果:from the LY.py
以下为执行文件和模块文件,以此来了解引用模块的过程
自定义模块.py(执行文件)
import LY
n = 1
被引用文件(模板) LY.py
print('from the LY.py')
name = 'LY'
def read1():
print('LY模块', name)
def read2():
print('LY模块')
read1()
def change():
global name
name = 'XXL'
引用模块发生三件事
三件事情图示:
第三步引用:
import LY
print(LY.name)
LY.read1()
LY.read2()
LY.change()
LY.read1()
运行结果:
from the LY.py
LY
LY模块 LY
LY模块
LY模块 LY
LY模块 XXL
通过import 引用模块,他有自己的独立空间,与当前执行文件无关系
模块名字.引用,一定在此模块中寻找
起别名:将一个比较长的模块名化简成简单的 import configure as cf
引入多个模块
import time,os,sys 不推荐
import time
import os
import sys 多行导入 易于阅读 易于编辑 易于搜索 易于维护
from LY import name
from LY import read1
from LY import read2
print(globals())
运行结果:...'name': 'LY', 'read1': <function read1 at 0x0000025F986CD430>, 'read2': <function read2 at 0x0000025F9894D3A0>}
相当于从LY模块的全局空间中将name,read1变量与值的对应关系复制到当前执行文件的全局名称空间中
优点:使用起来更加方便
缺点:容易与当前执行文件产生覆盖效果(import不易产生覆盖)
from LY import name
print(name)
name = 'xll'
print(name)
运行结果:LY
xll
坑:引用模块中的函数,如果此函数用到一些变量,这些变量还是从此模块中寻找,不会改变当前执行文件的变量(特殊情况,因为你引用一些模板的变量,必须做到执行文件中没有同名变量)
执行文件:from…import… .py
from LY import name
from LY import change
change()
print(name)
运行结果:LY
eg:
from LY import change
change()
from LY import name
print(name)
运行结果:XXL
起别名:
from LY import name as n
print(n)
引入多个模块:与import引用模块相同
1、所有名字全部复制
2、容易覆盖
配合使用:from … import * 与__all__配合使用
将*的所有范围缩小__all__
eg:__all__ = [‘read1’, ‘read2’] (写于模块中)
模块LY.py
__all__ = ['read1']
执行文件:
from LY import *
change()
运行结果:NameError: name 'change' is not defined
py文件的两种功能
模块的搜索路径:内存中 --> 内置模块 -->sys.path(模块可寻找的路径)中找
import sys
print(sys.path)
运行结果:['C:\\Users\\ASUS\\PycharmProjects\\pythonProject1\\15day', 'C:\\Users\\ASUS\\PycharmProjects\\pythonProject1', 'D:\\BaiduNetdiskDownload\\python39.zip', 'D:\\BaiduNetdiskDownload\\DLLs', 'D:\\BaiduNetdiskDownload\\lib', 'D:\\BaiduNetdiskDownload', 'C:\\Users\\ASUS\\PycharmProjects\\pythonProject1\\venv', 'C:\\Users\\ASUS\\PycharmProjects\\pythonProject1\\venv\\lib\\site-packages']
看第一个参数为当前路径
应用:输出结果为列表,因此当文件不在此当前路径中时,我们可以考虑使用列表的添加操作
sys.path.append(r’C:\Users\ASUS\PycharmProjects\pythonProject1\16day’)