简介

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

很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:1097524789

我们在学习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: (<class '__main__.W'>, <class '__main__.Y'>, <class '__main__.Z'>, <class '__main__.X'>, <class 'object'>) 
W_ Class MRO: (<class '__main__.W_'>, <class '__main__.Z'>, <class '__main__.Y'>, <class '__main__.X'>, <class 'object'>) 

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 相关的内容。 大家可以在官方网站上找到整个列表。 以下为一些著名的文章:

PEP 8:Python代码样式指南(https://www.python.org/dev/peps/pep-0008/)

PEP 257:文档字符串惯例(https://www.python.org/dev/peps/pep-0257/)

PEP 20:Python之禅(https://www.python.org/dev/peps/pep-0257/)

PEP 498:文字字符串插值(https://www.python.org/dev/peps/pep-0498/)

PEP 202:列表理解(https://www.python.org/dev/peps/pep-0202/)

PEP 405:Python虚拟环境(https://www.python.org/dev/peps/pep-0405/)

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 

>>> type(5) 
<class 'int'> 

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 能够帮助你了解如何解析变量、属性和函数,让你的代码按照自己的预期来运行。

如果连这10个Python缩写都不知道,那你一定是Python新手的更多相关文章

  1. 不吹不擂,你想要的Python面试都在这里了【315+道题】

    写在前面 近日恰逢老男孩全栈8期毕业季,课程后期大家“期待+苦逼”的时刻莫过于每天早上内容回顾和面试题问答部分[临近毕业每天课前用40-60分钟对之前内容回顾.提问和补充,专挑班里不爱说话就的同学回答 ...

  2. 你想要的Python面试都在这里了【315+道题】

    写在前面 近日恰逢学生临近毕业,课程后期大家"期待+苦逼"的时刻莫过于每天早上内容回顾和面试题问答部分[临近毕业每天课前用40-60分钟对之前内容回顾.提问和补充,专挑班里不爱说话 ...

  3. 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理

    服务器文档下载zip格式   刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...

  4. 7个现在就该学习Python 的理由【80%的人都不知道】

    Python 是一门更注重可读性和效率的语言,尤其是相较于 Java,PHP 以及 C++ 这样的语言,它的这两个优势让其在开发者中大受欢迎. 诚然,它有点老了,但仍是 80 后啊 —— 至少没有 C ...

  5. Xilinx的DocNav文件导航中的文档开头字母缩写都是什么意思?

    在安装Xilinx的开发软件后都会附带安装一个用于查阅Xilinx技术文档的文件导航工具DocNav. 在DocNav中可以找到几乎所有对我们开发Xilinx FPGA有用的技术文档,其中的文档数量更 ...

  6. 99%的Python用户都不知道的f-string隐秘技巧

    f-string想必很多Python用户都基础性的使用过,作为Python3.6版本开始引入的特性,通过它我们可以更加方便地向字符串中嵌入自定义内容,但f-string真正蕴含的功能远比大多数用户知道 ...

  7. 五款实用免费的Python机器学习集成开发环境(5 free Python IDE for Machine Learning)(图文详解)

    前言 集成开发环境(IDE)是提供给程序员和开发者的一种基本应用,用来编写和测试软件.一般而言,IDE 由一个编辑器,一个编译器(或称之为解释器),和一个调试器组成,通常能够通过 GUI(图形界面)来 ...

  8. 年薪20万Python工程师进阶(7):Python资源大全,让你相见恨晚的Python库

    我是 环境管理 管理 Python 版本和环境的工具 pyenv – 简单的 Python 版本管理工具. Vex – 可以在虚拟环境中执行命令. virtualenv – 创建独立 Python 环 ...

  9. Python之路【第一篇】:Python基础1

    本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼? 数据类型初识 数据运算 表达式if ...else语 ...

随机推荐

  1. Scala 基础(三):Scala语言快速开发入门

    1.Scala执行流程分析 2.Scala程序开发注意事项(重点) Scala源文件以 “.scala" 为扩展名. Scala程序的执行入口是main()函数. Scala语言严格区分大小 ...

  2. 数据可视化之分析篇(十)Power BI应用:如何计算在职员工数量?

    ​https://zhuanlan.zhihu.com/p/128652582 经常碰到的一类问题是,如何根据起止日期来计算某个时间点的数量,比如: 已知合同的生效日期和到期日期,特定日期的有效合同有 ...

  3. 010.Nginx正反代理

    一 Nginx代理 1.1 Nginx代理概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器.同时也是一个IMAP.POP3.SMTP代理服务器.nginx可以作为一个HTT ...

  4. 由一个计数器出发:关于vue使用独立js文件的问题

    最近有个vue项目要用ztree. 然后,我想把一些逻辑提出来作为公共的方法,放到独立的js文件里. ztreeTool.js import $ from 'jquery' export defaul ...

  5. 【Nginx】如何使用Nginx实现MySQL数据库的负载均衡?看完我懂了!!

    写在前面 Nginx能够实现HTTP.HTTPS协议的负载均衡,也能够实现TCP协议的负载均衡.那么,问题来了,可不可以通过Nginx实现MySQL数据库的负载均衡呢?答案是:可以.接下来,就让我们一 ...

  6. abp vnext 开发快速入门 2 实现基本增删改查

    上篇说了abp vnext 的大体框架结构,本篇说下如何实现基础的增删改查.实现增删改查有以下几个步骤: 1.配置数据库连接 2.领域层(Domain)创建实体,Ef core 层配置Dbset( 用 ...

  7. Java实现一个简单的文件上传案例

    Java实现一个简单的文件上传案例 实现流程: 1.客户端从硬盘读取文件数据到程序中 2.客户端输出流,写出文件到服务端 3.服务端输出流,读取文件数据到服务端中 4.输出流,写出文件数据到服务器硬盘 ...

  8. vue学习(四) v-on:事件绑定

    //html <div id="app"> <input type="button" value="ok" v-bind: ...

  9. 并发系列(二)——FutureTask类源码简析

    背景 本文基于JDK 11,主要介绍FutureTask类中的run().get()和cancel() 方法,没有过多解析相应interface中的注释,但阅读源码时建议先阅读注释,明白方法的主要的功 ...

  10. 郭神的关于git软件和http的文章

    https://blog.csdn.net/guolin_blog/article/details/17482095