当前位置: 首页 > 后端技术 > Python

四个好用的Python代码编写工具,你用过几个?

时间:2023-03-26 14:06:17 Python

摘要:Python是一种跨平台的编程语言,可以在所有主流操作系统上运行你编写的任何Python程序。今天介绍几种常用工具:Python自带的解释器、文本编辑器(Geany、SublimeText)、主流IDE(PyCharm、JupyterNotebook),以及如何利用公有云计算资源在本地进行开发。前言Python在今年受到了比往常更多的关注,成为世界上最流行的编程语言之一。--byKrzyszt对于技术文章,我通常会想到一些高大上的描述或者一些人文故事。然而,对于像Python这样的通用编程语言,我认为Krzyszt的上述口语描述就足够了。Python是一种跨平台编程语言,这意味着它可以运行您在所有主要操作系统上编写的任何Python程序。在今天的文章中,我将为大家详细说说几个常用的工具,包括Python自带的解释器、文本编辑器(Geany、SublimeText)、主流IDE(PyCharm、JupyterNotebook),以及如何使用公有云计算。资源在本地开发。Python附带的解释器Python附带一个在终端窗口中运行的解释器。不需要保存代码,直接运行整个程序即可,如下:GeanyGeany是一个简单的文本编辑器,易于安装。支持直接运行几乎所有程序(无需通过终端运行),支持使用颜色区分关键代码,高亮代码语法。我们可以从官网下载Geany软件:https://geany.org/。安装完成后,首先在本地创建一个文件夹来保存和运行代码,比如python_work文件夹。创建一个新文件并使用“另存为”将其保存到python_word文件夹中。如果你已经安装了python,即可以在系统中执行命令python,则不需要配置Geany。如果不能顺利执行python命令,需要配置Geany。“Generate”按钮涉及编码代码和运行代码,如下图:首先,执行一条helloWolrld命令,如下图:进一步解释“Generate”下拉列表中列出的功能方框里,我用的是“阿姆斯壮数”,即如果一个n位正整数等于它的各位数的n次方之和,这个数就叫做阿姆斯壮数。例如1^3+5^3+3^3=153。代码如下:#从用户中获取输入num=int(input("Enteranumber:"))#initializesumsum=0#findthesum每个digittemp=numwhiletemp>0:digit=temp%10sum+=digit**3temp//=10#displaytheresultifnum==sum:print(num,"isanArmstrongnumber")else:print(num,"isnotanArmstrongnumber")"Compile":编译代码,类似执行python-mpy_compilehelloWorld.py生成.pyc文件。pyc是二进制文件,是将py文件编译生成的文件,属于字节码。py文件变成pyc文件后,加载速度提高,而且pyc是跨平台字节码,由python虚拟机执行,类似于JAVA或.NET虚拟机的概念。pyc的内容和python的版本有关。不同版本编译出来的pyc文件不完全一样。比如v2.5编译出来的pyc文件在v2.4版本的python上是无法执行的。“Lint”:该功能会静态检查代码,比如制表符、空格、变量名等是否符合要求。本例中部分行只缩进了3个空格,第18行的"num,"少了一个空格,报错如下:修改代码后,会显示编译正常,如图下图:“Generatetargetfile”:运行“makecurrent_file.o”文件,好处是只编译当前指定的文件,不编译整个工程。“Execute”:实际调用的是Python的终端编译器,如下图:Geany的操作界面和编译器支持个性化配置,这里就不一一展开了,大家可以通过“Edit”-“Preferences”自行尝试”。SublimeText类似于Geany。SublimeText是一个简单的文本编辑器,可以直接运行几乎所有程序(无需通过终端),支持以不同颜色显示关键代码,并高亮显示代码语法。SublimeText的优点:跨平台:SublimeText是一个跨平台的编辑器(可在Linux、OSX和Windows下使用)。作为程序员,切换系统是常有的事。为了减少重复学习,需要使用跨平台的编辑器;可扩展:SublimeText具有可扩展性(Extensible),包含大量实用的插件,我们可以通过在自己的领域安装插件来成倍提高工作效率;互补:SublimeText是命令行环境(CLI)和图形界面环境(GUI)下的最佳选择,两者同时使用会大大提高工作效率。从使用的角度来说,SublimeText确实是程序员的利器。比如它的所有设置都是通过JSON配置文件完成的。支持自己写配置文件的方式,感觉不错。如上图所示,我在右侧的可编程栏中设置了字体大小。只要文档被保存,SublimeText打开的窗口就会立即执行。SublimeText支持同时选中多个区域,然后同时编辑。Ctrl+D选中当前光标所在的单词并高亮所有出现的单词,Ctrl+D再次选中该单词出现的下一个位置,在多选单词的过程中,使用Ctrl+K跳过,使用Ctrl+U返回,使用Esc退出多重编辑。这真是太棒了,写代码的人都觉得自己的效率提高了很多!PyCharmPyCharm是一个用于计算机编程的集成开发环境(IDE),主要用于Python语言开发,由捷克公司JetBrains开发,提供代码分析、图形调试器、集成测试器、集成版本控制系统,支持使用DjangoDoweb发展。PyCharm是一个跨平台开发环境,具有适用于MicrosoftWindows、macOS和Linux的版本。社区版在Apache许可下发布,还有一个专业版,在专用许可下发布,具有许多附加功能。PyCharm非常强大,几乎包含了你自己能想到的所有功能。我觉得判断一个IDE的生命力,应该看它是否支持代码重构和对周边生态(比如公有云计算资源)的利用,所以我这里主要关注这两个特性。先说代码重构。重构是指使用一系列重构技术来调整软件的结构,而不改变其可观察到的行为。我们平时讲的代码重构,最常见的有几种,比如重复代码(在不止一处看到同一个程序结构)、类太长(一般不超过500行)、参数列太长(Toolong参数列表难以理解,参数太多不一致,不好用,数据多了就得修改),divergingchanges(如果一个类因为不同的原因经常被使用)朝不同的方向变化,那么此时或许将这个对象拆分成两个会更好,这样每个对象只需要修改一次),冗余类等。我们来看具体情况:1.常量和临时变量假设您有一个具有特殊含义的文字值,如以下代码所示。创建一个常量,根据其含义命名,并用这个常量替换上面的字面值。defpotential_energy(mass,height):returnmass*9.81*height9.81这里改成GRAVITATIONAL_CONSTANT比较合适,选择Constant:把代码改成下图:2.简化复杂的表达式,比如下面的代码:如果platform.upper()中的“MAC”和browser.upper()中的“IE”和was_initialized()andresize>0:#dosomething我们可以将platform.upper()中的“MAC”更改为变量,即用变量名解释表达式的用途。代码最终重构如下图所示:3.抽象复用方法,减少业务方法代码量。这是最大公约数的示例代码。原代码如下:现在我们将最大公约数提取到一个单独的方法中,选中上图中的10-14行代码,点击'Refactor'按钮。代码重构为:使用内联变量重构去掉变量因子。我们选择变量因子并按Ctrl+Alt+N。所有检测到的因子变量都是内联的。使用ChangeSignature更改参数名称。选择方法声明行并按Ctrl+F6。在打开的对话框中,将参数denom和num分别重命名为x和y,然后点击图标节点upLevel来改变参数的顺序。PyCharm能比原生IDE工具做得更好吗?我觉得从PyCharm本身来看,发展已经步入正轨。我觉得现在应该做的是生态的拓展,或者说结合。和谁一起?与公共云。如果能在本地编码,利用公有云的计算资源进行调试,就相当于实现了云端协同。华为云ModelArts提供了一个插件,支持本地PyCharm和ModelArts的结合(详细过程请参考文档:https://bbs.huaweicloud.com/blogs/160467)。其实我们只需要做三步就可以支持本地PyCharm和ModelArts平台的结合:1、下载并安装插件;2、在ModelArts官网申请key;3.在PyCharm中填写键值对。如果把PyCharm想象成C/S设计模式的客户端,把ModelArts想象成服务端,就很容易理解了。这里我给出一个实际的用例——手写模型训练案例。首先下载手写数据集:https://modelarts-cnnorth1-market-dataset.obs.cn-north-1.myhuaweicloud.com/dataset-market/Mnist-Data-Set/archiver/Mnist-Data-Set。zip登陆华为云上传OBS:创建两个文件夹,一个存放数据集,一个存放训练产生的日志(需要传回PyCharmIDE显示):填写参数,可以参考ModelArts训练模型时填写Parameters:然后在PyCharm中打开项目,点击“RunTrainingJob”:上面的日志输出中,左下角是本地输出,右下角是返回的云端训练日志模型艺术。训练完成后,训练模型保存在OBS中/projectname/output/V0006/。在AI研究探索场景中,JupyterNotebook作为一个特殊的存在,迅速成长为AI探索场景开发的首选。它可以满足开发者的需求,涵盖所有阶段的这些关键点,并支持在浏览器中使用。.Jupyter从IPython项目开始。IPython最初是一个以Python为中心的项目,但随着项目的发展,它不再局限于Python编程语言。根据Jupyter创始人的想法,最初的目标是做一个可以直接支持Julia(Ju)、Python(Py)和R三种科学计算语言的交互式计算工具平台,所以他将其命名为Ju-Py-te-R,到现在Jupyter已经成为一个支持几乎所有语言,可以集成代码、计算输出、解释文档、多媒体资源的多功能科学计算平台。这里需要提到的另一个概念是“文学式编程”,它是DonaldKnuth提出的一种编程范式。这种范式提供了用自然语言解释程序逻辑的机会。简单的说,文学编程的读者不是机器,而是人。从编写机器可以理解的代码,到向人们解释如何让机器实现我们的想法,除了代码,还有更多的叙述性文字、图表等。文学编程中穿插着宏片段和传统源代码,从中可编译可以生成源代码。作为第一个贯穿科学计算研究全生命周期的工具平台,它可以分解为,如果将科学计算研究的全生命周期分解为个人探索、协作与共享、生产运行环境、出版与教学,Notebook都能满足这些阶段科研工作的需要。Jupyter有什么缺点吗?一些。如果你是追求产品代码开发,代码格式、依赖管理、产品打包、单元测试等功能在IDE中都没有很好的支持。目前有一些插件可以做到,但是相对于重度IDE,功能还是比较弱。此外,Jupyter被定义为研究型调试环境。一方面,目前对于分布式任务的推荐都是通过单机多进程的方式来模拟的。对多节点拓扑信息真实的部分,在Jupyter中不容易实现。另一方面,Jupyter的架构不适合运行非常重量级的作业。对于真正的软件产品开发需求,还是需要在IDE中进行工程代码开发,匹配测试逻辑,部署任务到集群运行。让我们详细看看Jupyter是如何工作的?首先在公有云上创建一个Notebook,点击“打开”按钮,如下图:选择基于(如TensorFlow-1.8)的计算引擎,如下图:输出代码片段,在第一段代码因为请求了需要用户输入,所以我们需要输入一个数字,只要是正常的整数就不会报错,如下图:后记的后记这篇文章比较难写,因为工具总是在进化,我们很难预测某个工具未来的发展方向和趋势,但永恒不变的规律是工具必须为开发者服务,并且它必须越来越简单。编辑器和IDE基本上是两种不同使用场景的工具:编辑器面向非语义纯文本,不涉及领域逻辑,因此速度快,体积小,适合编写单独的配置文件和动态语言脚本(Shell、Python和Ruby等);IDE面向语义代码,涉及大量领域逻辑,速度慢、体积大,适合编写静态语言项目(Java、C++、C#等)。我个人认为应该用对的工具做有价值的事情,效率最大化,所以我会用IntelliJIDEA写Java项目,用Vim写Shell,用SublimeText写JavaScript/HTML/Python,用VisualStudio写C#。不管这个工具多么好用,代码还是自己写的,所以在本文的最后,引用一下ZenofPython(在Python交互式解释器中输入importthis会显示TheZenofpythonbyTimPeters):>>>导入TimPeters的《Python之禅》美丽胜于丑陋。美丽胜于丑陋(以编写漂亮的代码为目标)显式优于隐式。Clearisbetterthanimplicit(漂亮的代码应该简洁明了)Simpleisbetterthancomplex.简单胜于复杂(避免太多复杂的内部实现)复杂胜于复杂。复杂胜于凌乱(保持界面简单)扁平胜于嵌套。扁平优于嵌套(避免多层嵌套)稀疏优于密集。间距优于紧凑(保持适当的间距,不要指望一行代码就能解决问题)可读性很重要。可读性很重要(保持并不断提高代码的可读性)特殊情况没有特殊到违反规则的程度。虽然实用胜过纯粹。错误不应该悄无声息地过去。错误不应该悄无声息地过去。除非明确沉默。面对歧义,拒绝猜测的诱惑面对不确定性拒绝猜测应该有一种——最好只有一种——显而易见的方法来做到这一点。尽管除非您是荷兰人,否则这种方式一开始可能并不明显。人物GuidovanRossum)现在总比没有好。尽管从来没有比*现在*更好。如果实现难以解释,那就不是一个好主意。很难解释,一定是一个糟糕的方法如果实现很容易解释,那可能是个好主意。命名空间是一个非常棒的想法——让我们做更多这样的事情吧!,不仅适用于Python,也适用于编程语言。