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

新手请进:每个Python程序员都应该知道的10个缩写词

时间:2023-03-17 13:11:59 科技观察

对于初学者:每个Python程序员都应该知道的10个首字母缩略词一种可以使用交互式控制台学习的解释型语言。基本上只用命令行工具(比如Mac中的Terminal)就可以开始学习Python,现在macOS系统自带了Python。在学习过程中,我们会逐渐熟悉它的数据结构、控制流、类、函数等基础知识。此外,还有另一件人们不常提起的有趣的事情:您时不时会遇到Python中的各种首字母缩略词。本文将回顾十个这样的首字母缩略词,它们既适用于一般编程原则,也适用于特定的Python编码,每个都有其有用和有趣的方面。1.OOP(ObjectOrientedProgramming)首先要介绍的首字母缩写词是OOP——ObjectOrientedProgramming,它是Python所基于的设计。大家都知道编程本身是关于编码的,但是程序本身应该是关于数据的。程序需要获取输入数据、处理数据和输出数据。请注意,此处讨论的数据是最一般意义上的数据,可以包括表格编号、字符串、用户操作(例如按钮单击)、图像和任何形式的带有信息的数据。代码的工作是获取各种形式的数据并以所需的方式呈现它们。为了完成工作,人们需要可以操作这些数据的代码,而现代编程语言(包括Python)中的一种常见设计模式是采用OOP范例。这个想法非常直观——我们用特定的对象包装数据。更具体地说,对象可以保存数据(例如属性)并可以操作数据(例如方法)。例如,如果开发赛车游戏,那么我们可以构建汽车对象,每个对象都可以具有特定的属性,例如颜色、最大速度和重量。此外,这些对象可以执行制动和加速等动作。这些数据的逻辑组织以对象(汽车)为中心。让我们看一个Python中的具体示例。可以使用内置的str类包装字符串数据,不仅可以使用字符串对象传递字符串数据,还可以更改字符串的表示方式。看一个非常简单的例子。>>>#Createavariableofstrtype...hello="HelloPython!"...#Sendthedatatoafunctioncall...print(hello)...#Manipulatethestringdatawithstringmethods...hello_lower=hello.lower()...hello_upper=hello.upper()...打印(小写:,hello_lower)...打印(大写:,hello_upper)...HelloPython!小写:hellopython!大写:HELLOPYTHON!字符串数据处理2.DRY(不要重复)DRY(Don'tRepeatYourself)原则是每个程序员都应该实践的最基本的规则之一。其含义很简单:如果你在代码中看到任何重复,那么它就表明需要进行一些重构以最小化重复,或者如果可能,完全删除任何重复信号。以下示例演示了通过应用DRY原则重构某些代码:defdo_something(item):pass#Repetativeworkdo_something(item0)do_something(item1)do_something(item2)#ApplyDRYforitemin(item0,item1,item3):do_something(item)不要重复自己一系列字典、列表或元组来存储每个人的数据,你应该考虑使用自己的类来处理这些数据。这不仅使程序员自己的代码不易出错,而且有助于在代码的长期可维护性方面。3、PIP(PythonPackageInstallationandManagementTool)Python流行的最重要因素是它的开源特性,它带来了大量免费的Python软件包。根据维基百科,Python包索引(PyPI)中索引了超过235,000个软件包。我们可以使用pip工具从PyPI安装任何包。安装过程就像在命令或终端中输入一行代码一样简单。以下代码片段总结了一些常见用法。想了解更多pip工具的使用方法,可以访问其官网:https://pip.pypa.io/en/stable/user_guide/。#installlatestversionpipinstallpackage_name#installaparticularversionpipinstallpackage_name==version_number#touninstallapackagepipuninstallpackage_name#toshowinstalledpackagespiplist#toshowtheinformationaboutaparticularpackagepipshowpackage_name#toinstallalistofdependencies,suchastocloneavirtualenvironmentpipinstall-requirements.txtPIP使用示例4。LEGB(函数内部作用域,函数内部与内函数之间,全局作用域和内部作用域)LEGB规则是指Python中的变量查找顺序,如下图所示。具体来说,当解释器试图解析变量时,Python有四个级别的作用域——知道将什么值绑定到变量上。从内部作用域开始,它可以是函数或类。如果解释器找到该变量的相应绑定值,则它会停止查找并使用具有该特定值的变量。变量解析规则否则,它会查看更高的级别-函数内部和嵌套函数之间。此作用域仅存在于函数的嵌套结构中。当在另一个函数内部声明一个函数时,我们将内部函数称为内部函数,将外部函数称为外部函数。当解释器试图解析一个在内部函数作用域中使用的变量时,如果它不能在局部作用域中解析它,它将进入封闭作用域,即外部函数的局部作用域。如果它仍然无法解析封闭范围内的变量,它将转到全局范围。全局作用域通常在模块级别,通常是一个单独的Python文件。值得注意的是,当一个包被导入到当前文件中时,导入中的函数和类也会成为全局作用域的一部分。内置作用域是解释器启动时加载的函数、类和其他模块,从而使这些最基本的对象始终可用(例如打印和其他内置)。5.MRO(MethodResolutionOrder)方法解析顺序表示Python或编程语言通常如何解析方法或属性。与上面讨论的专注于解析变量的LEGB规则不同,MRO专注于对象以及如何解析它们的方法调用或对特定属性的访问。MRO主要在多重继承的上下文中讨论-从多个类(即超类)和/或多个继承级别(即子类)继承的类。因为子类和超类都共享一些具有潜在不同实现的公共方法,Python解释器需要一种机制来确定在特定调用中应该使用哪个方法或属性,而这正是MRO所关心的。>>>classX:...defbin(self):...print(f"bincalledinX")...classY(X):...defgo(self):...print(f"gocalledY")...classZ(X):...defgo(self):...print(f"gocalledZ")...classW(Y,Z):...defbin(self):...super()。bin()...print(f"bincalledW")...defbingo(self):...self.bin()...self.go()。.....w=W()...w.bingo()...bincalledinXbincalledWgocalledY方法解析顺序对于W类的一个实例(第22行),当我们调用bingo()方法时,这个方法在其own因为它是在类中定义的(第18-20行)。但是,此方法将进一步调用bin()和go()方法。以类似的方式,bin()方法在其自己的类中解析,但它调用超类的bin()方法,如第15行所示。但是在其直接超类(即Y和Z)中,bin()方法被实现,因此Python比超类的超类(比如X)高一级,其中bin()被实现并调用方法。值得注意的是,对于W的go()方法,它的两个超类都实现了这个方法,但是正如您所看到的,这只调用了Y类中使用的实现。因为定义类W的时候,继承顺序是Y和Z,这会让MRO遵循同样的顺序。与此相关,可以使用特殊方法__mro__找出特定类的MRO。此外,为了证明类继承顺序的重要性,我们创建了另一个类,其中类Z在类Y之前,这更改了类W_的MRO。>>>打印(WClassMRO:,W.__mro__)......类W_(Z,Y):...通过......打印(W_ClassMRO:,W_.__mro__)...WClassMRO:(,,,,)W_ClassMRO:(,,,,)特殊方法__mro__6。&7.EAFP(请求原谅比许可更容易)和LBYL(事前检查)EAFP(请求原谅比许可更容易)编码风格是Python赖以生存的。由于Python是一种动态编程语言,可以在运行时实现对已有实例对象、类甚至模块的实现和修改。因此,建议在假定特定属性或功能可用的情况下编写代码。换句话说,如果某些代码可能存在特定问题,让问题浮出水面并相应地解决它们。通过应用EAFP规则,如果我们想更进一步,我们可以简单地使用try...except语句编写特定代码来处理代码可能抛出的潜在异常。简而言之,目的是万一出现意外情况,事后处理。与EAFP原则相反,还有另一种编码风格叫做LBYL,代表“CheckBeforehand”。使用这种编码风格,程序员可以在运行某些代码之前排除所有可能的不良情况。因此,你可以在更多遵循LBYL原则的项目中看到更多的if语句。这种编码风格就是试图以特定方式防止所有问题。以下代码片段显示了使用带有LBYL的EAFP的可能场景。使用EAFP编码风格,您只需将代码和预期的可能异常包装在try...except语句中,而使用LBYL编码风格,您必须在划分之前使用内省和值检查来验证适用条件。如您所见,EAFP代码看起来更简洁并且不会创建嵌套结构。当然,如果你愿意,你也可以将LBYL应用到你的项目中,最终的项目仍然会以类似的方式运行。defwith_EAFP_divide_ten_by(number):try:print(f10dividedby{number}is{10/number}.)exceptZeroDivisionError:print("Youcantdividezero.")exceptTypeError:print("Youcanonlydivideanumber.")defwith_LBYL_divide_ten_by(number):ifisinstance(数字,int)orisinstance(number,float):ifnumber==0:print("Youcantdivididezero.")else:print(f10dividedby{number}is{10/number}.)else:print("Youcanonlydivideanumber.")EAFP与LBYL8.PEP(Python增强建议)上一节总体上讨论了编码风格,但最有影响力的Python编码风格指南之一是PEP8-Python增强建议#8,由BDFL(下面讨论)和其他几个人编写。由Python核心维护者编写。PEP涵盖了很多——所有与Python相关的内容,整个列表可以在官方网站(https://www.python.org/dev/peps/)上找到。此处列出了一些著名的文章:PEP8:Python代码风格指南PEP257:文档字符串约定PEP20:Python之禅PEP498:文字字符串插值PEP202:列表推导PEP405:Python虚拟环境9。独裁者)什么是BDFL?下面是来自维基百科的定义:BenevolentDictator(BDFL)是对少数开源软件开发领导者的称呼,通常是项目创始人,他们在社区中的争议或争论中保留最终决定权。尽管此定义通常适用于开源软件开发,但它最初在Python社区中用作指代Python编程语言的创建者GuidovanRossum(GvR)的一种方式。在担任BDFL职务20多年后,他于2018年卸任,您可以在维基百科上找到更多关于BDFL的故事。10.REPL("read-evaluate-output"loop)在我看来,REPL("read-evaluate-output"loop)是一个方便的工具,让学习Python变得如此简单。我们可以像使用命令或终端窗口一样简单地开始学习Python编码,我们可以使用pip工具安装软件包,如前所示。更重要的是,您可以立即编写第一行Python代码(比如可能应该是这行代码:print("HelloWorld!")),而无需编写其他编程语言可能需要的任何IDE工具。快速浏览一下它的样子:>>>print("HelloWorld!")HelloWorld!>>>3*26>>>type(5)REPL示例REPL工作流程非常简单-阅读代码,yes它会评估,将所有适用的评估结果打印到控制台,然后循环执行这三个步骤以探索Python的各种功能。REPL作为标准Python或其他常见Python开发工具(如ipython)的默认模式实现,也是著名的Python学习和编码工具——JupiterNotebook的基础。Python是由BDFLGvR创建的一种灵活而强大的OOP语言。通过PIP,我们可以很方便的管理Python包,通过REPL在控制台学习语言和各种包。在用Python编码时,我们希望遵循PEP8中概述的风格。其他重要的编码原则包括DRY和EAFP。如果你愿意,你也可以在你的编码中做一些LBYL。LEGB规则和MRO将帮助您了解如何解析变量、属性和函数以使您的代码按预期运行。这些Python“黑话”你学会了吗?本文转载自微信公众号“读芯”,可通过以下二维码关注。转载本文请联系核心阅读公众号。