写Python需要养成的9个编程好习惯

news2025/1/12 15:55:14

以写Python代码为例,有以下9个编程好习惯。

1. 提前设计

写代码和写作文一样,需要有大纲,不然很容易变成"屎山"。

思考业务逻辑和代码流程,是动手前的准备工作,这上面可以花一半以上时间。

一些程序员洋洋洒洒写了几万行,删删改改,bug很多,误以为自己很忙。这都是思考不足的结果,导致时效很低。

提前设计也有方法可循。

比如通过draw.io、xwind等工具画流程图,想好每个模块实现什么功能,然后写伪代码提炼核心逻辑,把每一个测试节点安排好。

2. 代码注释

代码注释相当于产品说明书,太重要了。

代码注释既是给自己看的,更是给别人看的。因为代码需要维护。

如果你的继任者没法理解你写的东西,那大概率是代码写的太烂了,或者注释写的太烂了。

写代码注释需要注意以下几点原则:

  • 帮助别人理解你写代码的意图,而不是重复这段代码干了什么

  • 文字表述要简洁清晰,如非必要,勿增实体

  • 对实现代码块进行注释,而不是单行代码

  • 对各种主要的数据结构、输出的函数、多个函数公用的变量进行详细地注释

Python代码注释规范:

Python使用文档字符串来注释,用三重双引号"“” “”"

文档字符串是包, 模块, 类或函数里的第一个语句. 这些字符串可以通过对象的__doc__成员被自动提取, 并且被pydoc所用

当然如果你足够优秀,也可以让代码自己解释自己。

代码的注释不是越详细越好。实际上好的代码本身就是注释,我们要尽量规范和美化自己的代码来减少不必要的注释。若编程语言足够有表达力,就不需要注释,尽量通过代码来阐述。

3. 规范命名

命名是程序员最头疼的一件事,很多代码就是命名不规范导致阅读性极差。

之前有过一个调查问卷,评选“程序员最头疼的事情”,命名问题赫然名列第一,占比达到49%

变量名、函数名、类名等名称需要遵循”所见即所得“的原则,就是名称要能代表该变量、函数、类的含义,让人一目了然。

要想代码足够有表达力,良好且一致性的命名规范是必不可少的。

Python命名规范需要注意以下几点:

  • 模块命名

(1)模块推荐使用小写命名,

(2)除非有很多字母,尽量不要用下划线

因为很多模块文件存与模块名称一致的类,模块采用小写,类采用首字母大写,这样就能区分开模块和类。

  • 类命名

(1)类名使用驼峰(CamelCase)命名风格,首字母大写;

(2)私有类可用一个下划线开头。

  • 函数命名

(1)函数名一律小写,如有多个单词,用下划线隔开

(2)类内部函数命名,用单下划线(_)开头(该函数可被继承访问)

  • 变量命令

(1)变量名推荐小写,如有多个单词,用下划线隔开

(2)类内部变量命名,用单下划线(_)开头(该变量可被继承访问)

(3)类内私有变量命名,用双下划线(__)开头(该变量不可被继承访问)

  • 常量

常量名所有字母大写,由下划线连接各个单词如MAX_OVERFLOW,TOTAL

  • 文件名

全小写,可使用下划线

4. 保持代码美观

Python强制缩进,所以代码整洁度上有保障,但我们也要注意细节。

《代码整洁之道》里面说,整洁的代码是只做好一件事,这里尤其指函数。

Python之禅可以很好地解释什么是美观地代码。

优美胜于丑陋(Python 以编写优美的代码为目标)
明了胜于晦涩(优美的代码应当是明了的,命名规范,风格相似)
简洁胜于复杂(优美的代码应当是简洁的,不要有复杂的内部实现)
复杂胜于凌乱(如果复杂不可避免,那代码间也不能有难懂的关系,要保持接口简洁)
扁平胜于嵌套(优美的代码应当是扁平的,不能有太多的嵌套)
间隔胜于紧凑(优美的代码有适当的间隔,不要奢望一行代码解决问题)
可读性很重要(优美的代码是可读的) 即便假借特例的实用性之名,也不可违背这些规则(这些规则至高无上)
不要包容所有错误,除非你确定需要这样做(精准地捕获异常,不写 except:pass 风格的代码)
当存在多种可能,不要尝试去猜测 而是尽量找一种,最好是唯一一种明显的解决方案(如果不确定,就用穷举法) 虽然这并不容易,因为你不是 Python 之父(这里的 Dutch 是指 Guido )
做也许好过不做,但不假思索就动手还不如不做(动手之前要细思量)
如果你无法向人描述你的方案,那肯定不是一个好方案;反之亦然(方案测评标准) 命名空间是一种绝妙的理念,我们应当多加利用(倡导与号召)

5. 完善的README

如果你使用过github,一定对README不陌生,它相当于一份项目说明书,帮助你理解该项目。

README作用主要有告诉人们为什么应该使用你的项目,以及如何安装和使用,一份标准化的README可以简化它的创建和维护,所以README值得你花时间去创建。

写好 README 之后,随着项目的演进及时更新它,不会花太多时间,但能让你随时都对项目有个整体的把握。绝对值得一试。

6. 模块化

模块化就是将繁杂冗长的代码按照一定的规则规范分成多个块(可以是面向对象的方式)或者文件,然后再进行组合实现想要的功能和结果。

模块化可以在多个项目里复用代码,而不需要重新写,就像造车模块化一样,底盘一样、电气系统一样,只要改改外观、内饰,就可以造多个车型。

Python提供了强大的模块支持,主要体现在,不仅 Python 标准库中包含了大量的模块(称为标准模块),还有大量的第三方模块,开发者自己也可以开发自定义模块。通过这些强大的模块可以极大地提高开发者的开发效率。

7. 版本控制

随着参与项目的人不断增加,或因一时的大意造成了巨大的错误,并需要回到以前的版本。现在如果您的错误涉及到多个代码文件,其中有些文件被修改了多天甚至几个月前的。版本控制系统尤为重要。

在几个版本控制软件中,Git是最受欢迎的,有大量的在线帮助文档。使用Git,您可以根据需要保留尽可能多的修订版本,分支出一些代码实验的文件,跟踪上次更改的代码部分,并随时返回到他们。

8. 注意备份

备份不用多说了,防止突发情况,这个很重要!

9. 多看官方文档

不管用什么语言编程,官方文档永远是学习最好的选择,最新最详细的代码说明都在官方文档里。

Python也是这样,虽然市场上的教程多如牛毛,但官方文档必须要看的。

现在既有英文也有中文版,非常方便。

https://docs.python.org/zh-cn/3/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1623777.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【考研数学】全程跟张宇,《1000题》应该怎么搭配《660》《880》?

数一125学长来了,选题集和选老师经验满满,手把手教你避雷,直接不废话,三本题集很重要,筛选找重点事半功倍。 就老师而言,如果已经决定全程跟张宇老师了,那么就不要中途换老师! 就题…

按照模板导出复杂样式的excel

导出excel通常使用的是apache poi,但是poi的api相当复杂,所以当导出的excel样式比较复杂时,写起来就比较头疼了,这里推荐使用easypoi, 可以很方便的根据模板来导出复杂excel 文档地址: 1.1 介绍 - Powered by MinDoc 我们要实现如图所示效果…

C++的二叉搜索树

目录 基本概念 二叉搜索树的实现 插入结点 查找结点 删除结点 删除结点左为空 删除结点右为空 基于特殊情况的优化 删除结点左右不为空 基于特殊情况的优化 完整代码 二叉搜索树的实际应用 K和KV模型 改造二叉搜索树为为KV模型 基本概念 1、二叉搜索树又称二叉…

数据结构之二叉搜索树底层实现洞若观火!

目录 题外话 正题 二叉搜索树 底层实现 二叉搜索树查找操作 查找操作思路 查找代码实现详解 二叉搜索树插入操作 插入操作思路 插入代码详解 二叉搜索树删除操作 删除操作思路 删除代码详解 小结 题外话 我的一切都是党给的,都是人民给的,都是家人们给的!! 十分感…

LeetCode:51. N 皇后

leetCode51.N皇后 题解分析 代码 class Solution { public:int n;vector<vector<string>> ans;vector<string> path;vector<bool> col, dg,udg;vector<vector<string>> solveNQueens(int _n) {n _n;col vector<bool> (n);dg …

通过matlab对比遗传算法优化前后染色体的变化情况

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 通过matlab对比遗传算法优化前后染色体的变化情况. 2.测试软件版本以及运行结果展示 MATLAB2022A版本运行 3.核心程序 ....................................…

AI视频教程下载:用ChatGPT和 MERN 堆栈构建 SAAS 项目

这是一个关于 掌握ChatGPT 开发应用的全面课程&#xff0c;它将带领你进入 AI 驱动的 SAAS 项目的沉浸式世界。该课程旨在使你具备使用动态的 MERN 堆栈和无缝的 Stripe 集成来构建强大的 SAAS 平台所需的技能。 你将探索打造智能解决方案的艺术&#xff0c;深入研究 ChatGPT 的…

第十五章数据管理成熟度评估6分

15.1 引言 能力成熟度评估&#xff08;Capability Maturity Assessment&#xff0c;CMA&#xff09; 是一种基于能力成熟度模型&#xff08;Capability MaturityModel&#xff0c;CMM&#xff09;框架的能力提升方案&#xff0c;描述了数据管理能力初始状态发展到最优化的过程…

一键部署,隐私无忧!有道QAnything,本地AI问答系统开源了,你下载了吗?

作者&#xff1a;Aitrainee | 公众号&#xff1a;AI进修生 排版太难了&#xff0c;请点击这里查看原文&#xff1a;一键部署&#xff0c;隐私无忧&#xff01;有道QAnything&#xff0c;本地AI问答系统开源了&#xff0c;你下载了吗&#xff1f; 一键部署&#xff0c;隐私无忧…

AWVS的使用

AWVS的使用 1、使用docker拉取AWVS的镜像 docker pull secfa/docker-awvs 2.使用AWVS docker run -it -d -p 13443:3443 --cap-add LINUX_IMMUTABLE secfa/docker-awvs 3.访问 4.输入账号密码 https://hub.docker.com/r/secfa/docker-awvs 找到账号密码 username:adminadmin.…

azure云服务器学生认证优惠100刀续订永久必过方法记录

前面的话 前几天在隔壁网站搞了个美国edu邮箱&#xff0c;可以自定义用户名。今天就直接认证Azure&#xff0c;本来打算等GitHub学生包过期后用这个edu邮箱重新认证白嫖Azure的。在昨天无意中看到续期&#xff0c;就把原本那个Azure账号续了一年&#xff0c;所以这个美国edu邮…

设计模式六大原则详解

引言 对于设计模式&#xff0c;自己很早之前就看了好多本设计模式书籍&#xff0c;其中一些还看了好几遍&#xff0c;也一直希望自己能在编码的时候把这些设计模式用上去。可是&#xff0c;在日常的打码中&#xff0c;用的做多的就是单例&#xff0c;其次是观察者和建造者模式…

《QT实用小工具·四十一》无边框窗口

1、概述 源码放在文章末尾 该项目实现了无边框窗口效果&#xff0c;项目demo如下所示&#xff1a; 项目代码如下所示&#xff1a; #include "framelesswindow.h" #include <QGuiApplication> #include <QScreen>#ifdef Q_OS_WIN #include <window…

【初阶数据结构】——循环队列

文章目录 1. 什么是循环队列&#xff1f;2. 结构的选择&#xff1a;数组 or 链表&#xff1f;链表结构分析数组结构分析判空判满入数据出数据取队头队尾元素 3. 代码实现&#xff08;数组结构&#xff09;C语言版本C版本 这篇文章我们来学习一下如何实现循环队列 那力扣上呢有一…

VBA隐藏技术stomping

1.简介 之前我们介绍了VBA脚本文件的重定向&#xff0c;修改文件中的加载结构并将脚本的二进制文件进行伪装&#xff0c;达到宏代码隐藏的目的&#xff0c;细节请参考上一篇文章"VBA脚本重定向"。该技术具有一定的局限性&#xff0c;只使用脚本重定向技术无法绕过Mic…

http是什么?http的基础知识教程详解(2024-04-24)

1、http的概念 HTTP&#xff08;超文本传输协议&#xff0c;HyperText Transfer Protocol&#xff09;是一种用于分布式、协作式、超媒体信息系统的应用层协议。 HTTP 是万维网&#xff08;WWW&#xff09;的数据通信的基础&#xff0c;设计目的是确保客户端与服务器之间的通…

乐鑫科技收购创新硬件公司 M5Stack 控股权

乐鑫科技 (688018.SH) 宣布收购 M5Stack&#xff08;明栈信息科技&#xff09;的控股权。这一战略举措对于物联网和嵌入式系统领域的两家公司来说都是一个重要的里程碑&#xff0c;也契合了乐鑫和 M5Stack 共同推动 AIoT 技术民主化的愿景。 M5Stack 以其创新的硬件开发方式而闻…

Linux实现文件共享

#nfs-utils、rpcbind 软件包来提供 NFS 共享服务 #客户端创建共享文件夹&#xff1a; nmcli c reload nmcli c up ens160 systemctl stop firewalld systemctl disable firewalld rpm -q nfs-utils rpcbind #查看是否安装 systemctl enable rpcbind systemctl enable nfs…

(八)小案例银行家应用程序-排序-数组排序

排序一直有很多的算法&#xff0c;今天我们仅仅来说JavaScript内置的排序方法 ● 字符串 const owners [Jonas, Zach, Adam, Martha]; console.log(owners.sort()); console.log(owners);但是注意&#xff0c;这个方法会改变原有的数组&#xff1b; ● 我们在试试数字 cons…

港股“AIGC第一股”出门问问,凭借什么产品做到上市?

随着人工智能技术的飞速发展&#xff0c;AIGC&#xff08;人工智能生成内容&#xff09;领域逐渐成为资本市场的新宠。在这样的背景下&#xff0c;出门问问&#xff08;股票代码&#xff1a;2438.HK&#xff09;作为AIGC领域的先行者&#xff0c;于2024年4月24日正式登陆港交所…