Python基础-模块和包

本文详细介绍了Python中的模块和包的概念,模块作为包含功能代码的.py文件,可提高代码的可维护性和复用性。文章讨论了如何导入模块,包括`import`、`import as`和`from...import`的不同用法。接着,解释了包的定义,它是一个分层次的文件目录结构,通过`__init__.py`文件标识。文中还给出了导入包的示例,并提到了`__all__`的作用,用于公开声明接口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python基础-模块(module)和包(package)

1.模块

出现原因:开发过程中程序代码越来越多,如果直接放在一个文件爱你,代码会越来越长,造成代码不易维护。

为了编写方便,维护代码,可以把不同功能的代码保存在不同的文件里。这样,每个文件包含的代码量就会比较少,方便维护

定义:

Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。

模块让你能够有逻辑地组织你的 Python 代码段。在Python中,一个.py文件就可以称之为一个模块

即:

  • 包含相应功能的函数以及变量,py则以.py为扩展名
  • 模块可以为其他程序引用,以使用该模块所对应的函数或者变量
  • 使用模块的优点:
  • 提高代码的可维护性
  • 提高代码的复用性
  • 可以导入很多功能的模块
    • 标准库模块
    • 第三方模块
    • 自定义模块
  • 避免变量名重复(作用域)

Python中导入模块的常用方式

  • import 模块名称
 import module[,module1[,module2]]
   #调用其中函数时使用 module.funcation的形式
  • import 模块名称 as 新名称
import module as name
  • from 模块名称 import 函数名
from module import funcation
#from module import * 为引入module的全部内容

区别:

  • import 模块名称和 import 模块名称 as 新名称

    • 会导入整个模块
    • 如果需要使用某个函数名,必须以‘模块名称.函数名()’来使用(这种方法跟有利于程序代码可读性(优先推荐))
  • import 模块名称 as 新名称 ,重新命名导入模块 通常使模块名称简洁,方便使用

  • from 模块名称 import 函数名

    • 只导入某一函数,而不是一整个模块
    • 可以直接通过函数名称去调用,无需在函数名称前加模块名称
    • 调用很多模块,可能会有名称冲突(不推荐使用)

2.包

定义:

  • 包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的 Python 的应用环境。简单来说,包就是文件夹,但该文件夹下必须存在 __init__ 文件, 该文件的内容可以为空。__init__.py 用于标识当前文件夹是一个包。。

  • 目的:

    • 将文件/模块通过文件夹组织起来
    • 不是为了运行,而是为了导入使用,其本质仍是模块
    • 可以更加便捷的对代码进行功能管理
  • 注意:

    • Python3,即使包中没有_init_.py也可以使用,而Py2会报错
    • 用import导入带点的,点的最左边一定是一个包名
    • import导入时,其名称空间的名字源于文件,导入包的本质是导入_init_.py文件

一个例子

demo:

下面是一个包的结构图

➜  school tree
.
├── api
│   ├── __init__.py
│   ├── students.py
│   └── versions.py
├── cmd
│   ├── __init__.py
│   └── manage.py
├── db
│   ├── __init__.py
│   └── models.py
└── __init__.py

import school
school.api.students.get()   	#报错  import  school并未导入school下的子模块中

#1.在school下的__init__.py添加 
from . import api     			#在当前目录下导入api模块
#2.然后在 api下的__init__.py 添加
from . import students  		#在api模块导入students模块
#3.然后再执行
import school
school.api.students.get() 

#小结:在school包下的__init__.py内导入包的子包
#同时在子包的__init__导入子包的子模块
#就可以在导入school模块时同时导入相关的子模块

  • from … import 时 import后的模块,必须是一个不包含’.‘的,否则报错

在school/api/versions.py中导入school/cmd/manage.py

在 school/api/versions.py
from school.cmd import manage    				#绝对导入
manage.main()

from ..(当前目录上一层)cmd import manage          #相对导入

__all__的用法

公开声明了暴露接口:

格式:

__all__(a,b,c...,n)   #可以为模块或者函数
#在__init__中只要有__all__(),那么调用与之匹配的模块时,只能使用在__all__中的函数或者模块
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值