全网最适合入门的面向对象编程教程:29 类和对象的Python实现-断言与防御性编程和help函数的使用
全网最适合入门的面向对象编程教程:29 类和对象的 Python 实现-断言与防御性编程和 help 函数的使用
摘要:
在 Python 中,断言是一种常用的调试工具,它允许程序员编写一条检查某个条件。本文主要介绍了断言的应用场景和特点以及 assert 语句的使用,同时介绍了防御性编程和 help()函数。
原文链接:
往期推荐:
全网最适合入门的面向对象编程教程:00 面向对象设计方法导论
全网最适合入门的面向对象编程教程:01 面向对象编程的基本概念
全网最适合入门的面向对象编程教程:02 类和对象的 Python 实现-使用 Python 创建类
全网最适合入门的面向对象编程教程:03 类和对象的 Python 实现-为自定义类添加属性
全网最适合入门的面向对象编程教程:04 类和对象的Python实现-为自定义类添加方法
全网最适合入门的面向对象编程教程:05 类和对象的Python实现-PyCharm代码标签
全网最适合入门的面向对象编程教程:06 类和对象的Python实现-自定义类的数据封装
全网最适合入门的面向对象编程教程:07 类和对象的Python实现-类型注解
全网最适合入门的面向对象编程教程:08 类和对象的Python实现-@property装饰器
全网最适合入门的面向对象编程教程:09 类和对象的Python实现-类之间的关系
全网最适合入门的面向对象编程教程:10 类和对象的Python实现-类的继承和里氏替换原则
全网最适合入门的面向对象编程教程:11 类和对象的Python实现-子类调用父类方法
全网最适合入门的面向对象编程教程:12 类和对象的Python实现-Python使用logging模块输出程序运行日志
全网最适合入门的面向对象编程教程:13 类和对象的Python实现-可视化阅读代码神器Sourcetrail的安装使用
全网最适合入门的面向对象编程教程:全网最适合入门的面向对象编程教程:14 类和对象的Python实现-类的静态方法和类方法
全网最适合入门的面向对象编程教程:15 类和对象的 Python 实现-__slots__魔法方法
全网最适合入门的面向对象编程教程:16 类和对象的Python实现-多态、方法重写与开闭原则
全网最适合入门的面向对象编程教程:17 类和对象的Python实现-鸭子类型与“file-like object“
全网最适合入门的面向对象编程教程:18 类和对象的Python实现-多重继承与PyQtGraph串口数据绘制曲线图
全网最适合入门的面向对象编程教程:19 类和对象的 Python 实现-使用 PyCharm 自动生成文件注释和函数注释
全网最适合入门的面向对象编程教程:20 类和对象的Python实现-组合关系的实现与CSV文件保存
全网最适合入门的面向对象编程教程:21 类和对象的Python实现-多文件的组织:模块module和包package
全网最适合入门的面向对象编程教程:22 类和对象的Python实现-异常和语法错误
全网最适合入门的面向对象编程教程:23 类和对象的Python实现-抛出异常
全网最适合入门的面向对象编程教程:24 类和对象的Python实现-异常的捕获与处理
全网最适合入门的面向对象编程教程:25 类和对象的Python实现-Python判断输入数据类型
全网最适合入门的面向对象编程教程:26 类和对象的Python实现-上下文管理器和with语句
全网最适合入门的面向对象编程教程:27 类和对象的Python实现-Python中异常层级与自定义异常类的实现
全网最适合入门的面向对象编程教程:28 类和对象的Python实现-Python编程原则、哲学和规范大汇总
更多精彩内容可看:
给你的 Python 加加速:一文速通 Python 并行计算
一个MicroPython的开源项目集锦:awesome-micropython,包含各个方面的Micropython工具库
文档和代码获取:
可访问如下链接进行对文档下载:
https://github.com/leezisheng/Doc
本文档主要介绍如何使用 Python 进行面向对象编程,需要读者对 Python 语法和单片机开发具有基本了解。相比其他讲解 Python 面向对象编程的博客或书籍而言,本文档更加详细、侧重于嵌入式上位机应用,以上位机和下位机的常见串口数据收发、数据处理、动态图绘制等为应用实例,同时使用 Sourcetrail 代码软件对代码进行可视化阅读便于读者理解。
相关示例代码获取链接如下:https://github.com/leezisheng/Python-OOP-Demo
正文
断言(assert)
在 Python 编程中,断言(assert)作为一种强大的调试工具,被广泛应用于代码的调试和开发过程中。通过在代码中插入断言语句,我们可以对代码的正确性进行严格的检查。当断言的条件为假时,程序会引发 AssertionError 异常并停止执行。而当断言的条件为真时,程序会如常继续执行,仿佛断言语句从未存在过。因此,合理使用断言,对于确保代码的质量和稳定性具有重要意义。
assert 表达式 , 描述
以下面代码为例,可以看到“1==2”的结果为 False,抛出了 AssertionError。
与异常不同,断言是为了提醒开发人员,在程序中可能出现了无法恢复的错误。对于一些可以预见的错误,例如未找到相关文件,用户通常能够自行纠正或重试。然而,断言并非为这类问题而生。在无 bug 的程序中,断言条件将永远保持沉默。但如果违背了断言,程序就会崩溃并报告错误,向开发人员明确指出究竟是哪个“不可能”的情况出现了。这使得追踪和修复程序中的 bug 变得更为轻松。在 Python 中,断言语句是一种用于调试的辅助功能,它并非处理运行时错误的机制。使用断言的目的在于帮助开发人员更快地找到可能导致 bug 的根本原因。除非程序中确实存在 bug,否则断言绝不会抛出错误。
防御性编程与 unittest 单元测试库
断言一般用在防御型的编程、运行时检查程序逻辑、检查约定、程序常量、检查文档时,在从来不会运行失败的代码不必要加上断言。在单元测试框架中,我们常常使用断言。所谓单元测试,就是指对软件中的最小可测试单元进行检查和验证,通常是一个函数或一个方法。单元测试有助于我们在早期发现错误,提高代码的可靠性和可维护性。在 Python 中,内置了 unittest 单元测试库,可以用来编写测试代码。unittest 中常用的几个常用断言的使用方法如下:
名称 | 作用 |
---|---|
assertEqual | 如两个值相等,则 pass |
assertNotEqual | 如两个值不相等,则 pass |
assertTrue | 判断 bool 值为 True,则 pass |
assertFalse | 判断 bool 值为 False,则 Pass |
assertIsNone | 不存在,则 pass |
assertIsNotNone | 存在,则 pass |
关于 unittest 单元测试库中断言的使用我们将会在之后讲到,这里仅作简单了解即可。
在使用断言时,需要特别注意的点是在命令行中使用-o 和-oo 标志,或者修改 CPython 中的 PYTHONOPTIMIZE 环境变量,可以全局性地禁用断言。此时,所有的断言语句都将失效,程序将直接跳过而不处理断言,因此不会执行任何条件表达式。
在 Python 的实际开发过程中,我们经常会遇到性能问题。所谓性能问题,就是 Python 程序运行得相对较慢。遇到性能问题时,我们有两种方法可以进行优化:一是修改源代码,优化逻辑,提升性能;二是打开 Python 解释器的优化功能。
Python 解释器提供了两种优化级别:
- level1 优化:通过将内置的__debug__全局变量设置为 false,并删除 assert 语句,达到优化效果。
- level2 优化:除了 level1 的优化措施外,还会删除函数的文档说明(即函数后面的''''注释)。
使用-O 参数可以达到 level1 优化效果(大写字母 O),而使用-OO 参数则可以达到 level2 优化效果(两个都是大写字母 O)。这些优化方法对于提升 Python 程序的运行速度非常有帮助。
python -o main.py
help()函数
在 Python 中,有许多内置函数和模块,其中一些可能不太起眼,但却非常实用。其中之一就是 help()函数。help()函数用于获取有关 Python 对象、模块、函数或方法的帮助信息。它可以更好地理解 Python 的功能和如何正确使用它们。
help()函数的基本用法非常简单,只需在交互式 Python 解释器中输入对象、模块、函数或方法的名称,并将其作为参数传递给 help()函数。
help语法:help([object])
这里,我们看看 assert 函数的 help 输出:
全网最适合入门的面向对象编程教程:29 类和对象的Python实现-断言与防御性编程和help函数的使用的更多相关文章
- 最适合入门的Laravel中级教程(一)
Laravel 是一个全栈框架: 我们使用 Laravel 开发业务常见有 3 个方向: 前端页面和后端逻辑混合的应用 主要是面向对 SEO 有需求的项目: 比如说新闻资讯博客文章等: 一般在控制器中 ...
- Java基础--面向对象编程1(类与对象)
1.类(class)的定义 类是对一组具有相同特征和行为的对象的抽象描述. 在程序中,引入类的概念,就是为了快速生成更多的具有相同特性和行为的事物. 2.对象(object)的定义 对象是类的具体实现 ...
- 1.面向过程编程 2.面向对象编程 3.类和对象 4.python 创建类和对象 如何使用对象 5.属性的查找顺序 6.初始化函数 7.绑定方法 与非绑定方法
1.面向过程编程 面向过程:一种编程思想在编写代码时 要时刻想着过程这个两个字过程指的是什么? 解决问题的步骤 流程,即第一步干什么 第二步干什么,其目的是将一个复杂的问题,拆分为若干的小的问题,按照 ...
- Python开发基础-Day17面向对象编程介绍、类和对象
面向对象变成介绍 面向过程编程 核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西.主要应用在一旦完成很少修改的地方,如linux ...
- python基础之面向对象编程介绍、类和对象
面向对象变成介绍 面向过程编程 核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西.主要应用在一旦完成很少修改的地方,如linux ...
- 前端学PHP之面向对象系列第一篇——类和对象
× 目录 [1]类 [2]成员属性[3]成员方法[4]对象[5]成员访问[6]this 前面的话 面向对象程序设计(OOP)是一种计算机编程架构.计算机程序由单个能够起到子程序作用的单元或对象组成,为 ...
- JAVA编程中的类和对象
1:初学JAVA,都知道JAVA是面向对象的编程.笔者这节开始说说类和对象.(实例仅供参考,如若复制粘贴记得修改包名和类名,避免出错) 学习JAVA的快捷键,Alt+/代码补全功能,其实此快捷键启动了 ...
- python 面向对象之封装与类与对象
封装 一,引子 从封装本身的意思去理解,封装就好像是拿来一个麻袋,把小猫,小狗,小王八,小老虎一起装进麻袋,然后把麻袋封上口子.照这种逻辑看,封装='隐藏',这种理解是相当片面的 二,先看如何隐藏 在 ...
- JavaSE基础知识(5)—面向对象(5.1类和对象概念、创建及内存分配)
一.类和对象的相关概念 1.面向对象和面向过程的理解 面向对象和面向过程都属于解决问题的思考方式.面向过程:以执行者的角度思考问题,侧重于“怎么做”,比较适合解决小型项目面向对象:以指挥者的角度思考问 ...
- Java精选笔记_面向对象(慨念、类和对象)
面向对象概念 在程序中使用对象来映射现实中的事物,使用对象的关系来描述事物之间的联系,这种思想就是面向对象. 相对于面向过程而言.是一种思想,强调的是功能的对象. 面向对象的本质:以类的方式组织代码, ...
随机推荐
- 【论文笔记】AlexNet
[深度学习]总目录 由于受到计算机性能的影响,虽然LeNet在图像分类中取得了较好的成绩,但是并没有引起很多的关注. 直到2012年,Alex等人提出的AlexNet网络在ImageNet大赛上以远超 ...
- python中使用time.pref_counter()精确计时
time.pref_counter()返回一个CPU级别的精确时间值,以秒为单位. 它通常用于测量某段程序的运行时间,因此取两次调用pref_counter()的差值才有意义. import time ...
- 关于 Elasticsearch 不同分片设置的压测报告
摘要 为了验证当前集群经常出现索引超时以及请求拒绝的问题,现模拟线上集群环境及索引设置,通过压测工具随机生成测试数据,针对当前的 850 个分片的索引,以及减半之后的索引,以及更小分片索引的写入进行压 ...
- C#.NET 保存图片时System.Runtime.InteropServices.ExternalException:“GDI+ 中发生一般性错误。”
System.Runtime.InteropServices.ExternalException:"GDI+ 中发生一般性错误." 原因:文件夹不存在. 解决方法: if (!Di ...
- SOP页面跳转设计 RAS AES加密算法应用跨服务免登陆接口设计
SOP页面跳转设计 RAS AES加密算法应用跨服务免登陆接口设计 SOP,是 Standard Operating Procedure三个单词中首字母的大写 ,即标准作业程序,指将某一事件的标准操作 ...
- python xlrd excel读取操作
import xlrd wb = xlrd.open_workbook("test.xlsx") sheet1 = wb.sheets()[1] # 通过索引顺序获取 #table ...
- MoneyPrinterPlus:AI自动短视频生成工具-阿里云配置详解
MoneyPrinterPlus是一个很好的自动短视频生成工具,虽然是一个非常好的工具,但是有些小伙伴可能不太清楚具体应该如何配置才能让它跑起来. 因为MoneyPrinterPlus依赖一些具体的配 ...
- Asp.net Core Flurl.Http 结合IHttpClientFactory管理HttpClient生命周期
Asp.net Core, 在我用过的多种Http REST 客户端: RestSharp WebApiClient Refit Flurl 中,Flurl可以说是最符合我口味的,用起来那可真的顺滑无 ...
- CentOS上安装telnet
客户端 yum -y intall telnet 服务端 yum -y install xinetd #telnet服务依赖于xinetd yum -y install telnet-server # ...
- 开源一个RAG大模型本地知识库问答机器人
弹指间,2009年大学毕业到现在2024年,已经15年过去了. 前2天,看到自己14年在博客园写的一个博客,哪个时候是工作之余创业 感兴趣的朋友可以看看我10年前发的一篇博客https://www.c ...