编写优雅Python代码的16个原则

从零开始学 Python:手把手教你写出优雅的代码 本文介绍了如何编写优雅、高效的Python代码。从Python的设计哲学(PEP 20)入手,强调简洁性、可读性和显式表达的重要性。文章系统讲解了Python基础语法(变量、控制结构、函数)和高级特性(列表/字典解析、生成器、上下文管理器),并提供了具体代码示例。同时阐述了模块化、DRY原则等编程规范,以及调试和测试方法。最后指出,编写优雅Python代码是一个持续优化的过程,需要平衡简洁性、可读性和可维护性。适合Python初学者和想要提升代码质量的开发者阅读。 阅读详情

假如你刚参与了一个算法项目,当你第一次打开这个项目时,发现里面已经有上万行与算法相关的代码,仔细查看过后,发现如下一些让你抓狂的问题:

1 、代码写的非常冗余,维护已经变得越来越困难。

2 、几乎没有任何注释。

3 、非常错乱的代码风格,让你有一种感觉打开了一个杂乱的网站的 html 页面。

4 、存在那么几个函数,单个函数的源码超过 500 行。

5 、每一次需求的变更,都意味着一次痛苦的代码编写。

这是 笔者 以前参与一个算法项目时遇到的问题。

在参与这个项目时,大家都在很努力的使项目往期望的方向走,但随着开发进度的往前推进,项目的复杂性正在不断加大,大家都在尽可能使用自己了解的最好的技术将系统打造的更为强壮,但系统但复杂性一点也没有降低。在需求但不断变化中,代码的冗余也越来越明显。程序中到处充斥着废弃的代码,但谁也不敢轻易去删除,谁也不清楚自己的一个不经意操作,是否会导致整个程序的奔溃。

对于代码的开发,里面包含了很多细枝末节的东西,特别对于需要高度配合的项目(如算法人员和工程人员之间),细节的处理是否妥当,将很大程度影响项目是否可以成功交付,跨行之间的配合与细节的处理是大部分开发者所欠缺的,这类人才也是市场上急需的。

python 的设计宗旨是简单、优雅、明确。

但很多开发人员通过自己的努力将其做成了复杂、丑陋、晦涩。

结合 Python 之禅与自己的开发经验,给出如下一些观点与建议,希望可以为你带来一些帮助:

0 1

优美胜于丑陋

代码除了完成指定功能,同时也是给人看的。优美的代码和优美的风景一样,都能让人感到赏心悦目,优美的代码是一种艺术,相对于丑陋的代码,大家都会倾向于查阅优美的代码。

在工作过程中,尽可能往编写优美代码的方向走。

0 2

明了胜于晦涩

在代码编写中使用明了的词语来命名方法名、函数名或变量名是非常好的习惯。命名很好的代码,可以省略很多代码注释的工作,优秀的代码会说话。

编写优秀的代码,代码本身就是注释。

最好的代码是不需要注释就可以让大部分人都可以看懂,这需要编写者有很强的编码功底和语言抽象功能,很多时候并不要求所有开发这都有这种能力,但也需要在少量的代码注释情形下可以让代码阅读者可以快速看明白你写的代码。

如果可能,尽量减少晦涩代码的出现,大部分情形下,晦涩代码的出现都是因为开发者对需求了解不清楚或没有用更简单的方式思考,对于代码的负责人,若看到出现类似代码,应当小心谨慎,需要了解对应的需求是否确实会如代码那么晦涩,还是开发人员想复杂了。

0 3

简单胜于复杂

把简单的事情做复杂并不难,但要把复杂的变得简单,那需要付出巨大的艰辛。

在工程应用中,把简单的需求做得复杂的案例数不胜数;而能通过抽丝剥茧的方式把复杂应用场景拆分的很简单的案例少之又少,当今市场极为缺乏有这种能力的人才。

复杂的来源也是有很多当时以为简单的事情堆积而成的,在多种简单的组合过程中,继续保持整体的简单,是一件值得思考的事情,这要求在对整体了解的情况下对各个细节的把控,编程本来就是一门对细节要求极高的技术,当对细节的掌控了然于胸时,编写出简单的代码就水到渠成了。

0 4

复杂胜于凌乱

我们排斥复杂,但有时复杂难以避免。可以复杂,但不要凌乱。有迹可循的复杂代码还是具有可读性的,至少可以从代码层面找到处理逻辑。

当代码以凌乱的方式出现时,那是会让人非常崩溃的。犹如你与人交谈时,若与你谈话的人一直东一句,西一句,让你根本不清楚对方在讲什么,估计你与对方聊上几分钟就不想聊了,并期望不想再遇到类似的聊天对象。编程也一样,对于那些凌乱的代码,大家都是避之不恐。

0 5

扁平胜于嵌套

在编写代码时,每增加一个嵌套,则意味着代码的复杂度增加了一些,代码的执行效率对应的下降了一些。

当出现三层以上的嵌套时,那说明代码编写思路出现了偏差,对于这种代码,应该会非常浪费系统的资源,甚至全部耗尽。实际应用中应当避免,并寻求其它更简单的实现方式。

能用扁平的方式实现时,就不要使用嵌套实现。

0 6

间隔胜于紧凑

若是面向计算机编程,代码间隔紧凑与否是没有任何关系的。但若需要不断被开发人员查看,适当的间隔那就非常有必要了,组织良好的代码不仅仅是逻辑清晰,在代码结构上也是非常有讲究的,很多时候都会遵循 PEP8 的规范,那样写出来的代码是让人赏心悦目的。

另一方面,这也能帮助你编写出更加高效的代码,因为通过合理的控制代码结构,当程序发生问题时,组织良好的代码结构可以帮助你更快的找到问题。

0 7

可读性很重要

很多时候,我们编写的代码除了让计算机执行指定的程序,另一个很重要的点就是给其他人查看。而代码的可读性决定了会有多少人愿意读你的代码。

现在很流行的一个词叫开源代码,对于开源代码,可读性在很大程度上决定了有多人愿意参与到这个开源中。

而对于项目应用中,编写一份可读性非常高的代码是非常必要的,尽管很多时候是以功能优先。提高代码的可读性,不仅仅是一个自我的修炼过程,对于团队、甚至公司,都可以更好的减少开发、维护和学习成本的。

0 8

特例不足以特殊到违背这些原则

在代码编写过程中,不可避免会需要对某些特例提供支持,甚至有时为了可以支持特例,需要违背一些已有的好的原则。

当有需要类似的操作时,需要做更为全局的平衡,这个特例是否必须,是否有其它可处理方式,怎么最小化特例给其它原则带来的破坏。

0 9

实用性胜过纯粹

编写代码的首要原则是可用,在可用的基础上才有可能执行其它如性能优化、效率提升等操作。

实用性与纯粹性不同,纯粹性更多体现在实验或验证性操作上,很少参与到真实环境中的应用,而我们需要的是可以在真实环境中可用的代码。

0 10

永远不要默默地忽视错误

当程序出现错误时,那已经在提示我们程序中的某处代码并没有如我们想象的那么完美,它编写有 Bug 或是有隐藏 Bug ,需要我们进行正确的处理,若置之不理,很有可能埋下一颗定时炸弹,在某一刻让你的程序直接崩溃,这种的代价往往都会不小。

在实际的应用中,即时是很小的问题,也不要选择忽视,建立起必要的异常管理,而不要等到问题发生时才进行亡羊补牢的操作,殊不知可能会为时已晚。

0 11

面对模棱两可,拒绝猜测

计算机的世界是 0 或 1 的世界,是即是,非即非,没有不确定性的存在,也没有任何的猜测。

对于编写的任何代码,都应该是清晰的,没有歧义的,若出现有歧义或不清晰的情形,那表明开发者对需要通过代码实现的问题理解不到位,或是有猜测的成分,这种都是需要杜绝的。

0 12

解决问题最直接的方法应该有一种,最好只有一种

在编程的世界里,任何问题的解决办法都有多种,但更多的时候我们需要的是最直接的方法,并最好只有一种最直接的方法。

如对编程语言的选择,对于科学计算和人工智能相关的事情,最直接的选择就是使用 Python ,这个对于目前来说是最直接的唯一选择。

0 13

做也许好过不做,但不想就做,还不如不做

对于编程的过程,是一种知行合一的过程,光靠执行很多时候并不能得到期望的结果,还需要伴随思考的过程。越是大的项目,前期思考的时间占比就越多。在动手之前先做一些计划,对全盘先有一个大致了解,把可能遇到的问题,会存在的瓶颈,会占用时间比较多的步骤,需要协助的资源等先做一个前期的规划,会非常有利于后期的执行的。

若期望一开始就撸起袖子直接干,那不是一个很建议的方法,除非你对需要做的事情已经非常熟悉,否则还是有必要认认真真想一想需要做什么。

0 14

如果方案难以描述明白,那么一定是个糟糕的方案

对于编程来说,编写的应该是一个确定的事情,并且已经有可以描述明白的方案。

对于不清晰的方案,编程上更不可能清晰。

一个糟糕的方案只会诞生一个糟糕的项目,项目里面则包含各种晦涩的代码。

0 15

如果实现容易描述,那可能是个好方案

若一个实现可以通过类似伪代码的方式描述出来,这基本上是一个可行的方案,若可以通过伪代码容易的描述,那很有可能是个好方案,真实的应用上还有很多其它的外界因素,只有结合那些因素,才能完全的确定这是否是一个好的方案。

0 16

命名空间是一种绝妙的理念,多加利用

在编码的过程中,命名的冲突是一个非常需要小心的问题,这种问题一般不容易发现,出现问题时的查找并不容易,所以需要充分借助命名空间的理念,尽量避免如命名冲突的问题。

通过命名空间控制变量的作用域,可以起到很好的变量的相互隔离的效果。

结语:

编码是一件快乐的事情,特别当看到一些貌似不太可行的事情,通过编程的方式变为可行时,会感到一种发自内心深处的快乐。并且当一群人通过群策之力,完成一件艰巨的任务时,创造出一些 amazing 的事情时,那是一种不可言喻的喜悦。

而编写出如艺术般的代码需要付出很多,也需要经过时间的锤炼,但当它出现在大家眼前时,是需要一种心境的追求才可以企及,任何人都可以往这个方向追求,它没有任何标准,没有任何约束,有的只是你的不断创造,在计算机编程这块沃土上,还有一个超大的空间等待更多的人去开拓。

VL53L0X加盖玻片后精度暴跌?手把手教你完成串扰校准(CrossTalk Calibration) 本文详细解析了VL53L0X激光测距传感器加盖玻片后精度下降的原因,并提供了串扰校准(CrossTalk Calibration)的完整解决方案。通过分步指导和实用代码示例,帮助工程师恢复毫米级测距精度,适用于智能门锁、扫地机器人等应用场景。 阅读详情

相关推荐

Quartus (Quartus Prime 18.1)的安装及仿真步骤

前两天做计组的课设需要用到Quartus 这个软件,但安装有点麻烦,在网上搜了很多教程,发现都是旧版本的,最后弄了好半天才把环境搭建好。所以,分享一下它的搭建过程。 因为我不经常用它,所以安装的版本是精简版的其他版本的也应该差不多以下是需要下载的安装包: 准备: Quartus Prime 精简版,最新发布: v18.1 1. QuartusLiteSetup-18.1.0.625-wi...

weixin_41082948的博客 8万+

Python之禅:编写优雅Python代码的16个原则

假如你刚参与了一个算法项目,当你第一次打开这个项目时,发现里面已经有上万行与算法相关的代码,仔细查看过后,发现如下一些让你抓狂的问题:1、代码写的非常冗余,维护已经变得越来越困难。2、几乎...

华章IT官方博客 507

AD2428与SigmaStudio:从节点自动配置与EEPROM存储实战

本文详细介绍了AD2428 A2B收发器与SigmaStudio开发环境的集成应用,重点讲解从节点自动配置与EEPROM存储的实战流程。通过硬件连接、属性配置、数据导出及嵌入式系统集成等步骤,实现设备上电自启动,提升汽车音频系统的可靠性与部署效率。

g8f9d0s1a2的博客 650

Python代码规范!详细说明!

综上,是一些常用的代码风格规范说明。

千天夜的博客 3726

从Transformer到蛋白质结构预测:手把手解读ESM系列模型的核心原理与实战价值

本文深入解析了ESM系列模型如何将Transformer架构创新应用于蛋白质结构预测,揭示了其从氨基酸序列到三维结构的高效预测机制。通过掩码语言模型预训练和注意力机制,ESM模型不仅捕捉蛋白质序列的远程相互作用,还在蛋白质工程改造、药物发现等领域展现出巨大实战价值,显著提升了结构预测速度和精度。

weixin_28744423的博客 318

三极管共集电极放大电路详解:射极跟随器的原理、计算与应用

三极管放大电路是模拟电子技术的基石,常见组态包括共发射极、共基极和共集电极。其中共集电极电路因输入电阻大、输出电阻小、电压增益接近1的特性,常被用作射极跟随器,在信号缓冲、级间隔离和低阻抗负载驱动等场景中发挥关键作用。其核心价值并非电压放大,而是完成阻抗变换,将高内阻信号源转换为低内阻输出,同时保持信号幅值基本不变。理解其静态工作点计算与动态参数推导(如电压增益、输入输出电阻)是设计实用电路的前提。本文结合12V电源下的具体设计实例和仿真验证,梳理了从电路识别、参数计算到工程实践的完整流程,并指出常见设计误

weixin_29193259的博客 367

python 视角下的 6 大程序设计原则

近万字解析6大程序设计原则,python 面向对象程序设计进阶。(附代码)

frank_haha的博客 1235

MIMO技术入门

MIMO:多天线技术,发射端和接收端有多个天线(注意:并不是指多个天线板,而是多套振子,每一套是一个独立的天线。) 4G:2、8天线 5G:4、64天线(64T64R) 手机也是多天线 MIMO实现效果的分类: 1)空间分集 。2)空间复用。3)波束赋形。 空间分集(space diversity) 作用:提升接收质量 利用多个天线发射或者接收一个数据流,避免单个信道衰落对整个链路的影响。(比如你的耳机坏了一只并不影响另一只) 空间复用(space multiplexing) 作用:提升速率 利

About1129的博客 2873

Python的七大原则以及24种设计模式

七大原则 1.单一职责原则【SINGLE RESPONSIBILITY PRINCIPLE】:一个类负责一项职责 2. 里氏替换原则:继承与派生的规则(子类可替换父类) 3. 依赖倒转原则:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。即针对接口编程,不要针对实现编程。 4. 接口隔离原则:建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽...

weixin_45591261的博客 747

【OCPP】ocpp1.6协议3.3章节:功能配置文件及接口

Smart Charging Profile中定义了4个接口请求,即GetCompositeSchedule、ClearChargingProfile、SetChargingProfile和ClearCache等。Smart Charging: 包含智能充电相关的功能,如计划充电,报告充电计划,并改变充电速度。Core: 包含电动汽车充电相关的基础功能,如启动和停止充电,更改充电配置,报告充电状态等。Reservation: 包含预约服务相关的功能,如创建,取消和更改预约。

qq_53871375的博客 2170

如何通过 Python 爬虫抓取并分析政府开放数据

通过本文的介绍,我们展示了如何使用Python 爬虫抓取并分析政府开放数据。通过requests获取政府开放数据的 API 接口数据。使用和pandas进行数据清洗与存储。使用matplotlib对数据进行可视化。你可以根据不同的政府开放平台和数据集进行调整,应用于不同领域的数据分析,如公共健康、交通、环保等。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1076

Python代码规范

转自:微点阅读 https://www.weidianyuedu.comPython 学习之旅,先来看看 Python 的代码规范,让自己先有个意识,而且在往后的学习中慢慢养成习惯Python代码规范如无特殊情况, 文件一律使用 UTF-8 编码如无特殊情况, 文件头部必须加入标识统一使用 4 个空格进行缩进每行代码尽量不超过 80 个字符(在特殊情况下可以略微超过 80 ,但最长不得超过 120)理由:这在查看 side-by-side 的 diff 时很有帮助方便在控制台下查看代码太长可能是设计有缺陷

xiaoweids的博客 4536

开源免费!ReaLTaiizor如何用MIT许可证打造专业级WinForm UI?

摘要: ReaLTaiizor是一款开源UI控件库,为WinForm应用提供现代化界面解决方案。支持100+组件、多主题切换(浅色/深色/自定义)和.NET 4.8-8.0全版本兼容,MIT许可证允许免费商用。通过NuGet快速安装,3步改造传统界面:1)注入主题(如this.Theme = new Dark()),2)替换原生控件为高颜值组件(如ModernGrid替代DataGridView),3)集成高级功能(分页/动画提示)。典型场景包括登录界面美化(进度动画+通知控件)和数据表格Material风

墨夶的博客 1520

Python之禅:编写优雅 Python 代码的 16 个原则

微信搜索逆锋起笔关注后回复编程pdf领取编程大佬们所推荐的 23 种编程资料!作者:刘宇宙,《Python进阶编程:编写更高效 优雅的Python代码》一书作者。假如你刚参与了一个算法项目...

code小生 521

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

编写优雅Python代码的20个最佳实践

想要让你的代码像艺术品一样既实用又赏心悦目吗?

weixin_53707653的博客 1815

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Python实战:变量命名规范:编写优雅代码的关键

在Python编程中,变量命名规范对于编写优雅和可维护的代码至关重要。本文将深入探讨Python中的变量命名规则和最佳实践,包括命名约定、避免命名冲突以及命名中的注意事项。我们将通过具体的代码示例来展示如何遵循命名规范来编写优雅的代码,并理解命名规范在编程中的重要性。

oandy0的博客 8722

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【备注】【C42】《编写高质量代码:改善Python程序的91个建议》PDF

内容简介: 在通往“Python技术殿堂”的路上,本书将为你编写健壮、优雅、高质量的Python代码提供切实帮助!内容全部由Python编码的实践组成,从基本原则、惯用法、语法、库、设计模式、内部机制、开发工具和性能优化8个方面深入探讨了编写高质量Python代码的技巧与禁忌,一共总结出91条宝贵的建议。每条建议对应Python程序员可能会遇到的一个问题。本书不仅以建议的方式从正反两方面给出了被

tianshilirenwei的博客 448

⭐️Python之禅——《跟老吕学Python》

学Python一开始都是困难的,而你又不是Python之父(这里的Dutch是指Python之父),坚持学习才能够学好Python。一个程序让两个不同的人去编写,方案大致是一致的,并非没有创意空间,恰恰相反,大部分的工作使用常见的简单的方案解决。“学而不思则罔”,学习需要思考,每次写一个程序一起以前需要经过一定的考虑,才开始写,会减少很多不必要的错误。Python编程是简单而且直接的,如果你要编写的整个程序的思路清晰合理,那么你将会把这个方案做的很好。中的指导原则对于我们是很重要的,能给予我们很大的帮助。

Python老吕的博客 1301

编写高质量代码 改善Python程序的91个建议

编写高质量代码 改善Python程序的91个建议第1章 引论建议1:理解Pythonic概念建议2:编写Pythonic代码建议3:理解Python与C语言的不同之处建议4:在代码中适当添加注释建议5:通过适当添加空行使代码布局更为优雅、合理建议6:编写函数的4个原则建议7:将常量集中到一个文件第2章 编程惯用法建议8:利用assert语句来发现问题建议9:数据交换值的时候不推荐使用中间变量建议10

赵亮的博客专栏(theforever,碧海情天) 3721

写出优雅又高效的Python代码,必须掌握的4层嵌套列表推导式设计模式

掌握Python列表推导式嵌套多层循环技巧,提升代码简洁性与执行效率。适用于数据处理、矩阵操作等复杂场景,通过4层嵌套设计模式实现高效逻辑表达。结构清晰、性能优越,值得收藏。

LogicGap的博客 1028

《编写高质量代码 改善python程序的91个建议》读书笔记 之一

一周多时间的投标,谈判,订货,供货,顺利完成,终于又可以坐下来看书学习了。 1、代码风格 形成自己的代码风格: 变量的命名:小写 + 下划线 类的命名:大写开头 + 下划线 善于利用变量拆包进行复制,例如:a, b = b, a 对可迭代对象的遍历 for … in … 对文件的访问 with … open( ) 形成自己风格的format格式: %s s.format是python最为推荐...

steventian72的博客 1091

编写Python高质量代码,资深程序员的 91 个建议

本文内容全部由 Python 编码的最佳实践组成,从基本原则、惯用法、语法、库、设计模式、内部机制、开发工具和性能优化 8 个方面深入探讨了编写高质量Python代码的技巧与禁忌,一共总结出 91 条宝贵的建议。每条建议对应Python程序员可能会遇到的一个问题。很多人学习python,不知道从何学起。 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。 很多已经做案例的人,却不知道如何去学习更加高深的知识。 那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子...

Python学习Q群696455390 288

Pythonic编程之道:用优雅的代码解决复杂问题

本文深入探讨Pythonic编程思想,通过对比传统写法与Pythonic写法展示其核心原则与实践。内容涵盖列表推导式、生成器表达式、函数式编程、上下文管理器和装饰器等特性,强调代码简洁性、可读性和高效性。同时指出常见误区如过度使用列表推导式、忽视可维护性和性能优化。最后提出延伸思考,探讨如何在项目中平衡简洁性与可维护性,以及Pythonic编程对团队协作的影响,帮助开发者掌握优雅高效的Python编码艺术。

软件科学-郝学胜 1302

编写高质量Python程序的91个建议(转)

建议1:理解Pythonic概念 Pythonic可以定义为:充分体现Python自身特色的代码风格。 推荐阅读:PEP 8 – Style Guide for Python Code 建议2:编写Pythonic代码 避免只用大小写来区分不同的对象。 避免使用容易引起混淆的名称如字母’O’的大小写和字母’L’的小写‘l’。 不要害怕过长的变量名,变量名易于理解最重要。 建议3:理解Pytho...

weixin_33690367的博客 280
上一篇: Python 中的图形绘制(二)
下一篇: Python OCR工具pytesseract详解
Python_xiaowu
博客等级 码龄5年 3096粉丝 178原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值