当前位置: 首页 > 科技观察

13个超实用的Python编程技巧,越早知道越好

时间:2023-03-17 20:56:50 科技观察

写代码是不得已而为之作为软件工程师,在工作的时候应该尽量少写代码。当你遇到问题时,你首先想到的不应该是“我该如何解决这个问题”,而是“其他人解决过这个问题,我可以使用他们的解决方案吗?”如果您自己解决了一个常见问题,那么其他人很可能已经有了解决方案。先上网搜索解决方案,只有在确定没有人解决问题时才开始自己解决问题。DRYDRY是Don'tRepeatYourself(不要重复你自己)的缩写,意思是不要在程序中编写重复或基本相同的代码。正确的做法是把代码封装成一个函数,以后可以复用。正交性是《The Pragmatic Programmer》提倡和推广的另一个重要的编程原则。根据Hunt和Thomas的说法,“该术语已被用来表示一种独立性或解耦性。如果两个或多个事物之间的变化不相互影响,则它们之间存在正交性。在一个设计良好的系统中,数据库代码和用户界面是正交的;调整用户界面不会影响数据库,更换数据库也不会改变用户界面。”在实践中,请记住“A不应影响B”。假设我们有两个模块module_a和module_b,module_a不应该修改module_b中的内容,反之亦然。如果你设计一个A影响B,B影响C的系统,它很快就会失控,系统将变得难以管理。每个数据应该只保存在一个地方假设手头有一个数据,我们只需要将它存储在一个地方。比如我们在开发处理手机号码的软件,有两个函数需要用到区号列表。这里,我们需要保证程序中只有一个区域号列表,而不是为每个功能重复创建。正确的做法是创建一个全局变量来保存区域编号。更好的解决方案是将信息保存在文件或数据库中。函数只做一件事我们编写的每个函数都应该做一件事。如果您发现您的函数太长,请检查它是否在执行多个任务。将功能限制为仅完成一项任务有很多好处。首先,增强了代码可读性,因为函数名可以直接描述它们的作用。如果代码出错,调试也更容易,因为每个函数只负责特定的任务,我们可以快速隔离和调试问题函数。用许多知名程序员的话来说:“软件的大部分复杂性来自于试图将两件事合二为一。“如果时间太长,你的方法很可能是错误的。如果你处理的不是非常复杂的问题,比如处理大数据,而是程序加载时间很长,那么你可以认为你的方法是非常错误的。”可能是错的。第一次就用最好的方式做当编程时你可能会想:“我知道有更好的方法,但我已经开始编码了,不想回去重写它。“那么我建议你停止编码,并以更好的方式进行编码。遵循学习一门新编程语言的惯例将加快阅读用该语言编写的代码的速度。PEP8是一套编写Python代码的指南,强烈推荐阅读,大家可以去https://www.python.org/dev/peps/pep-0008/查看。使用强大的IDE到目前为止,我们一直在使用Python自带的IDE——IDLE来编码。但是IDLE只是众多可选IDE中的一个,我不建议长期使用它,因为它的功能有限。例如,如果你用更强大的IDE打开一个Python项目,每个Python文件都会有一个不同的选项卡。在IDLEthen是每个文件一个新窗口,操作比较麻烦,文件之间来回切换比较麻烦,笔者使用的是JetBrains开发的一个IDE叫PyCharm,他们提供免费版和专业版两个版本,这个IDE有以下特点可以帮助我们节省时间。1.如果你想view变量、函数或对象的定义,PyCharm提供了一个快捷方式,可以跳转到定义变量、函数或对象的地方(即使是另一个文件)。PyCharm也提供了跳回起始页的快捷方式。2、PyCharm具有保存本地历史的功能,可以大大提高工作效率。PyCharm会在每次项目更改时保存一份副本,因此您可以使用它而无需将其推送到代码库PyCharm可以用作版本管理系统的本地版本。用户不需要做任何事情,IDE会自动保存。在了解这个特性之前,我经常在解决问题后想更改解决方案,但很快又希望回滚到原来的计划。如果我不把原计划推到Github上,它就丢失了,只好重写了。但是有了这个功能,我们可以回滚到10分钟前,然后重新加载时间,如果改变主意,还可以随意在不同的解决方案之间来回切换。3.在日常的工作过程中,很可能会频繁的复制粘贴代码。在PyCharm中,无需复制粘贴,直接在当前界面移动代码即可。4、PyCharm支持Git、SVN等版本控制系统。无需使用命令行,直接在PyCharm中使用Git。在IDE和命令行之间切换的次数越少,您的工作效率就会越高。5.PyCharm提供内置命令行和PythonShell。6.PyCharm有一个内置的调试器(debugger)。调试器是一种支持中断代码执行并逐行查看代码效果的程序。通过调试器,我们可以查看不同代码中变量的值。日志记录日志记录是指在软件运行时记录数据的做法。我们可以使用日志来辅助程序调试,更好的了解程序运行时的状态。Python自带一个日志模块,支持在控制台或文件中进行日志记录。当程序出错时,我们不希望自己毫无察觉——我们应该记录相关信息以备日后验证。日志记录对于收集和分析信息也很有用。例如,可以设置Web服务器来记录数据,包括收到的每个请求的日期和时间。我们可以将所有日志记录在数据库中,编写程序来分析数据,并生成显示访问该网站的人数的图表。博主亨里克·沃纳(HenrikWarne)在他的博客中写道:“伟大的程序员和平庸的程序员之间的区别之一是,伟大的程序员会做日志记录,这使得出现问题时调试变得更容易。”测试程序测试是指检查程序“满足设计和开发要求,为各种输入返回正确的结果,花费可接受的时间来执行功能,并且足够可用以在目标环境中安装和运行,并实现利益相关者预期的效果。”为了进行程序测试,程序员需要编写额外的程序。在生产环境中,测试是强制性的。计划部署在生产中的程序在编写测试之前应该被认为是不完整的。但是,如果它是一个临时程序,则赢得了'被再次使用,测试可能是浪费时间。如果你正在编写一个其他人也会使用的程序,你应该编写测试。许多知名程序员都说过:“未经测试的代码是有缺陷的代码。”代码审查在代码审查(codereview)中,同事会阅读你的代码并提供反馈。建议尽可能多地进行代码审查,特别是对于自学成才的程序员。即使你遵循了本章列出的所有最佳实践,也有可能是错误。您需要有经验的程序员检查您的代码并指出所犯的错误,以便可以修复它们。CodeReview是一个专注于代码审查的程序员社区。任何人都可以登录该站点并提交代码。社区的其他成员审查代码并就进展顺利和可以改进的地方提供反馈。安全对于自学成才的程序员来说,安全是一个容易被忽视的问题。面试很少问安全问题,我们学编程也不考虑安全问题。然而,在实践中,我们需要对自己代码的安全性直接负责。本节将给出几个提高代码安全性的建议。我们在本书中学习了使用sudo命令以root用户身份执行命令。除非必要,否则不要在命令行上使用sudo执行命令,这一点很重要,因为如果黑客闯入程序,他将获得root访问权限。如果您是服务器管理员,您还应该禁止root用户登录。每个黑客都关注root帐户,这是攻击系统时的首选。此外,始终假设用户输入是恶意的。一些恶意攻击的发生就是利用了接受用户输入的程序漏洞,所以我们不得不假设所有的用户输入都是恶意的,并以此为基础进行编码。另一个提高代码安全性的策略是尽量减少攻击面,即黑客可以从您的程序中提取数据或攻击系统的系统区域。通过最小化攻击面,您可以降低程序易受攻击的可能性。最小化攻击面的几种常见做法包括:避免保存敏感信息、给予用户最低访问权限、尽可能少地使用第三方库(代码量越小,漏洞越少)、剔除不重要的功能代码使用时间越长(代码量越小,漏洞越少)等。避免以root用户登录系统,不信任用户输入,尽量减少攻击面是保证程序安全的几个重要手段。但这只是提高安全性的一小部分。我们应该尝试从黑客的角度来思考。他们将如何使用您的代码?这可以帮助我们找到之前可能忽略的漏洞。安全性的话题太大,本书无法涵盖,因此建议您不断思考和学习如何提高安全性。BruceSchneier总结得很好:“安全是一种心态。”词汇表产品代码:用户使用的产品中的代码。Production:将软件投入生产,指正式对外发布。DRY:一种编程原则,“Don'tRepeatYourself”的英文缩写。正交性:该术语已用于表示某种独立性或解耦性。如果两个或多个事物之间的变化不相互影响,则它们之间存在正交性。在一个设计良好的系统中,数据库代码和用户界面是正交的;调整用户界面不会影响数据库,更换数据库也不会改变用户界面。调试器:调试器是一种支持中断代码执行和逐行查看代码效果的程序。通过调试器,我们可以查看不同代码中变量的值。日志记录:指在软件运行时记录数据的做法。测试:检查程序“满足设计和开发要求,为各种类型的输入返回正确的结果,花费可接受的时间来执行功能,足够可用以在目标环境中安装和运行,并实现预期的影响。”代码审查:其他人阅读您的代码并提供反馈的过程。攻击区域:黑客可以从程序中提取数据或攻击系统的相关区域。