iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python程序员的不良编程习惯有哪些
  • 952
分享到

Python程序员的不良编程习惯有哪些

2023-06-02 05:06:39 952人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要讲解了“python程序员的不良编程习惯有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python程序员的不良编程习惯有哪些”吧!编程习惯No. 1:使用Goto关于禁止使

这篇文章主要讲解了“python程序员的不良编程习惯有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python程序员的不良编程习惯有哪些”吧!

编程习惯No. 1:使用Goto

关于禁止使用goto可以追溯到许多结构化编程工具还未面世的时代。如果程序员想要创建一个循环或跳到另一段程序中,那么他们需要输入goto后再跟一个行号。过了几年之后,编译器团队让程序员使用字符串标签取代行号。这在当时被认为是一个热门的新功能。

有的人认为这会导致“意大利面条式代码”。代码会变得不可读,并且很难理解代码的执行路径。线程混乱,缠缠绵绵到天涯。Edsger Dijkstra就三令五申地表示应该禁止这个命令,他有一份诙谐的手稿,题目为《Goto语句害人不浅》。

但绝对的分支是没有问题的。这就让人纠结了。通常,巧妙的 break 语句和return 语句可提供一个非常干净的关于代码在那个时候执行什么的声明。有时候,添加 goto 到case语句会比更恰当的多级嵌套的if-then-else语句块更易于理解。

也有反例。在苹果的SSL堆栈中的“goto fail”安全漏洞就是最好的例子之一。但是,如果我们能够仔细避免case语句和循环的一些尴尬问题,那么我们就可以嵌入良好的绝对转移,使阅读代码的人更容易明白这是怎么回事。我们可以插入break和return 语句,让每一个人感觉更清洁和更愉快——可能得除了goto的敌视者。

编程习惯No. 2:成功避开文档

我的一个朋友有一个非常精明的老板,这位老板虽然从来没有写过任何代码,但却秉持着每一个功能都必须包含在文档中的理念。哪个程序员不提供注释,那么他就会受到处罚。所以,我的朋友在他的编辑器中联入了一个有点像人工智能的玩意儿,于是乎,他的每一个功能就都有几行“文档”了。因为这位精明的老板还不够聪明到能理解这些注释其实啥意思也没有,所以我的朋友逃过一劫。他的代码常常被作为正式文档。我想,他应该快要升职了!哈哈哈!!!

许多函数方法,甚至一些类或多或少都能自文档化。冠以insertReservation或cancelReservation或 deleteAll 等名称的函数并不需要多此一举来解释它们的作用。为函数取一个正确的名字往往就足够了。事实上,这比写一段长长的注释要好,因为函数名可以出现在代码中的其他地方。而文档只能默默地呆在某个角落。自文档化的函数名可以改进它们出现的每个文件。

在有些情况下,写文档甚至会导致情况变糟。例如,当代码瞬息万变,团队像疯了似的重构的时候,文档就会产生分歧。代码是这样写的,但文档解释的还是四五个版本以前的情况。这类“过时”的文档通常位于代码顶部,有的人会在这里对代码应该发生什么作一个美好总结。因此,尽管重构团队已经仔细修改了相关的注释,但还是会遗漏文件顶部的这段“美好总结”。

当代码和文本出现分歧的时候,注释就变得毫无价值,甚至会产生误导。在这样的情况下,良好的自文档化的代码显然胜出了。

编程习惯No. 3:一行写太多代码

老板突然发神经地给团队发了一封讨厌的邮件:为了执行非常严格的风格规定,我们大家都必须重写我们的代码。最神奇的要求是:每个行为或步骤或子句必须各自成行。你不能使用点语法连续调用函数。在一个分支语句中,你不能有两个及以上返回布尔值的子句。如果要定义变量,那么另起一行。如果你正在做一个复杂的计算,那么不要使用括号。每个片段也自成一行。

他认为他的这个法令将能使调试变得更加容易。就像你单步调试代码一样,调试器会一个动作一个动作地前进。这样就不会卡在某一行。而且更容易执行。

但是这样一来,键盘上的回车键烦不胜烦,因为我需要不断地插入行。而且我敢肯定,老板因此还可以到处吹嘘他的团队能写多少行代码。

唉,有时在同一行中声明一堆变量反而更容易;有时把所有的布尔子句放在一起反而更简单——一切都能变得更加紧凑。那也意味着,我们可以在屏幕上看到更多的逻辑而无需滚动鼠标。更易于阅读就意味着理解起来更快。这才是简单的精粹。

编程习惯No. 4:不声明类型

那些热爱类型化语言的人认为,如果为每个变量添加明确的数据类型声明,就可以写出更好的、没有错误的代码。花一点时间来拼写类型,能帮助编译器在代码开始运行之前标志愚蠢的错误。可能会让人觉得痛苦,但很有帮助。这是编程中停止bug的一种有备无患的方法。

但是时代变了。许多较新的编译器完全可以智能地通过查看代码来推断类型。它们会向后和向前浏览代码,直到可以肯定这个变量是string 还是int,抑或其他。如果这些被查看的类型不成队列,那么错误标志就会点亮。因此再也不需要我们输入变量的类型了。

这意味着我们现在可以在代码中省略掉一些最简单的声明。代码更清洁,而且阅读代码的人也猜得出for循环中命名为 i 的变量表示一个整数型。

编程习惯No. 5:摇摆不定的代码

有的程序员在代码上特别优柔寡断,犹豫不决。先是一开始将值存储为字符串,然后又解析成整数。接着又转换回字符串。这是非常低效的,你甚至可以感觉到CPU在咆哮这种浪费负载的行为。聪明的程序员之所以能快速地编码,是因为他们事先会设计架构,以尽量减少转换。他们的代码能更快地运行是因为他们有一个良好的规划。

但是,不管你信不信,这种摇摆不定的代码有时候也是有意义的。比如说,你有一个非常棒的库,在它专有的黑盒子里能做无数智能的事情。如果库需要字符串的数据,那么你就给它字符串,即使你刚将这个数据转换成为整数型。

当然,你可以重写所有的代码,以尽量减少转换,但是这需要时间。而且,有时候让代码稍微多花点额外时间来运行也未尝不可,因为重写代码需要耗费我们更多的时间。有时,背负这样的技术债务比一开始就正确构建的成本要更低。

有的时候,库不是专有的代码,但那些你以前全部自己写的代码是你独有的。有的时候,再次转换数据比重写库中的所有代码要快得多。所以,就让它这样吧,就让代码摇摆吧。

编程习惯No. 6:编写你自己的数据结构

有一个标准规则是,程序员在完成数据结构课程的第二年,不应该写用于存储数据的代码。基本上我们需要的所有的数据结构,已经有人写好了,而且其代码已历经多年的测试和再测试。它和语言捆绑在一起,而且常常是免费的。你的代码只能造就bug。

但有时你会发现数据结构库有点慢。有时它们会迫使我们使用标准的,但于我们的代码却是错误的结构。有时库会把我们推向在使用结构之前重新配置数据的地步。有时库会包含一些所谓有备无患的保护功能,如线程,但其实我们的代码并不需要。

如果遇到这种情况,那么就应该着手写我们自己的数据结构。这或许能让你做得更快,做得更多。而且代码会变得更清洁,因为我们不会包括那些多余的用于格式化数据来完成一些功能的代码。

编程习惯No. 7:在中间打破循环

有一个规则制定小组宣称,每个循环都应该有一个“常量”,也就是说当这个逻辑语句为true的时候,循环一直执行。当常量一定不会是true的时候,循环才会结束。这是考虑复杂循环的好方法,但它会导致愚蠢的禁令——例如禁止我们在循环中间使用return 和break 语句。这一条也包含在禁止goto语句的规则中。

这个理论是好的,但它通常会导致更复杂的代码。请看下面这个简单的案例,遍历数组,将找到的元素传递给test函数,并将该元素返回:

while (i<a.length){ ... if (test(a[i]) then return a[i]; ...}

“循环常量”爱好者会要求我们增加一个布尔变量,命名为notFound,然后这样使用:

while ((notFound) && (i<a.length){...if (test(a[i])) then notFound=false;...}

如果这个布尔值能够合理地命名,那么这就是一段很棒的自文档化的代码,更易于大家理解。但这也增加了复杂性。这意味着你需要分配另一个局部变量,并堵塞寄存器,因为编译器也许还不能足够智能到解决这个问题。

有时候,一个goto 语句或一个跳转会更干净利索。

编程习惯No. 8:使用短变量名(i和x和and也是有意义的)

Edgar Allan Poe这位诗人和小说家曾经说过,在一个故事中的每一个词都应该是有内涵的。编码规则也强调如此。变量名应该说明这个变量的所作所为。那些使用驼峰式大小写的方法来写变量名,以表达关于变量细节的Java程序员深以为然,于是一个又一个疯狂长度的变量名出炉了。有些程序员写的变量名,会组合五六个甚至更多的词语。

但有的时候,使用单个字母作为变量名反而会更方便。有时在循环迭代中只使用i或j会更简单。有时使用字母a代表array ,l代表list会更便捷,即使是字母l和数字1看上去很难辨别。

正如这篇文章前面鼓励的是自文档化的代码,而非长长的注释。在上述情况下,单个字母的变量名也是自文档化的。字母 i 是通用的迭代器。只要是程序员立刻就会懂。

编程习惯No. 9:重新定义运算符和函数

一些最有趣的编程语言允许你去做一些特别诡异的事情,例如重新定义元素的值,就如同常量一般。例如Python,你可以输入TRUE=FALSE(在Version2.7及之前的版本)。这并不会产生某种逻辑崩溃,或导致宇宙终结——仅仅只是互换了TRUE和FALSE的含义。你也可以在C预处理器和一些其他语言中玩玩类似于这样的危险游戏。还有一些语言允许你重新定义运算符,如加号。

当然这是延伸了,不过有一个观点是,在一个大的代码块内,当重新定义一个或多个所谓的常量时,速度会更快。有时老板会要求代码做一些截然不同的事情。当然,你可以修改代码的每个事件,或者,你可以重新定义。这让你看上去像一个天才。不必重写一个庞大的库,只需翻转一下,就可以做相反的事情了。

感谢各位的阅读,以上就是“Python程序员的不良编程习惯有哪些”的内容了,经过本文的学习后,相信大家对Python程序员的不良编程习惯有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Python程序员的不良编程习惯有哪些

本文链接: https://www.lsjlt.com/news/228929.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python程序员的不良编程习惯有哪些
    这篇文章主要讲解了“Python程序员的不良编程习惯有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python程序员的不良编程习惯有哪些”吧!编程习惯No. 1:使用goto关于禁止使...
    99+
    2023-06-02
  • JavaScript不良的编码习惯有哪些
    这篇文章主要介绍“JavaScript不良的编码习惯有哪些”,在日常操作中,相信很多人在JavaScript不良的编码习惯有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2022-10-19
  • Python程序员所具备的好习惯有哪些
    本篇内容主要讲解“Python程序员所具备的好习惯有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python程序员所具备的好习惯有哪些”吧!良好的时间管理迟到对于任何一家公司都是个头痛的问...
    99+
    2023-06-02
  • .NET程序员得遵守的编码习惯有哪些
    .NET程序员得遵守的编码习惯有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。小编将为大家介绍二十条.NET程序员不得不遵守的.NET编码习惯。不要硬编string/ ...
    99+
    2023-06-17
  • 让Python程序变慢的坏习惯有哪些
    这篇文章主要讲解了“让Python程序变慢的坏习惯有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“让Python程序变慢的坏习惯有哪些”吧!1.不要导入根模块在使用 Python 时,我...
    99+
    2023-07-06
  • 提升Python程序性能的习惯有哪些
    本篇内容介绍了“提升Python程序性能的习惯有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、使用局部变量尽量使用局部变量代替全局变...
    99+
    2023-07-06
  • 有哪些C语言编程习惯
    本篇内容主要讲解“有哪些C语言编程习惯”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“有哪些C语言编程习惯”吧!判断失败而非成功下面是一段简化过后的代码片段:if (physap_ala...
    99+
    2023-06-16
  • Java编程中的好习惯有哪些
    这篇文章跟大家分析一下“Java编程中的好习惯有哪些”。内容详细易懂,对“Java编程中的好习惯有哪些”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起深入学习“Java编程中的好习惯有哪些”...
    99+
    2023-06-02
  • 优秀的web程序员所具备哪7个好习惯
    本篇内容介绍了“优秀的web程序员所具备哪7个好习惯”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 良好的时间管理迟到对于任何一家公司都...
    99+
    2023-06-17
  • 不同程序员的Python代码风格有哪些
    这篇文章主要讲解了“不同程序员的Python代码风格有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“不同程序员的Python代码风格有哪些”吧!编程新手...
    99+
    2022-10-19
  • Java程序员应该学习的技术有哪些
    这篇文章主要讲解了“Java程序员应该学习的技术有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java程序员应该学习的技术有哪些”吧!1、DevOps (Docker and Jenk...
    99+
    2023-06-16
  • Python程序员常见的问题有哪些
    这篇文章主要讲解了“Python程序员常见的问题有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python程序员常见的问题有哪些”吧!语用错误让我们从基础开始,从那些刚学习编程的人钻研...
    99+
    2023-06-27
  • 程序员必不可少的Firefox插件有哪些
    这篇文章将为大家详细讲解有关程序员必不可少的Firefox插件有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Firefox 3.5发布。确实如官方解释...
    99+
    2022-10-19
  • Java、Web和移动程序员学习的框架有哪些
    这篇文章主要介绍“Java、Web和移动程序员学习的框架有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java、Web和移动程序员学习的框架有哪些”文章能帮助大家解决问题。1)Angular这...
    99+
    2023-06-16
  • Flex程序员的境界有哪些
    这篇文章主要介绍了Flex程序员的境界有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Flex程序员的四重境界以前见过一些文章描述Flex程序员的层次、水准、特征等等内容...
    99+
    2023-06-17
  • Python 程序员必备的算法技能有哪些?
    作为一名 Python 程序员,掌握算法技能是非常重要的。因为在实际工作中,我们经常需要处理大量的数据,而算法能够帮助我们更高效地处理这些数据。所以本篇文章将介绍一些 Python 程序员必备的算法技能。 一、排序算法 排序是最基本的算法...
    99+
    2023-09-16
    编程算法 分布式 linux
  • 有哪些适合Linux程序员代码的编辑器
    本篇内容介绍了“有哪些适合Linux程序员代码的编辑器”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、EclipseEclipse是一款很...
    99+
    2023-06-13
  • Java程序员不能错过的基本框架有哪些
    这篇文章主要介绍“Java程序员不能错过的基本框架有哪些”,在日常操作中,相信很多人在Java程序员不能错过的基本框架有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Ja...
    99+
    2022-10-19
  • 原生态Java 程序员容易忽视的编程细节有哪些
    今天就跟大家聊聊有关原生态Java 程序员容易忽视的编程细节有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Java是Java程序设计语言和Java平台的总称,要想学好一门语言,...
    99+
    2023-06-17
  • 大多数程序员都不知道的YAML功能有哪些
    这篇文章主要介绍“大多数程序员都不知道的YAML功能有哪些”,在日常操作中,相信很多人在大多数程序员都不知道的YAML功能有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作