
Python
文章平均质量分 87
CS创新实验室
致力于计算机、人工智能相关领域的研发和教学
展开
-
Python 代码质量:最佳实践与工具(3)
通过以上已经了解了定义 Python 代码质量的不同方面,从基本的功能性到高级特性,如可读性可维护性和可扩展性。为了生成高质量的代码,应该遵循编码标准,并使用诸如代码检查工具、类型检查工具和格式化工具等工具。系列文章中还深入探讨了代码审查、测试以及使用 AI 助手等策略和技术。作为一名 Python 开发者,编写高质量代码对你至关重要。高质量代码降低了开发成本,减少了错误,并促进了同事之间的协作。原创 2025-04-09 08:49:11 · 943 阅读 · 0 评论 -
Python 代码质量:最佳实践与工具(2)
通常,这些规范主要是表面上的(即与代码外在形式相关),这意味着它们不会改变代码的逻辑结果,尽管某些风格选择确实可以防止常见的逻辑错误。是一个过程,开发者在将代码合并到主分支或生产代码库之前,相互检查和评估彼此的代码,以确保其符合质量标准。当然,此表格并未详尽列出实现代码质量的所有策略、技术和工具,但它提供了一个良好的起点。它不仅改进了被审查的代码,还帮助开发者成长、学习,并在整个团队中共同推动编码标准和最佳实践的实施。这是一个通常添加到软件项目根目录中的文档,通常是简短的指南,提供有关项目的必要信息。原创 2025-04-08 14:25:49 · 1007 阅读 · 0 评论 -
Python 代码质量:最佳实践与工具(1)
如何编写高质量代码原创 2025-04-06 14:48:42 · 1070 阅读 · 0 评论 -
检查 Python 中的可迭代对象是否相等
比较可迭代对象是否相等的方法原创 2025-04-04 11:32:06 · 833 阅读 · 0 评论 -
Python 并发编程:线程、进程与异步
else:'threads''asyncio'进程适合 CPU 密集型任务asyncio 适合 I/O 密集型任务,尤其是需要管理大量并发任务时线程易于集成,但受限于 GIL 和调试复杂性开销更低:运行在单线程上,因此可以实现高(数百万?)并发任务可见的调度点:使用await使这一点变得清晰。这有助于推理数据竞争和调试任务支持取消操作第三方支持有限。由于无法从普通函数调用异步函数,可能会在外部库的调用上遇到困难如果开发者不熟悉事件循环和协程,会更复杂。原创 2025-01-10 11:04:50 · 578 阅读 · 0 评论 -
快速了解Python对象的工具:WAT
WAT 是一个功能强大且易于使用的 Python 检查工具,适合所有级别的开发者。无论是调试、学习还是探索代码,WAT 都能为你提供清晰的洞察力。通过其灵活的语法和丰富的功能,你可以轻松回答“这是什么?”的问题,并更深入地理解 Python 对象。原创 2025-01-08 09:08:20 · 293 阅读 · 0 评论 -
Python中的时间管理模块:whenever
在 Python 中处理日期和时间常常让人感觉像是踏入了一个雷区,因为除了一般的日期和时间之外,有时还会遇到时区问题,甚至对于某些地区,还有夏令时(DST)问题,虽然这些能够使用众人皆知的 datatime 和 time 模块,但使用起来还是颇费周折的。要简单,还要高性能,不妨了解一下 Whenever——这是一个革命性的库,专为类型化、DST 安全的日期时间操作而设计。Whenever 的核心目标是帮助开发者轻松编写正确且经过类型检查的日期时间代码。原创 2025-01-07 11:38:12 · 280 阅读 · 0 评论 -
解决大型Python项目中模块依赖关系的工具:Tach
在tach.yml中,可以定义模块的路径以及它们之间的依赖关系。modules:- core- core- utilscore模块不依赖任何其他模块。utils模块依赖core模块。api模块依赖core和utils模块。Tach 允许定义模块的公共接口,限制其他模块只能导入明确暴露的成员。modules:interface:在这个例子中,其他模块只能从core模块导入和,其他成员将被视为私有。原创 2025-01-06 08:34:37 · 874 阅读 · 0 评论 -
新的Python库、项目管理工具——uv
uv 是一个革命性的 Python 工具,旨在简化并加速 Python 项目的依赖管理和开发流程。它结合了高性能、多功能性和易用性,是 Python 开发者值得尝试的新工具。如果你对现有的工具链感到不满,或者希望提升开发效率,uv 是一个绝佳的选择。原创 2025-01-05 10:21:10 · 3884 阅读 · 0 评论 -
2024年的Python:更快、更强大、更受欢迎
Python也被认为是“三大”编程语言之一,因为在过去的三十年中,企业逐渐依赖Python、Java和JavaScript,而不是其他语言。它几乎是任何任务的第二佳语言,同时也是几乎所有任务中最方便、最快捷的语言。2024年最重要的消息是,Python核心开发团队迈出了重要一步,克服了Python长期以来的一个缺点:全局解释器锁(Global Interpreter Lock,简称GIL)。在过去的十年中,Python在软件开发领域获得了广泛的应用,但2024年是其取得最大胜利的一年。原创 2025-01-02 11:23:58 · 566 阅读 · 0 评论 -
Python列表解析式是否支持 else
但是,如果想用条件表表达式对结果进行选择,是否可行?也就是说,在列表解析式中是否可以使用。是三元运算表达式,是一个单一的表达式,它恰好就在解析式内,不是条件表达式中的。但是,可以通过三元运算符实现条件表达式的功能。,如果按照下面的方法编写代码,就能够正常执行了。写代码的要务之一就是可读性,为此,也可以将。但是,这并不意味着不能在列表解析式中使用。那么,照此就可以理解,在上述列表解析式中,写到解析式的外面,将其放到一个函数里面。由以上分析可知,Python 的列表解析式。实际上并不是解析式的一部分,原创 2025-01-01 14:31:11 · 351 阅读 · 0 评论 -
Python 开发者必知必会的 JSON 数据
JSON,即:JavaScript Object Notation,中文意思是“JavaScript 对象表示法”。由此可知,JSON 来源于 JavaScript。然而,现在的 JSON 已经超出了原生范围,成为了一种与编程语言无关的、作为数据交换的标准对象。诚然,JSON 之所流行,应该归因于它得到了 JavaScript 语言的原生支持,这使得它在浏览器中拥有出色的解析性能。除此之外,JSON 简洁明了的语法让人类和计算机都能够毫不费力地读写 JSON 数据。" }原创 2024-12-31 09:11:42 · 696 阅读 · 0 评论 -
Python 程序的优化技术
在开发中使用可提升性能的第三方库,避免重复造轮子,比如 NumPy,是用 C 语言写的,在用它进行大量的数值计算时,比使用纯 Python 语言编写,运算速度更快。在内存或带宽受限的系统中,例如嵌入式系统或分布式应用中的日志记录,简短的错误消息可以减少开销。转换为内存映射文件之后,就可以如同该文件在内存中一样对其进行操作,特别是对较大的文件,如此即可提高对其进行存取操作的速度。在长时间运行的程序中,特别是用于处理大数据的程序,非常有必要将内存中不必要的数据释放掉。原创 2024-12-30 14:47:42 · 921 阅读 · 0 评论 -
合并 Python 中的字典
在Python语言中,合并字典对象的方法原创 2024-12-25 08:33:13 · 884 阅读 · 0 评论 -
用 Python 进行建模优化:Pyomo
Pyomo是一个开源的Python库,专为数学规划和优化问题提供一个灵活且强大的框架。它支持多种优化问题,包括线性规划、整数规划、非线性规划等。Pyomo的优势在于其将优化建模无缝集成到Python环境中,使得用户可以利用Python的强大功能和广泛的第三方库来处理复杂的优化任务。原创 2024-11-10 09:11:55 · 1638 阅读 · 0 评论 -
Python 3.13 的改进
Python 3.13 是一个充满新功能和改进的优秀版本,已经有大量文章详细介绍了发布说明。因此,本文不会讨论那些已经耳熟能详的内容,只就几个不鲜为人知的改进给予介绍。原创 2024-10-27 09:04:32 · 937 阅读 · 0 评论 -
Python 有指针吗?
当有人问 Python 是否有指针时,或许最好的答案是:它不像其他一些语言那样有显式的指针,但一切隐含地都是指针。所以当你需要时,你拥有指针的力量:你可以拥有多个数据结构,然后将变量赋值为你选择的一个,并在之后使用该变量。这样的定义非常有用,因为我们可以用指针来引用数据,根据我们所需要的任何逻辑,在代码的某处设置一个指针,用它指向某数据。但另一方面,Python 中的每个变量都是一个指针,因为 Python 中的变量是对象的引用名。经典的指针定义是:一种存储其他数据地址的变量,你可以通过它来操作那些数据。原创 2024-10-16 09:02:56 · 598 阅读 · 1 评论 -
用Python进行单元测试
Python编程语言,不仅仅在机器学习、数据分析等领域大放异彩,在web开发中等软件开发中,使用者也越来越多。在软件开发中,有一种被提倡的开发范式:测试驱动开发。在这种开发范式中,编写单元测试是必不可少的。如果不实施严格的测试驱动开发,编写单元测试程序也是必要的。对于单元测试而言,最基本的模块是pytest,在本文中会对这个模块给予简要介绍。此外,还有一个现在很流行的模块fizz buzz,本文也会向读者推荐。为什么要自动化测试并非所有人都理解自动化测试的必要性,有人甚至认为纯粹是个负担,他们认为原创 2021-04-02 10:30:17 · 4609 阅读 · 0 评论 -
深入理解循环和迭代
循环,特别是for循环,是Python中常见的语句,甚至于Guido van Rossum(Python创始人)在评论递归的时候说过在Python中“递归已死”,我想这句话的意思不是说在Python中不能用递归,而是说因为Python中的for循环语句足够强大,可以不考虑递归,而是用for循环实现原本用递归做的事情。本来,在《Python大学实用教程》和《跟老齐学Python:轻松入门》两本书中都对for循环语句做了很完整地介绍,并且在这两本书中也有关于可迭代等概念,但是,如何将两者融合起来理解,从而能够原创 2021-03-19 09:21:11 · 1357 阅读 · 0 评论 -
Python虚拟环境
导言本文是针对《Python大学实用教程》和《跟老齐学Python:轻松入门》两本书的基础内容之后的提升。通常,在不同的项目中,会用到不同的Python版本——如果有必要的话,也包括一些库的版本,并非总是最新的就是最适合的或者最好的。对此,解决之道就是创建虚拟环境。一个项目创建一个虚拟环境,在每个虚拟环境之中,就相当于一个“裸机”,里面所需要的东西任你根据当前的需要自由配置,并且不会影响到其他项目。特别是在诸如Linux系统上,有时候安装某些东西还需要root权限,此时虚拟环境的好处就更明显了。创原创 2021-03-10 10:46:25 · 938 阅读 · 0 评论 -
必须升级pip,为什么?!
在《Python大学实用教程》和《跟老齐学Python:轻松入门》两本书中,都介绍了如何安装第三方库的方法:pip install package-name在用pip安装第三方库或者模块的时候,如果检测到本地的pip版本过低,会提示升级。有的人觉得升级比较麻烦,就放弃了。本文就要重点讲一讲,为什么要必须升级pip。先说结论,如果该升级的时候不升级,结果是:可能会导致安装某些东西的时候失败;或者安装进程很慢,或者给你带来其他麻烦。所以,如果不升级,后果很严重。老版本的问题下面是在Docker.原创 2021-03-03 11:34:21 · 3231 阅读 · 0 评论 -
编程的黄金时代结束了吗?
注: 本文内容主要源自参考文献[1],但是,翻译的时候并未完全直译,做了表述上的适当润色和修改,但主要观点未变。文章中的观点,仅供读者参考,也并不代表老齐本人的观点。O’Reilly公司,对开发者而言,无人不知,它出版了很多非常棒的图书。此公司的创始人不久前语出惊人,他以自己对编程行业的未来发展之深思熟虑,做出了如下判断:“我认为您可以成为一名程序员并找到一份工作,但编程这个职业,像最近几十年这样的黄金时代已经过去了。编程,现在更像是读写,每个人都要会。”听起来很合逻辑,同时也让准备进入这个行业翻译 2021-02-23 14:43:52 · 248 阅读 · 0 评论 -
Python中`__name__`有什么用
注: 有的读者在学习《Python大学实用教程》第7章模块和包[2]^{[2]}[2]时,对变量__name__感到困惑,现补充解释。与本书更多的有关资料,请访问:http://www.itdiffer.com/python_course.html在Python程序中,你会经常看到__name__,例如:if __name__ == '__main__': main()本文将介绍如何正确使用和理解这个变量。请注意,__name__在程序中是一个变量,只不过这个变量的命名有点奇怪,用双原创 2021-02-18 09:45:57 · 683 阅读 · 0 评论 -
如何使用Python的filter函数
介绍Python内置的filter()函数能够从可迭代对象(如字典、列表)中筛选某些元素,并生成一个新的迭代器。可迭代对象是一个可以被“遍历”的Python对象,也就是说,它将按顺序返回各元素,这样我们就可以在for循环中使用它。filter()函数的基本语法是:filter(function, iterable)返回一个可迭代的filter对象,可以使用list()函数将其转化为列表,这个列表包含过滤器对象中返回的所有的项。filter()函数所提供的过滤方法,通常比用列表解析更有效,特别是当原创 2020-10-19 13:38:56 · 20412 阅读 · 1 评论 -
如何实现四元数的运算
如何实现四元数的运算在前面的一篇文章《Python中的5对必知的魔法方法》中所介绍的“魔法方法”,或者说是特殊方法,其命名均是双下划线开始和结束。英文中称为“dunder methods”。为了更充分理解这类方法,本文通过一个示例,专门介绍此类方法的特点。构建四元数对象四元数是一个代数概念,通常用于描述旋转,特别是在3D建模和游戏中有广泛的应用。Q=w+xi^+yj^+zk^Q = w + x\hat i + y\hat j + z\hat kQ=w+xi^+yj^+zk^其中 w,x,y,z∈原创 2020-10-12 16:31:18 · 915 阅读 · 0 评论 -
【译】Python中5对必知的魔法方法
引言在Python中,我们可以使用下划线、字母和数字来命名函数。单词之间的下划线并没有太大的意义——它们只是通过在单词之间创建空格来提高可读性。这就是众所周知的s蛇形命名风格。例如,calculate_mean_score比calculatemeanscore更容易阅读。你可能知道,除了这种使用下划线的常见方式,我们还在函数名之前加上一个或两个下划线(例如:_func,__func) 来表示类或模块内的私有化函数,那些没有以下划线为前缀的名称被认为是公共 API。下划线在方法命名中的另一用途就是定义“魔翻译 2020-09-15 08:31:26 · 182 阅读 · 0 评论 -
数据科学的软件工程技巧和最佳实践
如果你对数据科学感兴趣,你可能对这个工作流程很熟悉:用jupyter创建一个项目,然后开始编写python代码,运行复杂的分析,训练一个模型。当notebook文件随着函数、类、绘图和日志的增加而增大时,你会发现自己面前有一个庞大的代码块。如果幸运的话,项目有可能进展顺利,这再好不过了!然而,jupyter中隐藏了一些深坑,不小心掉进去,就如同进入地狱。下面先看看这些坑是什么样的,然后探讨如何避免。隐藏的问题下面这些情况,不知道你是否遇到过:在某个地方定义了一类,然后实例化。后来又想修改它了,于原创 2020-09-11 09:57:33 · 344 阅读 · 0 评论 -
用Python读写文件的方法
在文中,我们将研习如何用Python读取文件,然后,向文件写入内容并再次保存它。使用Python读写某种特别类型的文件,例如:JSON、CSV、Excel等,一般会有专门的模块。但是,在这里,我们将用Python打开文本文件(.txt)。若使用Python的open函数,它将返回一个文件对象,此对象将包含一些方法和属性。我们可以使用这些方法和属性获得已打开文件的相关信息,并且,可以使用这些方法来更改所打开的文件。用 open()读取文件在本节中,我们将学习如何使用open()函数在Python中加载文原创 2020-09-04 18:54:49 · 15103 阅读 · 0 评论 -
【译】初学者指南:利用SVD创建推荐系统
作者:Mayukh Bhattacharyya翻译:老齐序言你是否有过这样的经历:前一天晚上登录Netflix,观看了《星际穿越》,他们会建议你看《地心引力》。或者你在亚马逊上购买了东西,看到了网站推荐给你可能感兴趣的产品。你是否想知道在线广告代理商是如何根据我们的浏览习惯向我们推送广告的?这一切都归结为一种被称为推荐系统的东西,它根据我们与产品互动的历史,预测我们可能对哪些产品感兴趣。本文中,我们将建立一个很酷的推荐系统。我们将使用SVD(Sigular Vector Decomposition翻译 2020-08-26 10:39:57 · 385 阅读 · 0 评论 -
将Python中的字典数据转化为DataFrame的方法
编译:老齐与本文相关的图书推荐:《数据准备和特征工程》在数据科学项目中,通常用Pandas的read_csv或者read_excel从相应文件中读入数据,此外,对于数据量不大的时候,可能还有下面的情形出现:import pandas as pddata = {‘key1’: values, ‘key2’:values, ‘key3’:values, …, ‘keyN’:values}df = pd.DataFrame(data)这里是将一个Python中的字典data转化为了Pandas原创 2020-08-17 11:19:18 · 16987 阅读 · 0 评论 -
根据条件增加DataFrame的列
编译:老齐与本文有关的图书推荐:《跟老齐学Python:数据分析》当我们使用Python进行数据分析时,有时可能需要向DataFrame添加列,所添加的列要基于DataFrame的其他列的值。虽然这听起来很简单,但是,不少初学想到的是用if-else条件语句来实现,这就把问题搞复杂了。有一个简单又有效的方法,下面就来看看这种方法如何使用。加载一个数据集。import pandas as pdimport numpy as npdf = pd.read_csv('dataquest_twee原创 2020-08-14 17:07:28 · 7241 阅读 · 1 评论 -
Python中的命名空间和作用域(1)
编译:老齐相关图书推荐:《Python大学实用教程》这是一本针对零基础的初学者学习Python的书,强调开发实战,在学习中体会了解真实的开发需要。本文将介绍Python命名空间和作用域,它们用于分配Python程序中的对象。Python语言是一种能够实现面向对象编程的高级语言,或者说,在Python中,“万物皆对象”。例如,x = 'foo'中的x是一个变量,它应用了字符串对象'foo'。在一个复杂的程序中,会创建成百上千个这样的变量名称或者函数名称、类名称等,每个名称都指向特定的对象。Pyt原创 2020-08-10 09:14:55 · 210 阅读 · 0 评论 -
range函数小应用
作者:老齐与本书相关的图书推荐:《Python大学实用教程》本书是面向零基础学习者的Python入门读物,包含完整的Python语法知识、针对性的练习题,本书强调学习中的实战,案例和习题均从开发实践的角度进行设计。在Python语言中,有很多方式能够生成序列类对象。range函数就是这样一个,现在用的都是Python3了,但是,这个函数从Python2开始就已经有了,显然它是多么被重视吧。r = range(5000)上面的代码是在Python3中调试的,如果你这样做,会返回一个range类原创 2020-07-21 14:14:44 · 260 阅读 · 0 评论 -
EOF是不是字符
编译:老齐与本文相关的图书推荐:《Python大学实用教程》本书是面向零基础学习者的Python入门读物,包含完整的Python语法知识、针对性的练习题,本书强调学习中的实战,案例和习题均从开发实践的角度进行设计。什么是 EOF?百度百科上这样解释:EOF是一个计算机术语,为End Of File的缩写,在操作系统中表示资料源无更多的资料可读取。资料源通常称为档案或串流。通常在文本的最后存在此字符表示资料结束。在这个解释中,认为EOF是表示文件结束的字符——这就是本文要重点讨论的,EOF是不是翻译 2020-07-20 15:20:13 · 1609 阅读 · 0 评论 -
比较NaN和数字
作者:老齐与本文相关的图书推荐:《数据准备和特征工程》本书适合即将或者已经从事数据科学、机器学习、人工智能等方向工作的朋友。书中详细梳理了各种获取数据、数据清洗、特征工程等方向的技术和方法。先看下面的代码,有何感悟?>>> import numpy as np>>> min(2, np.nan)2>>> min(np.nan, 2)nan是不是有点意思?怎么解释?首先要理解Python中的min函数,根据它的官方文档,有这样一原创 2020-07-15 10:35:24 · 2046 阅读 · 0 评论 -
python的collections.Counter()计数器
python模块collections提供了内置容器类型dict,list,set,tuple更专业的容器数据类型。原创 2014-06-20 22:20:55 · 1398 阅读 · 0 评论 -
Python高效编程技巧
我已经使用Python编程有多年了,即使今天我仍然惊奇于这种语言所能让代码表现出的整洁和对DRY编程原则的适用。这些年来的经历让我学到了很多的小技巧和知识,大多数是通过阅读很流行的开源软件,如Django, Flask,Requests中获得的。下面我挑选出的这几个技巧常常会被人们忽略,但它们在日常编程中能真正的给我们带来不少帮助。1. 字典推导(Dictionary compre转载 2014-06-21 20:28:08 · 192 阅读 · 0 评论 -
最短路径问题的Dijkstra算法
问题最短路径问题的Dijkstra算法是由荷兰计算机科学家艾兹赫尔·戴克斯特拉提出。迪科斯彻算法使用了广度优先搜索解决非负权有向图的单源最短路径问题,算法最终得到一个最短路径树> 。该算法常用于路由算法或者作为其他图算法的一个子模块。 这个算法的python实现途径很多,网上能够发现不少。这里推荐一个我在网上看到的,本来打算自己写,看了这个,决定自己不写了,因为他的已经太原创 2014-06-21 08:18:46 · 469 阅读 · 0 评论 -
[零基础学python]初识永远强大的函数
函数,对于人类来讲,能够发展到这个数学思维层次,是一个飞跃。可以说,它的提出,直接加快了现代科技和社会的发展,不论是现代的任何科技门类,乃至于经济学、政治学、社会学等,都已经普遍使用函数。下面一段来自维基百科(在本教程中,大量的定义来自维基百科,因为它真的很百科):函数词条[函数这个数学名词是莱布尼兹在1694年开始使用的,以描述曲线的一个相关量,如曲线的斜率或者曲线上的某一点。莱原创 2014-07-15 15:43:01 · 331 阅读 · 0 评论 -
用递归方式遍历二叉树
问题用递归方式遍历二叉树思路说明遍历二叉树的方法有广度优先和深度优先两类,下面阐述的是深度优先。以下图的二叉树为例:先定义三个符号标记:访问结点本身(N)遍历该结点的左子树(L)遍历该结点的右子树(R)有四种方式:前序遍历(PreorderTraversal,NLR):先访问根结点,然后遍历其左右子树中序遍历(InorderT原创 2014-07-13 22:28:45 · 517 阅读 · 0 评论