【从零学习python 】38.Python包的使用及导入方式

简介: 【从零学习python 】38.Python包的使用及导入方式

包的使用

一个模块就是一个 py 文件,在 Python 里为了对模块分类管理,就需要划分不同的文件夹。多个有联系的模块可以将其放到同一个文件夹下,为了称呼方便,一般把 Python 里的一个代码文件夹称为一个包。

1. 导入包的方式

现有以下包newmsg,包里由两个模块,分别是sendmsg.py、recvmsg.py文件。在包的上级文件夹里,有一个test.py文件,目标是在test.py文件里引入newmsg的两个模块。

目录结构如下图所示:

- newmsg/
  - __init__.py
  - sendmsg.py
  - recvmsg.py
- test.py

sendmsg.py文件里的内容如下:

def send_msg():
  print('------sendmsg方法被调用了-------')

recvmsg.py文件里的内容如下:

def recv_msg():
  print('-----recvmsg方法被调用了--------')

可以使用以下几种方式来导入模块,使用模块里的方法。

  1. 直接使用包名.模块模块名导入指定的模块。
import newmsg.sendmsg
  1. 使用from xxx import xxx 方式导入指定模块。
from newmsg import sendmsg
  1. 使用__init__.py文件,导入包里的指定模块。

可以在newmsg里创建__init__.py文件,在该文件里导入指定的内容。

在__init__.py文件里编写代码:

from . import sendmsg  # 导入指定的模块    . 代表的是当前文件夹

test.py文件里的代码:

import newmsg
newmsg.sendmsg.send_msg()  # 可以直接调用对应的方法
# newmsg.recvmsg.recv_msg()   不可以使用 recvmsg 模块,因为 __init__.py文件里没有导入这个模块
  1. 使用__init__.py文件,结合__all__属性,导入包里的所有模块。

在newmsg包里的__init__.py文件里编写代码:

__all__ = ["sendmsg","recvmsg"]  # 指定导入的内容
• 1

test.py文件代码:

from newmsg import *  # 将newmsg里的__inint__.py文件里,__all__属性对应的所有模块都导入
sendmsg.send_msg()
recvmsg.recv_msg()

总结

包将有联系的模块组织在一起,即放到同一个文件夹下,并且在这个文件夹创建一个名字为__init__.py 文件,那么这个文件夹就称之为包,有效避免模块名称冲突问题,让应用组织结构更加清晰。

2. init.py文件有什么用

init.py 控制着包的导入行为。init.py为空仅仅是把这个包导入,不会导入包中的模块。可以在__init__.py文件中编写内容。

newmsg/init.py文件:

print('hello world')

别的模块在引入这个包的时候,会自动调用这段代码。

3. all

在__init__.py文件中,定义一个__all__变量,它控制着 from 包名 import * 时导入的模块。

newmsg/init.py文件:

__all__ = ['sendmsg','recvmsg']

注意事项

在自定义模块时,需要注意一点,自定义模块名不要和系统的模块名重名,否则会出现问题!

相关文章
|
10天前
|
Python 容器
Python学习的自我理解和想法(9)
这是我在B站跟随千锋教育学习Python的第9天,主要学习了赋值、浅拷贝和深拷贝的概念及其底层逻辑。由于开学时间紧张,内容较为简略,但希望能帮助理解这些重要概念。赋值是创建引用,浅拷贝创建新容器但元素仍引用原对象,深拷贝则创建完全独立的新对象。希望对大家有所帮助,欢迎讨论。
|
1天前
|
Python
Python学习的自我理解和想法(10)
这是我在千锋教育B站课程学习Python的第10天笔记,主要学习了函数的相关知识。内容包括函数的定义、组成、命名、参数分类(必须参数、关键字参数、默认参数、不定长参数)及调用注意事项。由于开学时间有限,记录较为简略,望谅解。通过学习,我理解了函数可以封装常用功能,简化代码并便于维护。若有不当之处,欢迎指正。
|
12天前
|
存储 索引 Python
Python学习的自我理解和想法(6)
这是我在B站千锋教育学习Python的第6天笔记,主要学习了字典的使用方法,包括字典的基本概念、访问、修改、添加、删除元素,以及获取字典信息、遍历字典和合并字典等内容。开学后时间有限,内容较为简略,敬请谅解。
|
12天前
|
Python
Python学习的自我理解和想法(7)
学的是b站的课程(千锋教育),跟老师写程序,不是自创的代码! 今天是学Python的第七天,学的内容是集合。开学了,时间不多,写得不多,见谅。
|
11天前
|
存储 安全 索引
Python学习的自我理解和想法(8)
这是我在B站千锋教育学习Python的第8天,主要内容是元组。元组是一种不可变的序列数据类型,用于存储一组有序的元素。本文介绍了元组的基本操作,包括创建、访问、合并、切片、遍历等,并总结了元组的主要特点,如不可变性、有序性和可作为字典的键。由于开学时间紧张,内容较为简略,望见谅。
|
12天前
|
存储 索引 Python
Python学习的自我理解和想法(4)
今天是学习Python的第四天,主要学习了列表。列表是一种可变序列类型,可以存储任意类型的元素,支持索引和切片操作,并且有丰富的内置方法。主要内容包括列表的入门、关键要点、遍历、合并、判断元素是否存在、切片、添加和删除元素等。通过这些知识点,可以更好地理解和应用列表这一强大的数据结构。
|
12天前
|
索引 Python
Python学习的自我理解和想法(5)
这是我在B站千锋教育学习Python的第五天笔记,主要内容包括列表的操作,如排序(`sort()`、``sorted()``)、翻转(`reverse()`)、获取长度(`len()`)、最大最小值(`max()`、``min()``)、索引(`index()`)、嵌套列表和列表生成(`range`、列表生成式)。通过这些操作,可以更高效地处理数据。希望对大家有所帮助!
|
Python
项目依赖的python包requirements.txt文件的生成与安装
项目依赖的python包requirements.txt文件的生成与安装
471 0
|
7月前
|
Python Windows
Python分发包安装pip3
Python分发包安装pip3
42 0
python 获取当前项目引用的第三包(不是当前环境里面安装的所有安装包)
python 获取当前项目引用的第三包(不是当前环境里面安装的所有安装包)