当前位置: 首页 > news >正文

Python初学者笔记第十四期 -- (自定义模块与包)

第23节课 自定义模块与包

1 自定义模块

什么是模块

  • 循环:重复执行的代码,且有规律
  • 函数:将具有独立性功能的代码进行封装,以便后续复用/调用,解耦代码
  • 模块:可以定函数、类和变量、也可以包含可执行的代码。可以把模块理解为更高级的函数-复用。一般而言我们会把一系列的功能封装到模块中,方便外界调用/复用。模块可以将程序代码进行组合和封装,提高代码的可维护性和可复用性。
  • 表现:一个.py文件就是一个模块。

创建模块

# my_math.py
def add(a, b):return a + bdef subtract(a, b):return a - bdef multiply(a, b):return a * bdef divide(a, b):if b == 0:# 抛出异常raise ValueError("除数不能为零")return a / b

导入模块

(1)在另一个Python文件中,直接导入模块

import 模块名称
# main.py
import my_math
print(my_math.add(1,3))
print(my_math.subtract(3,1))

使用别名导入(就是给模块另起名字,一旦使用别名,本身的名称就不可用)

import 模块名称 as 别名
# main.py
import my_math as mm
print(mm.add(1,3))
print(mm.subtract(3,1))

(2)直接从模块中导入需要的对象(函数、变量、类)

from 模块 import 对象,对象...
# main.py
from my_math import add, subtract,multiply,divide
print(add(1,3))
print(subtract(4,1))

好处就是可以不用通过模块名称来去调用

坏处:

  • 容易混淆,到底属于模块中的内容,还是当前定义的内容
  • 少量代码编写时(简单的脚本文件),但是在大型项目中,不推荐的。
# main.py
from my_math import add, subtract,multiply,divide
def add(a,b):return 666print(add(1,3))
print(subtract(4,1))

(3)导入模块所有的对象

from 模块 import *
# main.py
from my_math import *print(add(1,3))
print(subtract(4,1))
  • 不推荐,理由同上

模块中__name__的属性

  • 每个Python模块都有一个内置属性 __name__。当模块被直接运行时,__name__的值为__main__;当模块被导入时,__name__的值为模块名称。
  • 所谓的导入模块,就是先让模块的代码跑一遍,再去执行当前代码。
# my_math.py
def add(a, b):return a + bdef subtract(a, b):return a - bdef multiply(a, b):return a * bdef divide(a, b):if b == 0:# 抛出异常raise ValueError("除数不能为零")return a / b# print(__name__)# 当直接执行my_math.py文件时 则执行下面if中的内容
# 当my_math.py被导入时,则下面if中的内容不执行
if __name__ == "__main__":print(f"测试:{add(1,1)}")print(f"测试:{subtract(1,1)}")

2 自定义包

什么是包

包是一种管理Python模块的方式,它实际上就是一个包含多个模块的目录。包目录下必须有一个__init__.py的文件,该文件就是用来标记当前目录是一个普通文件夹还是一个包。

在大型项目开发中,代码功能其实可以分为这么几类:model、view、controller、DB

创建包

创建一个名为my_package的包,目录结构:

my_package__init__.pyModelC.pyModelD.py
# ModelC.py
def show_modelC():print("show_modelC run...")
# ModelD.py
def show_modelD():print("show_modelD run...")

导入包中的模块

(1)相对导入

在包内,模块之间进行相互导入。【导包时,严禁相关导入,否则出现递归异常】

# ModelD.py
from . import ModelC
def show_modelD():print("show_modelD run...")ModelC.show_modelC()

(2)绝对导入

在包外,其他的模块中进行导入

# main.py
from my_package import ModelC, ModelD
ModelC.show_modelC()
ModelD.show_modelD()

__init__的作用

  • 标识一个目录是Python包
  • 可以在其中定义包的初始化代码:导入包中的模块,使模块在包被导入时可用。
# __init__.py
from . import ModelC
from . import ModelD
# main.py
import my_package
my_package.ModelC.show_modelC()
my_package.ModelD.show_modelD()

__init__中的__all__变量

它是一个字符串列表,指定当前使用 from 包 import *时应该导入的模块,做记录/指定导入。

# main.py
from my_package import *
ModelC.show_modelC()
ModelD.show_modelD()
print(dir())
# __init__.py
__all__ = ["ModelC", "ModelD"]

文章转载自:
http://archipelago.pzdurr.cn
http://arrhythmic.pzdurr.cn
http://calisthenics.pzdurr.cn
http://attunement.pzdurr.cn
http://capris.pzdurr.cn
http://atlanticist.pzdurr.cn
http://blowzed.pzdurr.cn
http://abduct.pzdurr.cn
http://bodyshell.pzdurr.cn
http://autotype.pzdurr.cn
http://charcuterie.pzdurr.cn
http://aloud.pzdurr.cn
http://ariot.pzdurr.cn
http://basenji.pzdurr.cn
http://bunion.pzdurr.cn
http://abseil.pzdurr.cn
http://bauchle.pzdurr.cn
http://catabolite.pzdurr.cn
http://caliology.pzdurr.cn
http://austenian.pzdurr.cn
http://chelsea.pzdurr.cn
http://appendicectomy.pzdurr.cn
http://bepuzzlement.pzdurr.cn
http://biunique.pzdurr.cn
http://calisthenic.pzdurr.cn
http://affranchise.pzdurr.cn
http://alacarte.pzdurr.cn
http://antigropelos.pzdurr.cn
http://antilope.pzdurr.cn
http://angulation.pzdurr.cn
http://www.dtcms.com/a/281785.html

相关文章:

  • NFS磁盘共享
  • 基础专有术语
  • Model Control Protocol 一种开放的应用层协议,让大模型与工具能够协调配合起来,了解他的定义、定位、组成及实现机制...
  • 手提式干粉灭火器检查工作,如何做到可执行、可追溯、可管理?
  • 移动碰撞法 ——套料排版算法——CAD c#
  • java基础(day08)-面向对象
  • Redis 高频面试题
  • 【删库跑路】一次删除pip的所有第三方库
  • vllm本地部署qwen3-4b
  • 场景设计题+智力题
  • windows下安装difi(无docker desktop版)
  • 7.15 腾讯云智面经整理
  • Wiz笔记二次开发
  • AI大模型开发架构设计(22)——LangChain的大模型架构案例实战
  • 记忆力训练day41
  • 1-Nodejs介绍与安装
  • 基于STM32的智能火灾报警系统设计
  • 【人工智能99问】激活函数有哪些,如何选择使用哪个激活函数?(5/99)
  • ADAU系列DSP用MCU来做控制,怎么去理解这个逻辑
  • Vue3 + MapLibre 地图管理工具 useMap 使用指南
  • 牛客:HJ22 汽水瓶[华为机考][数字处理]
  • 基于Sentinel-1雷达数据的洪水动态监测(附完整GEE代码)
  • 深入理解红锁
  • Vue3入门-指令补充
  • 学习C++、QT---26(QT中实现记事本项目实现文件路径的提示、C++类模板、记事本的行高亮的操作的讲解)
  • 面向对象与面向过程、函数式编程
  • C++回顾 Day8
  • 【时时三省】(C语言基础)通过指针引用多维数组
  • 【09】MFC入门到精通——MFC 属性页对话框的 CPropertyPage类 和 CPropertySheet 类
  • burpsuite使用中遇到的一些问题(bp启动后浏览器无法连接)/如何导入证书