模块与包
模块与包
包
1、什么是包
内部有__ init__.py的文件夹,用于管理模块,包也可以被导入,并且可以一并导入包下所有的模块
2、为什么要用包
包可以帮我们管理模块,包里面有一个__ init __.py,由它帮我们管理模块
3、怎么使用包
import 包.模块名
包.模块.名字
from 包 import 模块名
from 包.模块名 import 模块中的名字
4、导入包时发生的事情
- 当包被导入时,会以包里的__ init __.py来产生一个名称空间
- 然后执行__ init__.py文件,会将 __ init __.py中所有的名字添加到名称空间
- 接着会将包下所有的模块的名字加载到__ init __.py产生的内存空间中
- 导入模块指向的名称空间就是__ init __.py产生的名称空间
模块
1、什么是模块
模块是一系列功能的结合体,本质上是一个个的.py文件
模块的三种来源
-
python内置的模块(python解释器)
比如:sys、time、os、turtle
-
第三方的模块(别写的)
比如:requests
-
自定义的模块(自己写的)
自己定义的py文件
防止导入模块是自动执行测试功能
在测试代码时写加
快捷键:main+enter
if __name__ == "__main__":
get_demo() # 测试模块
模块的四种表现形式
- 使用python编写的py文件(了解)
- 编译后的共享库C或者C++库(了解)
- 包下面带有__ init__.py的一组py文件
-
python解释器下的py文件
python解释器下的文件夹
一个个的py文件
2、为什么要使用模块
模块可以帮助我们更好的管理功能代码,比如:函数....
可以将项目拆分成一个个功能,分别存放在不同的py文件(模块)中
3、如何创建,编写模块,并使用模块
创建:直接新建py文件
编写:在py文件中直接编写python代码
使用:通过import关键字导入模块或者通过from 。。。import。。。导入模块
import 模块 as 模块的别名、from 包/模块 import 模块/(函数名、变量名、类名)as 模块别名
-
在使用模块时需要注意,谁是执行文件,谁是被导入文件(模块)
-
模块在首次导入时就已经将其加载到内存中了,当前文件查找的顺序是先从内存中查找,之后的重复导入会直接从内存中查找,不会重复执行文件
4、模块导入时
首次导入模块会做三件事:
- 执行源(模块)文件代码
- 产生一个新的名称空间来存放执行源(模块)文件过程中产生的名字
- 被导入模块的名称空间加载到内存中
5、循环导入问题
三个文件model1.py、model2.py、执行文件.py
# - model1.py
from model2 import name
name = 'jason'
# - model2.py
from model1 import name
name = 'tank'
# -执行文件.py
from model1 import name
print(name)
>>>
ImportError: cannot import name 'name' from 'model'
解决循环导入问题:
- 需要查找的名字放在导入模块的上方
- 在函数内部导入,将模块变成函数名称空间中的名字
# 1.需要查找的名字放在导入模块的上方
# - model1.py
name = 'jason'
from model2 import name
# - model2.py
from model1 import name
name = 'tank'
# -执行文件.py
from model1 import name
print(name)
>>>
jason
# 2.在函数内部导入,将模块变成函数名称空间中的名字
# - model1.py
def func():
from model2 import name
name = 'jason'
# - model2.py
from model1 import name
name = 'tank'
# -执行文件.py
from model1 import name
print(name)
>>>
jason
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!