
Python能量大爆炸:探寻编程的极限挑战
文章平均质量分 92
Python是一种简单易学、高效灵活的编程语言,具有丰富的第三方库和生态系统。它支持多种编程范式,适用于各种领域的开发,包括Web开发、数据科学和人工智能。Python具有清晰的语法和强大的功能,同时具备跨平台特性,使得开发快速、可读性强。这些特点使得Python成为一种广泛应用和受欢迎的编程语言。
进击的雷神
CSDN博客专家、担任过EMV软件工程师、嵌入式软件工程师、JAVA开发工程师、测试开发工程师、某公司测试组长,有自己的测试专利
展开
-
python实现存储过程
使用pyodbc连接数据库并执行存储过程。通过fetchone()获取第一个结果集的总行数。使用fetchall()获取第二个结果集的所有数据。通过nextset()处理存储过程返回的多个结果集。确保你已经安装了pyodbc根据你的数据库类型和存储过程的实际实现,可以调整 SQL 查询和连接字符串的配置。错误的原因是OFFSET子句使用了负数的偏移量,而 SQL Server 不允许使用负数。解决方法是确保OFFSET的值为零或正数,并根据需要调整查询逻辑。原创 2024-12-20 11:03:51 · 115 阅读 · 0 评论 -
Pyinstaller安装与使用
PyInstaller将Python应用程序冻结(打包)独立可执行文件中。它可以构建较小的可执行文件,它是完全多平台的,并且使用OS支持来加载动态库,从而确保完全兼容。原创 2024-06-04 11:21:06 · 975 阅读 · 0 评论 -
macos如何安装Tesseract软件and常规应用及问题处理
Homebrew 在 macOS 13 上可能会遇到一些构建失败的情况,因为它是一个预发布版本,不是稳定版本,可能会有一些兼容性问题。3.安装 pytesseract 之后,您还需要安装 Tesseract OCR 的二进制文件。4.安装完成后,您可以使用 pytesseract 库在 Python 中调用 Tesseract OCR 进行文字识别。2.安装完成后,可以在终端或命令提示符中输入以下命令测试 Tesseract 是否安装成功。安装完成后,可以使用 Tesseract 进行文字识别等操作。原创 2024-04-28 22:58:32 · 1198 阅读 · 0 评论 -
函数式编程之递归&生成器
在 python2.5 中,一些加强特性加入到生成器中,所以除了 next()来获得下个生成的值,用户可以将值回送给生成器[send()],在生成器中抛出异常,以及要求生成器退出[close()] 由于双向的动作涉及到叫做 send()的代码来向生成器发送值(以及生成器返回的值发送回来), 现在 yield 语句必须是一个表达式,因为当回到生成器中继续执行的时候,你或许正在接收一个进。对于每行的数据,你希 望执行非元素的操作以及处理,但当正指向和迭代过它的时候,你“不想失去你的地盘“。原创 2024-04-03 09:27:52 · 182 阅读 · 0 评论 -
变量作用域
在一个过程中,如果名字在过程的声明之内,它的出现即为过程的局部变量。否则的话,出现即为非局部的“全局变量的一个特征是除非被删除掉,否则它们的存活到脚本运行结束,且对于所有的函数,他们的值都是可以被访问的,然而局部变量,就像它们存放的栈,暂时地存在,仅仅只依赖于定义它们的函数现阶段是否处于活动。这几行实际上是对 f1()的拷贝,对 f2()做相同的事,定义了局部变量y和z,以及对一个内部 函数 f3().此外,这里的局部变量会遮蔽全局以及那些在中间局部化作用域的变量,比如,f1()的。原创 2024-04-02 22:01:11 · 173 阅读 · 0 评论 -
函数式编程
在我们的程序中,我们经常想要给和数字加一或者乘以 100除了大量的,如 add(1,foo),add(1,bar),mul(100, foo), mul(100, bar)般的调用,拥有已存在的并使函数调用简化的函数不是一件很美妙的事吗?现在可能就是一个好机会。函数式编程的最后的一部分是 reduce(),reduce 使用了一个二元函数(一个接收带带两个值作为输入,进行了一些计算然后返回一个值作为输出),一个序列,和一个可选的初始化器,卓有成效地将那个列表的内容“减少”为一个单一的值,如同它的名字一样。原创 2024-04-02 21:33:00 · 261 阅读 · 0 评论 -
函数式编程之参数
python 函数的形参集合由在调用时要传入函数的所有参数组成,这参数与函数声明中的参数列 表精确的配对。这些参数包括了所有必要参数(以正确的定位顺序来传入函数的),关键字参数(以 顺序或者不按顺序传入,但是带有参数列表中曾定义过的关键字),以及所有含有默认值,函数调用 时不必要指定的参数。(声明函数时创建的)局部命名空间为各个参数值,创建了一个名字。一旦函 数开始执行,即能访问这个名字。原创 2024-03-13 19:10:53 · 347 阅读 · 0 评论 -
函数式编程之传递函数
当学习一门如 C 的语言时,函数指针的概念是一个高级话题,但是对于函数就像其他对象的 python 来说就不是那么回事了.函数是可以被引用的(访问或者以其他变量作为其别名),也作为参 数传入函数,以及作为列表和字典等等容器对象的元素,函数有一个独一无二的特征使它同其他对象区分开来,那就是函数是可调用的。我们注意到可以用其他的变量来做作为函数的别名,因为所有的对象都是通过引用来传递的,函数也不例外。确定你明白"foo"(函数对象的引用)和"foo()"(函数对象的调用)的区别。原创 2024-03-13 18:27:22 · 280 阅读 · 0 评论 -
函数式编程之创建函数
在某些编程语言里, 函数声明和函数定义区分开的。一个函数声明包括提供对函数名,参数的 名字(传统上还有参数的类型),但不必给出函数的任何代码,具体的代码通常属于函数定义的范畴。在声明和定义有区别的语言中,往往是因为函数的定义可能和其声明放在不同的文件中。python将这两者视为一体,函数的子句由声明的标题行以及随后的定义体组成的。现在我们知道装饰器实际就是函数。我们也知道他们接受函数对象。但它们是怎样处理那些函 数的呢?一般说来,当你包装一个函数的时候,你最终会调用它。原创 2024-03-12 09:50:00 · 148 阅读 · 0 评论 -
函数式编程之函数及其调用
函数是对程序逻辑进行结构化或过程化的一种编程方法。能将整块代码巧妙地隔离成易于管理 的小块,把重复代码放到函数中而不是进行大量的拷贝--这样既能节省空间,也有助于保持一致性,因为你只需改变单个的拷贝而无须去寻找再修改大量复制代码的拷贝。Python 中函数的基础部分与你熟悉的其他的语言没有什么不同.本章开始,我们先回顾一下函数基础, 然后将着重介绍 python 函数的其他特性.函数可以以不同的形式出现。下面简单展示了一些创建、使用,或者引用函数的方法。原创 2024-03-12 09:36:23 · 229 阅读 · 0 评论 -
错误与异常之为何要异常
而有了 Python 的异常处理能力, 也的确没有必要了.如果上文的动机不够充分, 试想 Python 编程没有程序级的异常处理. 第一件事需要担心的是客户端程序员在自己的代码中遗忘控制. 举例来说, 如果你创造了一个交互的应用程序分配并使用了 大量的资源, 如果一个用户击中 Ctrl+C 或其他键盘中断, 应用程序将不会有机会执行清理工作, 可 能导致数据丢失或数据损坏. 此外, 也没有机制来给出可选的行为, 诸如提示用户, 以确认他们真 的是想退出或是他们意外的按下了 Ctrl 键.原创 2024-03-09 09:00:00 · 144 阅读 · 0 评论 -
错误和异常之标准异常&创建异常
表 10.2 列出了所有的 Python 当前的标准异常集,所有的异常都是内建的. 所以它们在脚本启动 前或在互交命令行提示符出现时已经是可用的了.所有异常的基类python 解释器请求退出用户中断执行(通常是输入^C)常规错误的基类所有的内建标准异常的基类所有数值计算错误的基类浮点计算错误数值运算超出最大限制除(或取模)零 (所有数据类型)断言语句失败对象没有这个属性EOFError操作系统错误的基类IOError输入/输出操作失败操作系统错误。原创 2024-03-09 07:00:00 · 294 阅读 · 0 评论 -
错误与异常之断言
断言是一句必须等价于布尔真的判定;此外,发生异常也意味着表达式为假.这些工作类似于 C 语 言预处理器中 assert 宏,但在 Python 中它们在运行时构建(与之相对的是编译期判别).如果你刚刚接触断言这个概念,无妨.断言可以简简单单的想象为 raise-if 语句(更准确的说是 raise-if-not 语句).测试一个表达式,如果返回值是假,触发异常.断言通过 assert 语句实现,在 1.5 版中引入.原创 2024-03-08 09:51:42 · 202 阅读 · 0 评论 -
错误与异常之触发异常
早在 Python 1.5 前,标准的异常是基于字符串实现的.然而,这样就限制了异常之间不能有相互 的关系.这种情况随着异常类的来临而不复存在.到 1.5 为止,所有的标准异常都是类了.程序员还是可以用字符串作为自己的异常的,但是我们建议从现在起使用异常类.为了向后兼容性,还是可以启用基于字符串的异常.从命令行以-X 为参数启动 Python 可以提供你 字符串方式的标准异常.从 Python1.6 起这个特性被视为废弃的.原创 2024-03-08 09:35:27 · 129 阅读 · 0 评论 -
错误与异常之上下文管理
从上面的错误我们可以看出, float() 对不合法的参数很不客气. 例如, 如果参数的类型正确(字符串), 但值不可转换为浮点数, 那么将引发 ValueError 异常, 因为这是值的错误. 列表也是不合法的参数, 因为他的类型不正确, 所以, 引发一个 TypeError 异常.我们现在给出一个交互操作的例子 - 从最基本的错误检测开始, 然后逐步改进它, 增强代码的健壮性. 这里的问题是把一个用字符串表示的数值转换 为正确的数值表示形式, 而且在过程中要检测并处理可能的错误.原创 2024-03-07 18:23:09 · 301 阅读 · 0 评论 -
错误和异常之检测和处理异常
异常可以通过 try 语句来检测. 任何在 try 语句块里的代码都会被监测, 检查有无异常发生.try 语句有两种主要形式: try-except 和 tr y-finally . 这两个语句是互斥的, 也就是说你只能使用其中的一种. 一个 try 语句可以对应一个或多个 except 子句, 但只能对应一个 finally 子句, 或是一个 try-except-finally 复合语句.原创 2024-03-07 18:11:34 · 237 阅读 · 0 评论 -
错误和异常之概念
是给出异常名和紧跟其后的异常的参数.__class__属性表示实例化该实例的类对象. 比在此显示完整的类名(myexc.FileError)更好的做法是通过类对象的__name__属性来显示类名(FileError),这也是异常未被捕获时你在解释器所见到的.随后是我们在封装函数中辛辛苦苦聚到一起的参数.称, 原因, 以及发生错误的行号. 不管你是通过 Python 解释器执行还是标准的脚本执行, 所有的错误都符合相似的格式, 这提供了一个一致的错误接口. 所有错误, 无论是语意上的还是逻辑上的,原创 2024-03-01 11:48:33 · 164 阅读 · 0 评论 -
Python核心编程之文件和输入输出
本章将深入介绍 Python 的文件处理和相关输入输出能力. 我们将介绍文件对象(它的内建函数, 内建方法和属性), 标准文件, 同时讨论文件系统的访问方法, 文件执行, 最后 简洁地涉及持久存储和标准库中与文件有关的模块.原创 2023-12-14 06:00:00 · 1061 阅读 · 0 评论 -
PyPDF2库对PDF实现读取的应用
PyPDF2 是一个用于处理 PDF 文件的 Python 库,它提供了从 PDF 中提取文本、合并、分割和操作页面等功能。首先,我们需要安装 PyPDF2 库。安装完成后,我们可以开始使用 PyPDF2。在这里,我们使用open()函数打开 PDF 文档,并将其以二进制模式('rb')打开。然后,我们使用函数创建一个PdfReader对象,该对象用于读取 PDF 文档。这里,我们使用pages属性访问文档的页面列表,并使用索引来选择要读取的页面。最后,我们使用方法从页面中提取文本内容。原创 2023-12-13 11:13:05 · 1929 阅读 · 0 评论 -
Python核心编程之条件与循环
迭代器是在版本 2.2 被加入 P ython 的, 它为类序列对象提供了一个类序列的接口. 我们在前边的第 6 章已经正式地介绍过序列. 它们是一组数据结构,你可以利用它们的索引从 0 开始一直"迭代" 到序列的最后一个条目. 用"计数"的方法迭 代序列是很简单的. Python 的迭代无缝地支持序列对象, 而且它还允许程序员迭代非序列类型, 包括用户定义的对象.迭代器用起来很灵巧, 你可以迭代不是序列但表现出序列行为的对象, 例如字典的 key , 一个。原创 2023-12-13 10:03:09 · 1181 阅读 · 0 评论 -
Python核心编程之映射和集合类型
本章中,我们来讨论 Python 语言中的映射类型和集合类型。和前面的章节一样,我们首先做一 个介绍,然后在来讨论可用操作符,工厂函数、内建函数(BIF)和方法。然后我们再来看看每种数据 类型的详细用法。7.1 映射类型:字典字典是 Python 语言中唯一的映射类型。映射类型对象里哈希值(键) 和指向的对象(值)是一对 多的关系。 它们与 Perl 中的哈希类型(译者注:又称关联数组)相似,通常被认为是可变的哈希表。 一个字典对象是可变的,它是一个容器类型,能存储任意个数的 Python 对象,其中也包括原创 2023-12-12 17:03:06 · 1603 阅读 · 0 评论 -
Python核心编程之序列下篇
难道它们 的名字现在不应该都是'jane'了吗?正如我们在本章的开头所讨论的,无论 list()还是 tuple()都不可能做完全的转换(见 6.1.2 节).也就是说,你传给 tuple()的一个列表对象不可能变成一个元组,而你传给 list()的 对象也不可能真正的变成一个列表.虽然前后两个对象(原来的和新的对象)有着相同的数据集 合(所以相等 == ),但是变量指向的却不是同一个对象了(所以执行 is 操作会返回 false).还 要注意,即使它们的所有的值都相同,一个列表也不可能"等于"一个元组.原创 2023-12-08 11:50:47 · 1212 阅读 · 0 评论 -
Python核心编程之序列上篇
Unicode 是计算机可以支持这个星球上多种语言的秘密武器.在 Unicode 之前,用的都是 ASCII,ASCII 码非常简单,每个英文字符都是以七位二进制数的方式存贮在计算机内,其范围 是 32 到 126.当用户在文件中键入一个大写字符 A 时,计算机会把 A 的 ASCII 码值 65写入磁盘,然后当计算机读取该文件时,它会首先把 65 转化成字符 A 然后显示到屏幕上.ASCII 编码的文件小巧易读。原创 2023-12-07 14:49:26 · 1287 阅读 · 0 评论 -
python实现模拟用户点击行为测试
使用条件变量:条件变量是一种线程间通信的机制,可以用来同步多个线程的状态并决定它们的执行顺序。使用条件变量:条件变量是一种线程间通信的机制,可以用来同步多个线程的状态并决定它们的执行顺序。使用数据库:使用关系型数据库,如MySQL、PostgreSQL等,可以将从不同网页中提取的数据保存到表中,并进行数据清洗、处理和分析。这种方法简单易用,适合保存少量的数据。考虑使用CDN加速:可以使用CDN加速服务,将静态资源分发到全球各地的服务器上,让用户从离自己最近的服务器获取资源,提升访问速度,减少服务器负担。原创 2023-12-06 06:15:00 · 2604 阅读 · 0 评论 -
Python核心编程之认识python中的数字
表 5.3 总结了所有的算术运算符, 从上到下, 计算优先级依次降低。这里列出的所有 运算符都比即将在 5.5.4 小节讲到的位运算符优先级高。注:** 运算符优先级高于单目运算符-519>>>>>> 4 ** 364>>>>>> 8 / 32>>> 8 % 325630639990L709879L(-1+0j)0j2j注意指数运算符的优先级高于连接实部和虚部的+号运算符。就上面最后一个例子来说, 我 们人为的加上了括号,这就改变运算顺序, 从而得到我们想要的结果。原创 2023-12-05 06:00:00 · 1290 阅读 · 0 评论 -
Python核心编程之认识python对象
首先一个数字对象被创建,然后赋值给 foo1. 然后第二个数值对象被 创建并赋值给 foo2. 尽管两个对象保存的是同样大小的值,但事实上系统中保存的都是两个独 立的对象,其中 foo1 是第一个对象的引用, foo2 则是第二个对象的引用。没错,对象就象一个装着内容的盒子。如果非常熟悉 C 语言,和 None 类型最接近的 C 类型就 是 void,None 类型的值和 C 的 NULL 值非常相似(其他类似的对象和值包括 Perl 的 undef 和 Java 的 void 类型与 null 值)。原创 2023-12-04 08:41:17 · 1376 阅读 · 0 评论 -
Python核心编程之基础内功
最早的 Python profile 模块是 Python 写成的,用来测试函数的执行时 间,及每次脚本执行的总时间,既没有特定函数的执行时间也没有被包含的子函数调用时间。hotshot 模块是在 Python2.2 中新增的,它的目标是取代 profile 模块, 它修复了 profile 模块的一些错误, 因为它是用 C 语言写成,所以它有效的提高了性能。在 Python 语言中,对象是通过引用传递的。在赋值时,不管这个对象是新创建的,还 是一个已经存在的,都是将该对象的引用(并不是值)赋值给变量。原创 2023-12-03 16:56:30 · 1114 阅读 · 0 评论 -
Python核心编程之此时起步,为时不晚
我们会在本章中看到更多类似的例子。传统除法是指如果两个操作数都是整数的话, 它将执行是地板除(取比商小的最大整数)(关于“地板除”请参考第 5 章——译者注),而浮 点除法是真正的除法,不管操作数是什么类型,浮点除法总是执行真正的除法。在上面这个类中, 我们定义了一个静态变量 version, 它将被所有实例及四个方法共享, __init__(), showname(), showver(), 及熟悉的 addMe2Me(). 这些 show*()方法并没有做什 么有用的事情, 仅仅输出对应的信息。原创 2023-12-03 09:32:54 · 995 阅读 · 0 评论 -
python核心编程之开门见山,带你了解Python后的大背景
Python 是一门优雅而健壮的编程语言,它继承了传统编译语言的强大性和通用性,同时也 借鉴了简单脚本和解释语言的易用性。它可以帮你完成工作,而且一段时间以后,你还能看明 白自己写的这段代码。你会对自己如此快地学会它和它强大的功能感到十分的惊讶,更不用提 你已经完成的工作了!只有你想不到,没有 Python 做不到。原创 2023-12-02 23:01:08 · 1180 阅读 · 0 评论 -
python实现多线程并发测试并生成excel报告
同时,也可以借助第三方的并发测试工具和框架,如JMeter、Locust等,来简化并发测试的实现和管理。在大规模并发和极端情况下,系统的行为可能会出现意料之外的问题,这些问题可能无法通过常规的多线程并发测试发现。使用with语句管理资源:对于需要显式关闭的资源(例如文件、网络连接等),可以使用Python的with语句来管理资源,确保资源在使用完毕后能够被正确关闭,避免出现异常情况。根据系统的资源限制和测试需求,可以逐步增加并发数量和线程数量,观察系统的负载情况,确保在承受范围内进行测试。原创 2023-12-02 06:30:00 · 1322 阅读 · 0 评论 -
Selenium关于内容信息的获取读取
判断的依据就是, 当方法真正执行时, 有没有传入实例, A.f(a) 和 a.f() 用法的区别只是在于, 第一种需要人为传入实例才能调用, 而第二种, 是虚拟机帮我们做好了传入实例的动作, 不用我们那么麻烦而已, 两种方法。, 其实这两者差别也不大. 从上面我们得知, 一个方法的创建, 是需要self, 而调用时, 也会使用self,而只有实例化对象, 才有这个self, class是没有的, 所以像下面的执行, 是失败的额。// 将刚才压入栈的 A/a 取出来。// 关键位置参数的个数。原创 2023-11-10 06:15:00 · 287 阅读 · 0 评论 -
函数与方法的区别
判断的依据就是, 当方法真正执行时, 有没有传入实例, A.f(a) 和 a.f() 用法的区别只是在于, 第一种需要人为传入实例才能调用, 而第二种, 是虚拟机帮我们做好了传入实例的动作, 不用我们那么麻烦而已, 两种方法。其实这两者差别也不大. 从上面我们得知, 一个方法的创建, 是需要self, 而调用时, 也会使用self,而只有实例化对象, 才有这个self, class是没有的, 所以像下面的执行, 是失败的额。带着这个问题, 我们继续探讨.很明显, 方法的绑定, 肯定是伴随着。原创 2023-11-09 08:30:00 · 98 阅读 · 0 评论 -
基于 httprunner自动化测试平台搭建与开发
目 录1 前言 1.1 文档目的 1.2 名词术语 2 接口自动化测试实施原则 2.1 实施原则 2.2 实施接口自动化测试的优缺点 3 实施范围和目标 3.1 实施范围 3.2 实施目标 3.3 总体实施策略 4 技术方案实施内容 4.1 httprunner的特性和优势: 4.2 httprunner 的工作原理: 4.2.1 第一步:环境搭建 4.2.2 第二步:编写脚本 4.2.3 第三步:执行测试 4.3 Jenkins的安装部署与配置 4.3.1 第一步:代码上传svn 4.3.2 第二步:je原创 2022-04-27 09:33:32 · 2575 阅读 · 0 评论 -
scrapy爬虫系列之安装及入门介绍
前面介绍了很多Selenium基于自动测试的Python爬虫程序,主要利用它的xpath语句,通过分析网页DOM树结构进行爬取内容,同时可以结合Phantomjs模拟浏览器进行鼠标或键盘操作。但是,更为广泛使用的Python爬虫框架是——Scrapy爬虫。这是一篇在Windows系统下介绍 Scrapy爬虫安装及入门介绍的相关文章。一. 安装过程本文主要讲述Windows下的安装过程,首先我的Python是2.7.8版本。通过命令查看软件最新版本,表示PIP安装成功。原创 2023-10-08 05:00:00 · 972 阅读 · 0 评论 -
禅道bug统计钉钉通知升级之饼状图系列
需求:需要直观反应bug数据排名统计情况。原创 2023-04-15 15:00:59 · 531 阅读 · 0 评论 -
禅道bug统计钉钉通知升级之-只艾特有bug在手的人
download_user_info()这边的配置有做调整,因为考虑人员变动更新,每次都会去下载获取最新的人员信息,但是处于钉钉对这个接口调用一个月一万次的限制(不想浪费这个资源),且和bug相关的基本是开发测试,这块的新增变动的可能性较小,还有就是这个openapi目前是挂靠在测试环境的,部署频繁和调整可能会影响他的调用,综上考虑,我们还是在本地保存一份人员信息,手动做维护。需求:每次bug通知都艾特所有人,导致后面都麻木了,无关和有关都艾特的情况下,不会引起用户的特别关注。四、看下整体艾特的效果吧。原创 2023-04-10 11:22:15 · 1037 阅读 · 0 评论 -
禅道bug统计钉钉通知之封装-支持轮询读取配置文件维护N个项目的通知
目录说明:bug_tj:处理钉钉通知中的方法解析、数据库连接、钉钉发送等config:用于存放不同项目的配置文件,方便对应分发不同的项目群做通知,日后只需要维护这个配置文件就可以utils:常用的通用方法logs:存放日志文件1、获取本周周一日期这个方法主要是为了规避非法定工作日而造成的冗余通知2、数据库连接封装主要封装用于遍历读取配置文件中的sql语句进行解析执行 3、报告通用报告html模板,用于针对不同项目的数据填充4、钉钉发送模板config:项目配置文件模板,下面是一个原创 2023-03-23 20:07:01 · 555 阅读 · 0 评论 -
中文编码问题:raw_input输入、文件读取、变量比较等str、unicode、utf-8转换问题
而真正意义上通用的字符串则是unicode类型的变量, 它则与Python 3中的str变量对应。支持多种编码格式,这为程序员带来了额外的负担,每当你向一个文件写入字符串的时候,你必须定义一个编码(encoding参数)用于把对应的Unicode内容转换成你定义的格式,通过encode()函数实现;注意,coding:encoding只是告诉Python文件使用了encoding格式的编码,但是编辑器可能会以自己的方式存储.py文件,因此最后文件保存的时候还需要编码中选指定的ecoding才行。原创 2023-09-18 06:15:00 · 203 阅读 · 0 评论 -
python难题切片处理
然后这时就出现了边距折叠(合并),按理的话应该两个盒子垂直相距是40px ,然而这会出现上下两个盒子,中间相隔的边距谁的边距大就会被应用、( 两个正值取最大,负值取最大负值,一正一负相加 )像我们开头讲到的那个同级div重合,也可以像上面嵌套个div给它边距也拥有实际内容,就不会扔进BFC区域单独渲染、就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素,外面也不会影响到里面。都同时拥有上下外边距,但是与下面的p段落外边距折叠重合了。可以理解为要被渲染前的一个区域,它这个区域有自己的特性、原创 2023-09-17 07:00:00 · 156 阅读 · 0 评论 -
Python的单元测试之unittest
是一个功能类似 unittest 的库,它集合众家标准测试库之所长,和 unittest 相比,功能更为强大,使用更为简单,OpenStack 广泛的利用它编写单元测试。unittest 提供了自动匹配发现并执行测试用例的功能,随着项目代码结构越发庞大,势必有多个测试文件,自动匹配发现并测试用例的功能在此就显得非常有用,只要满足。unittest 提供了丰富的命令行入口,可以根据需要执行某些特定的用例。的测试用例都会被 unittest 发现并执行,测试用例文件的默认匹配规则为 test*.py。原创 2023-09-16 06:15:00 · 166 阅读 · 0 评论