模块与包

模块与包

1、什么是包

内部有__ init__.py的文件夹,用于管理模块,包也可以被导入,并且可以一并导入包下所有的模块

2、为什么要用包

包可以帮我们管理模块,包里面有一个__ init __.py,由它帮我们管理模块

3、怎么使用包

import 包.模块名

​ 包.模块.名字

from 包 import 模块名

from 包.模块名 import 模块中的名字

4、导入包时发生的事情

  1. 当包被导入时,会以包里的__ init __.py来产生一个名称空间
  2. 然后执行__ init__.py文件,会将 __ init __.py中所有的名字添加到名称空间
  3. 接着会将包下所有的模块的名字加载到__ init __.py产生的内存空间中
  4. 导入模块指向的名称空间就是__ init __.py产生的名称空间

模块

1、什么是模块

模块是一系列功能的结合体,本质上是一个个的.py文件

模块的三种来源

  1. python内置的模块(python解释器)

    比如:sys、time、os、turtle

  2. 第三方的模块(别写的)

    比如:requests

  3. 自定义的模块(自己写的)

    自己定义的py文件

防止导入模块是自动执行测试功能

在测试代码时写加

快捷键:main+enter

if __name__ == "__main__":
    get_demo() # 测试模块

模块的四种表现形式

  1. 使用python编写的py文件(了解)
  2. 编译后的共享库C或者C++库(了解)
  3. 包下面带有__ init__.py的一组py文件

  1. python解释器下的py文件

    python解释器下的文件夹

    ​ 一个个的py文件

2、为什么要使用模块

模块可以帮助我们更好的管理功能代码,比如:函数....

可以将项目拆分成一个个功能,分别存放在不同的py文件(模块)中

3、如何创建,编写模块,并使用模块

创建:直接新建py文件

编写:在py文件中直接编写python代码

使用:通过import关键字导入模块或者通过from 。。。import。。。导入模块

import 模块 as 模块的别名、from 包/模块 import 模块/(函数名、变量名、类名)as 模块别名

  • 在使用模块时需要注意,谁是执行文件,谁是被导入文件(模块)

  • 模块在首次导入时就已经将其加载到内存中了,当前文件查找的顺序是先从内存中查找,之后的重复导入会直接从内存中查找,不会重复执行文件

4、模块导入时

首次导入模块会做三件事:

  1. 执行源(模块)文件代码
  2. 产生一个新的名称空间来存放执行源(模块)文件过程中产生的名字
  3. 被导入模块的名称空间加载到内存中

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. 需要查找的名字放在导入模块的上方
  2. 在函数内部导入,将模块变成函数名称空间中的名字
# 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
posted @   Mr沈  阅读(231)  评论(0编辑  收藏  举报
编辑推荐:
· 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 让容器管理更轻松!
点击右上角即可分享
微信分享提示

目录