Python-基础-常用术语对照表

qitong 2019-11-20


下面内容主要摘抄自python 官网,https://docs.python.org/3.7/glossary.html#glossary,部分内容有删减。

2to3

一个将 python 2.x 代码转换为 python 3.x 代码的工具,能够处理大部分通过解析源码并遍历解析树可检测到的不兼容问题。

2to3 包含在标准库中,模块名为 lib2to3;并提供一个独立入口点 Tools/scripts/2to3。参见 2to3 - 自动将 python 2 代码转为 python 3 代码。

因为官方将在2020年不再支持 python 2.x, 在遇到没有python 2.X 版本 的code 的时候,可以尝试使用这个工具将代码转化成Python 的版本。

abstract base class -- 抽象基类

抽象基类简称 ABC,是对 duck-typing 的补充,它提供了一种定义接口的新方式,相比之下其他技巧例如 hasattr() 显得过于笨拙或有微妙错误(例如使用 魔术方法)。ABC 引入了虚拟子类,这种类并非继承自其他类,但却仍能被 isinstance() 和 issubclass() 所认可;详见 abc 模块文档。python 自带许多内置的 ABC 用于实现数据结构(在 collections.abc 模块中)、数字(在 numbers 模块中)、流(在 io 模块中)、导入查找器和加载器(在 importlib.abc 模块中)。你可以使用 abc 模块来创建自己的 ABC。

argument -- 参数

在调用函数时传给 function (或 method )的值。参数分为两种:

  • 关键字参数: 在函数调用中前面带有标识符(例如 name=)或者作为包含在前面带有 ** 的字典里的值传入。
    举例来说,3 和 5 在以下对 complex() 的调用中均属于关键字参数:

    complex(real=3, imag=5)
    complex(**{'real': 3, 'imag': 5})
  • 位置参数: 不属于关键字参数的参数。位置参数可出现于参数列表的开头以及/或者作为前面带有 * 的 iterable 里的元素被传入。
    举例来说,3 和 5 在以下调用中均属于位置参数:

    complex(3, 5)
    complex(*(3, 5))

参数会被赋值给函数体中对应的局部变量。有关赋值规则参见 调用 一节。根据语法,任何表达式都可用来表示一个参数;最终算出的值会被赋给对应的局部变量。

另参见 parameter 术语表条目,常见问题中 参数与形参的区别 以及 PEP 362。

asynchronous context manager -- 异步上下文管理器

此种对象通过定义 __aenter__() 和 __aexit__() 方法来对 async with 语句中的环境进行控制。由 PEP 492 引入。

asynchronous generator -- 异步生成器

返回值为 asynchronous generator iterator 的函数。它与使用 async def 定义的协程函数很相似,不同之处在于它包含 yield 表达式以产生一系列可在 async for 循环中使用的值。

此术语通常是指异步生成器函数,但在某些情况下则可能是指 异步生成器迭代器。如果需要清楚表达具体含义,请使用全称以避免歧义。

一个异步生成器函数可能包含 await 表达式或者 async for 以及 async with 语句。

attribute -- 属性

关联到一个对象的值,可以使用点号表达式通过其名称来引用。例如,如果一个对象 o 具有一个属性 a,就可以用 o.a 来引用它。

BDFL

“终身仁慈独裁者”的英文缩写,即 Guido van Rossum,python 的创造者。

binary file -- 二进制文件

file object 能够读写 字节类对象。二进制文件的例子包括以二进制模式('rb', 'wb' or 'rb+')打开的文件、sys.stdin.buffer、sys.stdout.buffer 以及 io.BytesIO 和 gzip.GzipFile 的实例。

另请参见 text file 了解能够读写 str 对象的文件对象。

bytes-like object -- 字节类对象

支持 缓冲协议 并且能导出 C-contiguous 缓冲的对象。这包括所有 bytes、bytearray 和 array.array 对象,以及许多普通 memoryview 对象。字节类对象可在多种二进制数据操作中使用;这些操作包括压缩、保存为二进制文件以及通过套接字发送等。

某些操作需要可变的二进制数据。这种对象在文档中常被称为“可读写字节类对象”。可变缓冲对象的例子包括 bytearray 以及 bytearray 的 memoryview。其他操作要求二进制数据存放于不可变对象 ("只读字节类对象");这种对象的例子包括 bytes 以及 bytes 对象的 memoryview。

bytecode -- 字节码

python 源代码会被编译为字节码,即 Cpython 解释器中表示 python 程序的内部代码。字节码还会缓存在 .pyc 文件中,这样第二次执行同一文件时速度更快(可以免去将源码重新编译为字节码)。这种 "中间语言" 运行在根据字节码执行相应机器码的 virtual machine 之上。请注意不同 python 虚拟机上的字节码不一定通用,也不一定能在不同 python 版本上兼容。

class -- 类

用来创建用户定义对象的模板。类定义通常包含对该类的实例进行操作的方法定义。

class variable -- 类变量

在类中定义的变量,并且仅限在类的层级上修改 (而不是在类的实例中修改)。

coercion -- 强制类型转换

在包含两个相同类型参数的操作中,一种类型的实例隐式地转换为另一种类型。例如,int(3.15) 是将原浮点数转换为整型数 3,但在 3+4.5 中,参数的类型不一致(一个是 int, 一个是 float),两者必须转换为相同类型才能相加,否则将引发 TypeError。如果没有强制类型转换机制,程序员必须将所有可兼容参数归一化为相同类型,例如要写成 float(3)+4.5 而不是 3+4.5。

coroutine -- 协程
协程是子例程的更一般形式。子例程可以在某一点进入并在另一点退出。协程则可以在许多不同的点上进入、退出和恢复。它们可通过 async def 语句来实现。参见 PEP 492。

coroutine function -- 协程函数
返回一个 coroutine 对象的函数。协程函数可通过 async def 语句来定义,并可能包含 await、async for 和 async with 关键字。这些特性是由 PEP 492 引入的。

CPython

python 编程语言的规范实现,在 python.org 上发布。CPython 一词用于在必要时将此实现与其他实现例如 JythonIronPython 相区别。

decorator -- 装饰器

返回值为另一个函数的函数,通常使用 @wrapper 语法形式来进行函数变换。 装饰器的常见例子包括 classmethod() 和 staticmethod()。

装饰器语法只是一种语法糖,以下两个函数定义在语义上完全等价:

def f(...):
    ...
f = staticmethod(f)

@staticmethod
def f(...):
    ...

同的样概念也适用于类,但通常较少这样使用。有关装饰器的详情可参见 函数定义 和 类定义 的文档。

dictionary -- 字典

一个关联数组,其中的任意键都映射到相应的值。键可以是任何具有 __hash__() 和 __eq__() 方法的对象。在 Perl 语言中称为 hash。

EAFP

“求原谅比求许可更容易”的英文缩写。这种 python 常用代码编写风格会假定所需的键或属性存在,并在假定错误时捕获异常。这种简洁快速风格的特点就是大量运用 try 和 except 语句。于其相对的则是所谓 LBYL 风格,常见于 C 等许多其他语言。

expression -- 表达式

可以求出某个值的语法单元。 换句话说,一个表达式就是表达元素例如字面值、名称、属性访问、运算符或函数调用的汇总,它们最终都会返回一个值。 与许多其他语言不同,并非所有语言构件都是表达式。 还存在不能被用作表达式的 statement,例如 while。 赋值也是属于语句而非表达式。

extension module -- 扩展模块
以 C 或 C++ 编写的模块,使用 python 的 C API 来与语言核心以及用户代码进行交互。

file object -- 文件对象

对外提供面向文件 API 以使用下层资源的对象(带有 read() 或 write() 这样的方法)。
根据其创建方式的不同,文件对象可以处理对真实磁盘文件,对其他类型存储,或是对通讯设备的访问(例如标准输入/输出、内存缓冲区、套接字、管道等等)。
文件对象也被称为 文件类对象

实际上共有三种类别的文件对象: 原始二进制文件, 缓冲二进制文件 以及 文本文件。它们的接口定义均在 io 模块中。
创建文件对象的规范方式是使用 open() 函数。

floor division -- 向下取整除法

向下舍入到最接近的整数的数学除法。向下取整除法的运算符是 // 。例如,表达式 11 // 4 的计算结果是 2 ,而与之相反的是浮点数的真正除法返回 2.75 。注意 (-11) // 4 会返回 -3 因为这是 -2.75 向下 舍入得到的结果。见 PEP 238 。

function -- 函数

可以向调用者返回某个值的一组语句。还可以向其传入零个或多个 参数 并在函数体执行中被使用。另见 parameter, method 和 函数定义 等节。

future

一种伪模块,可被程序员用来启用与当前解释器不兼容的新语言特性。

通过导入 future 模块并对其中的变量求值,你可以查看新特性何时首次加入语言以及何时成为默认:

>>>
>>> import __future__
>>> __future__.division
_Feature((2, 2, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 8192)

garbage collection -- 垃圾回收

释放不再被使用的内存空间的过程。
python 是通过引用计数和一个能够检测和打破循环引用的循环垃圾回收器来执行垃圾回收的。
可以使用 gc 模块来控制垃圾回收器。

global interpreter lock -- 全局解释器锁

Cpython 解释器所采用的一种机制,它确保同一时刻只有一个线程在执行 python bytecode。此机制通过设置对象模型(包括 dict 等重要内置类型)针对并发访问的隐式安全简化了 Cpython 实现。给整个解释器加锁使得解释器多线程运行更方便,其代价则是牺牲了在多处理器上的并行性。

不过,某些标准库或第三方库的扩展模块被设计为在执行计算密集型任务如压缩或哈希时释放 GIL。此外,在执行 I/O 操作时也总是会释放 GIL。

创建一个(以更精细粒度来锁定共享数据的)“自由线程”解释器的努力从未获得成功,因为这会牺牲在普通单处理器情况下的性能。据信克服这种性能问题的措施将导致实现变得更复杂,从而更难以维护。

IDLE

python 的 IDE,“集成开发与学习环境”的英文缩写。是 python 标准发行版附带的基本编程器和解释器环境。

import path -- 导入路径

由多个位置(或 路径条目)组成的列表,会被模块的 path based finder 用来查找导入目标。在导入时,此位置列表通常来自 sys.path,但对次级包来说也可能来自上级包的 path 属性。

iterable -- 可迭代对象

能够逐一返回其成员项的对象。可迭代对象的例子包括所有序列类型(例如 list、str 和 tuple)以及某些非序列类型例如 dict、文件对象 以及定义了 __iter__() 方法或是实现了 Sequence 语义的 __getitem__() 方法的任意自定义类对象。

可迭代对象被可用于 for 循环以及许多其他需要一个序列的地方(zip()、map() ...)。当一个可迭代对象作为参数传给内置函数 iter() 时,它会返回该对象的迭代器。这种迭代器适用于对值集合的一次性遍历。在使用可迭代对象时,你通常不需要调用 iter() 或者自己处理迭代器对象。for 语句会为你自动处理那些操作,创建一个临时的未命名变量用来在循环期间保存迭代器。参见 iterator、sequence 以及 generator。

iterator -- 迭代器

用来表示一连串数据流的对象。重复调用迭代器的 __next__() 方法(或将其传给内置函数 next())将逐个返回流中的项。当没有数据可用时则将引发 StopIteration 异常。到这时迭代器对象中的数据项已耗尽,继续调用其 __next__() 方法只会再次引发 StopIteration 异常。迭代器必须具有 __iter__() 方法用来返回该迭代器对象自身,因此迭代器必定也是可迭代对象,可被用于其他可迭代对象适用的大部分场合。一个显著的例外是那些会多次重复访问迭代项的代码。容器对象(例如 list)在你每次向其传入 iter() 函数或是在 for 循环中使用它时都会产生一个新的迭代器。如果在此情况下你尝试用迭代器则会返回在之前迭代过程中被耗尽的同一迭代器对象,使其看起来就像是一个空容器。

lambda

由一个单独 expression 构成的匿名内联函数,表达式会在调用时被求值。
创建 lambda 函数的句法为 lambda [parameters]: expression

list -- 列表

python 内置的一种 sequence。虽然名为列表,但更类似于其他语言中的数组而非链接列表,因为访问元素的时间复杂度为 O(1)。

mapping -- 映射

一种支持任意键查找并实现了 Mapping 或 MutableMapping 抽象基类 中所规定方法的容器对象。
此类对象的例子包括 dict, collections.defaultdict, collections.OrderedDict 以及 collections.Counter

metaclass -- 元类

一种用于创建类的类。类定义包含类名、类字典和基类列表。元类负责接受上述三个参数并创建相应的类。大部分面向对象的编程语言都会提供一个默认实现。python 的特别之处在于可以创建自定义元类。大部分用户永远不需要这个工具,但当需要出现时,元类可提供强大而优雅的解决方案。它们已被用于记录属性访问日志、添加线程安全性、跟踪对象创建、实现单例,以及其他许多任务。

method -- 方法

在类内部定义的函数。如果作为该类的实例的一个属性来调用,方法将会获取实例对象作为其第一个 argument (通常命名为 self)。参见 function

module -- 模块

此对象是 python 代码的一种组织单位。各模块具有独立的命名空间,可包含任意 python 对象。模块可通过 importing 操作被加载到 python 中。

另见 package。

namespace -- 命名空间

命名空间是存放变量的场所。命名空间有局部、全局和内置的,还有对象中的嵌套命名空间(在方法之内)。
命名空间通过防止命名冲突来支持模块化。例如,函数 builtins.openos.open() 可通过各自的命名空间来区分。命名空间还通过明确哪个模块实现那个函数来帮助提高可读性和可维护性。
例如,`random.seed() 或 itertools.islice()` 这种写法明确了这些函数是由 random 与 itertools 模块分别实现的。

namespace package -- 命名空间包

PEP 420 所引入的一种仅被用作子包的容器的 package,命名空间包可以没有实体表示物,其描述方式与 regular package 不同,因为它们没有 __init__.py 文件。

另可参见 module。

object -- 对象

任何具有状态(属性或值)以及预定义行为(方法)的数据。object 也是任何 new-style class 的最顶层基类名。

package -- 包

一种可包含子模块或递归地包含子包的 python module。从技术上说,包是带有 path 属性的 python 模块。

另参见 regular package 和 namespace package。

parameter -- 形参

function (或方法)定义中的命名实体,它指定函数可以接受的一个 argument (或在某些情况下,多个实参)。有五种形参:

  • positional-or-keyword:位置或关键字,指定一个可以作为 位置参数 传入也可以作为 关键字参数 传入的实参。
    这是默认的形参类型,例如下面的 foo 和 bar:

    def func(foo, bar=None): ...
  • positional-only:仅限位置,指定一个只能按位置传入的参数。python 中没有定义仅限位置形参的语法。但是一些内置函数有仅限位置形参(比如 abs())。
  • keyword-only:仅限关键字,指定一个只能通过关键字传入的参数。

仅限关键字形参可通过在函数定义的形参列表中包含单个可变位置形参或者在多个可变位置形参之前放一个 * 来定义,例如下面的 kw_only1 和 kw_only2:

def func(arg, *, kw_only1, kw_only2): ...
  • var-positional:可变位置,指定可以提供由一个任意数量的位置参数构成的序列(附加在其他形参已接受的位置参数之后)。这种形参可通过在形参名称前加缀 * 来定义。

例如下面的 args:

def func(*args, **kwargs): ...
  • var-keyword:可变关键字,指定可以提供任意数量的关键字参数(附加在其他形参已接受的关键字参数之后)。这种形参可通过在形参名称前加缀 ** 来定义,例如上面的 kwargs。

形参可以同时指定可选和必选参数,也可以为某些可选参数指定默认值。

path entry -- 路径入口

import path 中的一个单独位置,会被 path based finder 用来查找要导入的模块。

PEP

python 增强提议”的英文缩写。
一个 PEP 就是一份设计文档,用来向 python 社区提供信息,或描述一个 python 的新增特性及其进度或环境。PEP 应当提供精确的技术规格和所提议特性的原理说明。

PEP 应被作为提出主要新特性建议、收集社区对特定问题反馈以及为必须加入 python 的设计决策编写文档的首选机制。PEP 的作者有责任在社区内部建立共识,并应将不同意见也记入文档。

参见 PEP 1。

sequence -- 序列

一种 iterable,它支持通过 __getitem__() 特殊方法来使用整数索引进行高效的元素访问,并定义了一个返回序列长度的 __len__() 方法。
内置的序列类型有 list、str、tuple 和 bytes。注意虽然 dict 也支持 __getitem__()__len__(),但它被认为属于映射而非序列,因为它查找时使用任意的 immutable 键而非整数。

collections.abc.Sequence 抽象基类定义了一个更丰富的接口,它超越了 __getitem__() __len__(),添加了 count(), index(), __contains__()__reversed__() 。 可以使用 register() 显式注册实现此扩展接口的类型。

slice -- 切片

通常只包含了特定 sequence 的一部分的对象。
切片是通过使用下标标记来创建的,在 [] 中给出几个以冒号分隔的数字,例如 variable_name[1:3:5]。方括号(下标)标记在内部使用 slice 对象。

statement -- 语句

语句是程序段(一个代码“块”)的组成单位。
一条语句可以是一个 expression 或某个带有关键字的结构,例如 if、while 或 for。

text encoding -- 文本编码

用于将Unicode字符串编码为字节串的编码器。

type -- 类型

类型决定一个 python 对象属于什么种类;每个对象都具有一种类型。
要知道对象的类型,可以访问它的 __class__ 属性,或是通过 type(obj) 来获取。

type hint -- 类型提示
annotation 为变量、类属性、函数的形参或返回值指定预期的类型。

类型提示属于可选项,python 不要求提供,但其可对静态类型分析工具起作用,并可协助 IDE 实现代码补全与重构。

全局变量、类属性和函数的类型提示可以使用 typing.get_type_hints() 来访问,但局部变量则不可以。

参见 typing 和 PEP 484,其中有对此功能的详细描述。

universal newlines -- 通用换行

一种解读文本流的方式,将以下所有符号都识别为行结束标志:Unix 的行结束约定 'n'、Windows 的约定 'rn' 以及旧版 Macintosh 的约定 'r'。
参见 PEP 278 和 PEP 3116 和 bytes.splitlines() 了解更多用法说明。

virtual machine -- 虚拟机

一台完全通过软件定义的计算机。
python 虚拟机可执行字节码编译器所生成的 bytecode。

Zen of python -- python 之禅

列出 python 设计的原则与哲学,有助于理解与使用这种语言。
定义在PEP 8 中。
每个版本的具体内容,可能会有差。查看当前版本的具体内容可在交互模式提示符中输入 "import this"。

本文由博客一文多发平台 OpenWrite 发布!

相关推荐