python缩写词_如果连这10个Python缩写都不知道,那你一定是Python新手!

在本文中,我将告诉大家一些容易忽视的Python编程原理、规则和一些有趣的事实。

简介

对于许多开始学习编程的人来说,Python已经成为他们的首选。Python有非常直观的语法和支持动态类型的灵活性。此外,它是一种解释语言,这使得使用交互式控制台进行学习成为可能。基本上,我们只需使用命令行工具(如Mac中的Terminal)来启动Python学习,因为Python在macOS中是默认附带安装的。

我们在学习Python时,会逐渐熟悉它的数据结构、控制流、类、函数和其他基本内容。我发现了一件很有趣的事情,那就是Python中我们经常会遇到的各种首字母缩略词。在本文中,我将介绍十个这样的缩略词。其中有一些是通用的编程原理,还有一些是针对Python的特定编码。然而,每一种方法都有非常有趣的地方。

1. OOP(面向对象编程)

我们一定要知道的第一个缩写是OOP--面向对象编程,这也是Python编程设计的基础。我们知道编程本身是关于编码的,但是程序本身应该是关于数据的。我们的程序需要获取输入数据、过程数据和输出数据。注意,这里讨论的数据是一般意义上的数据,包括表格数据、字符串、用户操作(例如,单击按钮)、图像以及具有信息的任何形式的数据。我们代码的工作任务是处理各种形式的数据,并以所需的方式呈现它们。

为了完成我们的工作,我们需要能够处理这些数据的代码,而现代编程语言(包括Python)中的一种常见设计模式就是采用OOP范式。这个想法非常直观-我们用特定的对象包装数据。更具体地说,对象可以保存数据(例如,属性)并且可以操作数据(例如,方法)。例如,如果我们开发一个赛车游戏。我们可以构建汽车对象,并且每个对象都可以具有特定的属性,例如颜色,最大速度和重量。此外,这些对象还可以进行制动和加速等操作。这些数据的逻辑组织以对象(汽车)为中心。

让我们看一下Python中的特定示例。我们可以使用内置的 str 类包装字符串数据,这不仅允许我们使用string对象传递字符串数据,还可以改变字符串的表示方式。让我们在下面看到一个非常简单的示例。

>>> # 创建str类型的变量

... hello = "Hello Python!"

...

... # 将数据发送到函数调用

... print(hello)

...

... # 使用字符串方法操作字符串数据

... hello_lower = hello.lower()

... hello_upper = hello.upper()

... print('lowercased:', hello_lower)

... print('uppercased:', hello_upper)

...

Hello Python!

lowercased: hello python!

uppercased: HELLO PYTHON!

2.DRY(不要重复)

DRY原则(不要重复)是每个程序员应该实践的最基本的规则之一。这个规则很简单:如果你注意到你的代码中有任何重复,这是代码需要进行重构的信号,尽量减少重复代码,或者尽可能完全删除重复代码。下面的伪代码向你展示了通过应用DRY原则重构某些代码。

def do_something(item):

pass

# 重复性工作

do_something(item0)

do_something(item1)

do_something(item2)

# 应用DRY

for item in (item0, item1, item3):

do_something(item)

代码重构还有另外一个应用场景:你发现自己要处理的是一堆具有相同结构的数据。与其使用一系列字典、列表或元组来存储每个人的数据,不如考虑使用自己的类来处理这些数据。这不仅是为了减少代码出错的可能性,而且有利于长期的可维护性。

3. PIP(Python软件包安装程序)

Python的流行最重要的原因可能是它的开源特性,这就导致大量免费的Python程序包源源不断地开放出来。根据Wikipedia的介绍,在Python软件包索引(PyPI)中索引了235,000多个软件包。 我们可以使用 pip 工具从 PyPI 安装任何软件包。 该安装过程非常轻松,只需在命令或终端中使用一行代码即可。 以下代码段总结了一些常用用法。

# 安装最新版本

pip install package_name

# 安装特定版本

pip install package_name==version_number

# 卸载软件包

pip uninstall package_name

# 显示已安装的软件包

pip list

# 显示有关特定包的信息

pip show package_name

#安装依赖项列表,例如克隆虚拟环境

pip install -r requirements.txt

4. LEGB(本地,封闭,全局和内置)

LEGB规则引用 Python 中的变量查找顺序,如下图所示。 具体来说,当解释程序尝试解析变量时,Python 具有四层作用域--了解将哪些值绑定到变量。 首先从本地范围开始,该范围可以是函数或类。 如果解释器找到了变量的相应绑定值,它将停止查找并将变量与该特定值一起使用。可变分辨率规则

否则,它将在更高的级别上查找它—封闭范围。封闭范围只存在于函数的嵌套结构中。具体地说,当一个函数在另一个函数中声明时,我们称内部函数为内部函数,而外部函数称为外部函数。当解释器试图解析在内部函数的作用域内使用的变量时,如果不能在局部范围内解析,它将转到封闭的作用域,即外部函数的局部作用域。

如果它仍然无法解析封闭范围内的变量,它将转到全局范围。全局范围通常是模块级的,通常是一个独立的 Python 文件。值得注意的是,当我们将包导入当前文件时,导入的函数和类也将成为全局范围的一部分。内置范围是指当启动解释器时加载的函数、类和其他模块,以使这些最基本的对象始终可用(例如打印和其他内置函数)。

5. MRO(方法解析顺序)

方法解析顺序表示 Python 或编程语言通常如何解析方法或属性。 与上面讨论的 LEGB 规则关注的是解决变量不同,MRO关注的是对象以及对象的方法调用或特定属性的获取方式。MRO 主要是在多继承的上下文中讨论的--从多个类(即超类)和/或多层继承继承的类(即子类)。因为子类和超类都共享某些实现方法可能不同的通用方法,所以 Python 解释器需要一种机制来确定在特定调用中应使用哪种方法或属性,而这正是MRO的职责。下面的代码段显示了一个示意性示例。

>>> class X:

... def bin(self):

... print(f"bin called in X")

...

... class Y(X):

... def go(self):

... print(f"go called Y")

...

... class Z(X):

... def go(self):

... print(f"go called Z")

...

... class W(Y, Z):

... def bin(self):

... super().bin()

... print(f"bin called W")

...

... def bingo(self):

... self.bin()

... self.go()

...

... w = W()

... w.bingo()

...

bin called in X

bin called W

go called Y

对于W类的实例(第22行),当我们调用 bingo()方法时,此方法将在其自己的类中解析,因为它是在类中定义的(第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。

>>> print('W Class MRO:', W.__mro__)

...

... class W_(Z, Y):

... pass

...

... print('W_ Class MRO:', W_.__mro__)

...

W Class MRO: (, , , , )

W_ Class MRO: (, , , , )

6.&7.EAFP(请求原谅比请求许可更容易)和LBYL(三思而后行)

EAFP(请求原谅比请求许可更容易)编码风格正是 Python 蓬勃发展的方向。因为 Python 是一种动态编程语言,所以在运行时,实现以及对现有实例对象、类甚至模块的修改都是可能的。因此,建议大家在假定特定属性或功能可用的情况下编写代码。换言之,如果某些代码可能存在特定的问题,那么就让问题浮出水面并相应地解决它们。通过应用 EAFP 规则,如果我们想更进一步,我们可以简单地使用 try…except 语句编写特定的代码来处理代码可能引发的潜在异常。基本上,我们的想法是发生意外的事情,我们会事后处理。

与 EAFP 原则相反,还有另一种编码样式称为 LBYL,它代表“跨越式”。使用这种编码方式,程序员应该在某些代码可以运行之前排除所有可能的不希望出现的情况。因此,大家可以在项目中看到更多遵循 LBYL 原则的 if 语句。这种编码方式基本上可以用特别的方式来防止任何问题。

下面的代码片段向大家展示了一个使用 EAFP 与 LBYL 的可能场景。对于 EAFP 编码样式,我们只需在 try…except 语句中包装代码和预期可能的异常,而对于 LBYL 编码样式,我们必须在划分之前使用自省方法和值检查来验证适用的条件。如你所见,EAFP 代码看起来更加整洁,而且没有创建嵌套结构。当然,如果你愿意,也可以在项目中应用 LBYL,而且不会改变项目最终的工作方式。

def with_EAFP_divide_ten_by(number):

try:

print(f'10 divided by {number} is {10 / number}.')

except ZeroDivisionError:

print("You can't divide zero.")

except TypeError:

print("You can only divide a number.")

def with_LBYL_divide_ten_by(number):

if isinstance(number, int) or isinstance(number, float):

if number == 0:

print("You can't divide zero.")

else:

print(f'10 divided by {number} is {10 / number}.')

else:

print("You can only divide a number.")

8. PEP(Python增强建议)

在上一节中,我们讨论了编码风格。 但是,最具影响力的Python编码风格指南之一是 PEP 8--Python增强建议#8,由 BDFL(将在下面讨论)和其他几个 Python 核心维护者共同编写。PEP涵盖了所有与 Python 相关的内容。 大家可以在官方网站上找到整个列表。 以下为一些著名的文章:

9.BDFL(仁慈的生命独裁者)

什么是BDFL?当然,标题已经告诉了你它代表什么,但它实际上意味着什么?

在维基百科上,它的定义是:仁慈的生命独裁者(BDFL)是给少数开源软件开发领导人的称号,他们通常是在社区内部的争议或争论中保留最终发言权的项目创始人。

尽管这个定义通常适用于开源软件开发,但它首先在 Python 社区中使用,作为对 Guido van Rossum(GvR)的引用,GvR 是 Python 编程语言的创建者。在担任 BDFL 职位 20 多年后,于 2018 年卸任。

10. REPL(读--评估--打印循环)

在我看来,REPL(读取-评估-打印循环)是让我们能够这么轻松学习Python的便捷工具。 正如我们所知道的,我们甚至可以开始像使用命令或终端窗口一样简单地学习Python编程。 你可以使用pip工具如前所示的方法来安装任何软件包。 更重要的是,我们可以立即编写第一行Python代码,不需要使用其他编程语言配置任何 IDE 工具。

>>> print("Hello World!")

Hello World!

>>> 3 * 2

6

>>> type(5)

REPL工作流非常简单——在控制台中读取代码、对其进行求值并打印出任何适用的结果,然后反复重复这三个步骤,用于探索 Python 的各种特性。REPL 是在标准 Python 或其他常见 Python 开发工具(如ipython)中作为默认模式实现的,ipython 是著名的 Python 学习和编码工具 Jupiter Notebook 的基础。

结论

Python是一种灵活而强大的 OOP 语言,由 BDFL GvR 创建。 利用 PIP 命令,我们可以轻松地管理 Python 软件包,并通过 REPL 在控制台中学习语言和各种软件包。 当我们使用 Python 进行编程时,必须遵循 PEP 8 概述中的样式。其他重要的编码原理包括 DRY 和 EAFP 。 如果你愿意,也可以在编码中做一些LBYL。 LEGB 规则和 MRO 能够帮助你了解如何解析变量、属性和函数,让你的代码按照自己的预期来运行。

--END--

喜欢本文的同学记得转发+点赞~

更多内容,欢迎大家关注我们的公众号:为AI呐喊(weainahan)

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

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

相关文章

单片机控制三相异步电动机正反转c语言程序,请用PLC控制一台普通三相异步电动机的正反转控制,设计其控制程序梯形图及主电路...

PLC的编程方法及步骤。总的步骤主要有三步:一、根据电路图选择电器元件及PLC的型号,其中包括确定PLC的输入输出点位、确定PLC的输出类型,也需考虑某些功能是否能扩展、价格等;二、设计好PLC控制的外围元器件的原理图。这里面包括有…

0x80070003系统找不到指定路径_Win7系统中gpedit.msc找不到应该如何解决?

Win7x系统gpedit.msc找不到怎么办?最近有用户反映,电脑当中的gpedit.msc找不到了,gpedit.msc就是我们的策略组,对于我们的电脑来说是非常重要的,那么gpedit.msc找不到应该如何解决呢?接下来就为大家分享win…

c语言回文数递归,c语言问题~~~回文数!!急,拜托高人指点!!

满意答案wyhjjq12014.01.27采纳率:53% 等级:12已帮助:10413人添加上满足你补充要求的C程序:#includeint palindrome(unsigned int x){unsigned int y;unsigned int s0;yx;while(y>0){ss*10y%10;yy/10;}if(sx)return 1;elsereturn 0;}vo…

jboss架构_检查Red Hat JBoss BRMS部署架构的规则和事件(第一部分)

jboss架构(文章来宾与北美红帽公司高级中间件顾问约翰赫洛克 ( John Hurlocker)合着) 在这周的技巧中,我们将放慢速度,并仔细研究可能的Red Hat JBoss BRMS部署体系结构。 在谈论部署体系结构时&#xf…

snvr client怎么使用_TCGA官方工具gdc-client.exe的安装及使用

在TCGA数据下载过程中,会提示使用Download a manifest for use with theGDC Data Transfer Tool​gdc.cancer.gov实现过程:1.下载gdc-client的压缩文件;gdc-client_v1.4.0_Windows_x64.zip2.将上述压缩文件copy到一个英文文件名称的文件夹内&…

c语言 源文件未编译,源文件未编译什么意思

语音内容:大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答。源文件未编译,即在运行前要对源代码进行编译链接,然后才能运行。编译利用编译程序从源语言编写的源程序产生目标程序的过程,…

JDK 14中的常规,安全和确定性外部内存访问

在“ JDK 14 Rampdown:Build 27 ”一文中,我总结了JDK 14 Early Access Build #27中新增的许多针对JDK 14的功能。 已经存在另一种JDK 14 Early Access Build,并且此[ Build 28(2019/12/18) ]包括一个特别有…

android 获取当前网络,Android 获取当前网络连接的类型信息

获取当前网络连接的类型信息public static int getConnectedType(Context context) {if (context ! null) {ConnectivityManager mConnectivityManager (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo mNetworkInfo mConnectivi…

js时间选择器_Vuestic Admin一款免费与美妙基于Vue.js开发的管理模板

Vuestic Admin 简介vuestic admin是一款流行,免费与美妙的基于Vue.js开发出来的管理模板,包括38以上个定制用户界面组件,由Epicmax开发,由Vasili Savitski设计。目前github star 6K, 最新版本2.0.0, MIT许可协议。为什么选择Vuestic AdminVue…

linux内核之旅ppt_微软Windows 10防病毒现已可用Linux上

微软在推出预览版应用程序几个月后,刚刚宣布了适用于Linux的Microsoft Defender ATP的全面可用性。“ Microsoft Defender ATP将Linux添加到现有的本机支持平台的选择中,对我们所有客户而言都是重要的时刻。它使Microsoft Defender安全中心成为真正的统一…

android 地图放大缩小按钮,Android 百度最新地图隐藏 放大缩小按钮、指南针、缩放比例的方法...

相信很多人在做地图是都会遇到如要隐藏这3中按钮的困扰,那么该如何实现呢?我就不多说,代码很少,一看就能明白下面接是具体实现代码// 隐藏缩放控件int childCount mMapView.getChildCount();View zoom null;for (int i 0; i &l…

Spring再次涵盖了您:继续进行消费者驱动的消息传递合同测试

在上一篇文章中,我们已经开始讨论基于消息的通信中的消费者驱动的合同测试 。 在今天的帖子中,我们将在测试工具箱中包含另一个工具,但是在此之前,让我对显微镜下的系统进行快速回顾。 它有两项服务, 订单服务和货运服…

Android两个tab吸顶,Android scrollView和viewpager嵌套 指示器吸顶 根据viewpager每

Android scrollView和viewpager嵌套 指示器吸顶 根据viewpager每Android scrollView和viewpager嵌套 指示器吸顶 根据viewpager每个页面的内容适配高度这几天 朋友问我了个问题 有个特别的需求 页面如下就是当viewpager里面的当前页面内容足够多的时候 要去能滑上去 并且指示…

html5input输入框设置无边框_芯片充电两大改变,无看点的iPad8,上手体验发现并不简单!...

前不久,苹果召开了秋季新品发布会,但与以往不同的是,往年本该成为“配角”的iPad,没想到此次成为了主角之一,面对着外观不变仅升级芯片新发布的iPad 8,大家好像没有过多的激情,”旧瓶装新酒“的…

android listview 优化,Android ListView、GridView等性能优化

1.采用ViewHolder并避免在getView中执行耗时操作Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder null;if (convertView null) {convertView mInflater.inflate(R.layout.image_list_item,parent, false);holder new V…

python怎么输入一个数字并调用_Python求输入一个整数,然后输出这个整数的所有数字:个位数字在前,高位数字在后,中间使用空格字符连接...

附件程序enumeratenumber.py使用数字整除的方式实现了该功能,使用字符串实现该功能的代码没有完成。请仔细阅读代码之后,写出完整代码。[附加]enumeratenumber.py实现的输出与输入的... 附件程序enumeratenumber.py使用数字整除的方式实现了该功能&#…

android系统三防机,这才是真正给老人设计的智能手机:三防+安卓系统+超大音量,AGM H2...

原标题:这才是真正给老人设计的智能手机:三防安卓系统超大音量,AGM H2在这个互联网时代,很多智能手机厂商,都是在硬件配置上面进行比拼,包括但是不限于处理器的升级,摄像头的升级,散…

spring aop 注释_使用Spring AOP,自定义注释和反射为您的应用程序审核基础结构

spring aop 注释下一篇文章将演示如何使用Spring AOP和注释编写简单的审计。 审核机制将是干净,高效且易于维护的(和Kewwl!)。 我将在用户管理系统上演示我的示例(假设您具有反射和AOP的一般知识)。 我们…

springboot 打包_springboot打包-体积太大怎么办

springcloud项目打包动辄100多兆,在文件上传部署的时候非常耗时,多数情况下是毫无意义的耗时,因为依赖包很多情况下不需要改变,只是修改了业务逻辑,那么每次打包上传的时间都浪费了,尤其在开发环境下&#…

jsp文件能转换html吗,html怎么转换成jsp

众所周知,每一个JSP页面都会被Web容器编译成一个Java类,供web容器调用,并且生成HTML叶面回馈给用户。而了解其中的变异方法和规则,对我们学习JSP是非常有好处的,可以说学习好了这个编译原理,就已经学习好了…