generator expression -- 生成器表达式
返回一个迭代器的表达式。 它看起来很像普通表达式后面带有定义了一个循环变量、范围的 for 子句,以及一个可选的 if 子句。 以下复合表达式会为外层函数生成一系列值:
>>> >>> sum(i*i for i in range(10)) # sum of squares 0, 1, 4, ... 81 285
generic function -- 泛型函数
为不同的类型实现相同操作的多个函数所组成的函数。在调用时会由调度算法来确定应该使用哪个实现。
另请参见 single dispatch 术语表条目、functools.singledispatch() 装饰器以及 PEP 443。
LBYL
“先查看后跳跃”的英文缩写。这种代码编写风格会在进行调用或查找之前显式地检查前提条件。此风格与 EAFP 方式恰成对比,其特点是大量使用 if 语句。
在多线程环境中,LBYL 方式会导致“查看”和“跳跃”之间发生条件竞争风险。例如,以下代码 if key in mapping: return mapping[key] 可能由于在检查操作之后其他线程从 mapping 中移除了 key 而出错。这种问题可通过加锁或使用 EAFP 方式来解决。
list -- 列表
Python 内置的一种 sequence。虽然名为列表,但更类似于其他语言中的数组而非链接列表,因为访问元素的时间复杂度为 O(1)。
list comprehension -- 列表推导式
处理一个序列中的所有或部分元素并返回结果列表的一种紧凑写法。result = ['{:#04x}'.format(x) for x in range(256) if x % 2 == 0] 将生成一个 0 到 255 范围内的十六进制偶数对应字符串(0x..)的列表。其中 if 子句是可选的,如果省略则 range(256) 中的所有元素都会被处理。
loader -- 加载器
负责加载模块的对象。它必须定义名为 load_module() 的方法。加载器通常由一个 finder 返回。详情参见 PEP 302,对于 abstract base class 可参见 importlib.abc.Loader。
PEP
“Python 增强提议”的英文缩写。一个 PEP 就是一份设计文档,用来向 Python 社区提供信息,或描述一个 Python 的新增特性及其进度或环境。PEP 应当提供精确的技术规格和所提议特性的原理说明。
PEP 应被作为提出主要新特性建议、收集社区对特定问题反馈以及为必须加入 Python 的设计决策编写文档的首选机制。PEP 的作者有责任在社区内部建立共识,并应将不同意见也记入文档。
参见 PEP 1。
portion -- 部分
构成一个命名空间包的单个目录内文件集合(也可能存放于一个 zip 文件内),具体定义见 PEP 420。
positional argument -- 位置参数
参见 argument。
provisional API -- 暂定 API
暂定 API 是指被有意排除在标准库的向后兼容性保证之外的应用编程接口。虽然此类接口通常不会再有重大改变,但只要其被标记为暂定,就可能在核心开发者确定有必要的情况下进行向后不兼容的更改(甚至包括移除该接口)。此种更改并不会随意进行 -- 仅在 API 被加入之前未考虑到的严重基础性缺陷被发现时才可能会这样做。
即便是对暂定 API 来说,向后不兼容的更改也会被视为“最后的解决方案” —— 任何问题被确认时都会尽可能先尝试找到一种向后兼容的解决方案。
这种处理过程允许标准库持续不断地演进,不至于被有问题的长期性设计缺陷所困。详情见 PEP 411。
Pythonic
指一个思路或一段代码紧密遵循了 Python 语言最常用的风格和理念,而不是使用其他语言中通用的概念来实现代码。例如,Python 的常用风格是使用 for 语句循环来遍历一个可迭代对象中的所有元素。许多其他语言没有这样的结构,因此不熟悉 Python 的人有时会选择使用一个数字计数器:
for i in range(len(food)): print(food[i])
而相应的更简洁更 Pythonic 的方法是这样的:
for piece in food: print(piece)
qualified name -- 限定名称
一个以点号分隔的名称,显示从模块的全局作用域到该模块中定义的某个类、函数或方法的“路径”,相关定义见 PEP 3155。对于最高层级的函数和类,限定名称与对象名称一致:
>>> >>> class C: ... class D: ... def meth(self): ... pass ... >>> C.__qualname__ 'C' >>> C.D.__qualname__ 'C.D' >>> C.D.meth.__qualname__ 'C.D.meth'
当被用于引用模块时,完整限定名称 意为标示该模块的以点号分隔的整个路径,其中包含其所有的父包,例如 email.mime.text:
>>> >>> import email.mime.text >>> email.mime.text.__name__ 'email.mime.text'
type -- 类型
类型决定一个 Python 对象属于什么种类;每个对象都具有一种类型。要知道对象的类型,可以访问它的 class 属性,或是通过 type(obj) 来获取。
type alias -- 类型别名
一个类型的同义词,创建方式是把类型赋值给特定的标识符。
类型别名的作用是简化 类型提示。例如:
from typing import List, Tuple
def remove_gray_shades( colors: List[Tuple[int, int, int]]) -> List[Tuple[int, int, int]]: pass
可以这样提高可读性:
from typing import List, Tuple
Color = Tuple[int, int, int]
def remove_gray_shades(colors: List[Color]) -> List[Color]: pass
参见 typing 和 PEP 484,其中有对此功能的详细描述。
type hint -- 类型提示
annotation 为变量、类属性、函数的形参或返回值指定预期的类型。
类型提示属于可选项,Python 不要求提供,但其可对静态类型分析工具起作用,并可协助 IDE 实现代码补全与重构。
全局变量、类属性和函数的类型提示可以使用 typing.get_type_hints() 来访问,但局部变量则不可以。
参见 typing 和 PEP 484,其中有对此功能的详细描述。
universal newlines -- 通用换行
一种解读文本流的方式,将以下所有符号都识别为行结束标志:Unix 的行结束约定 '\n'、Windows 的约定 '\r\n' 以及旧版 Macintosh 的约定 '\r'。参见 PEP 278 和 PEP 3116 和 bytes.splitlines() 了解更多用法说明。
variable annotation -- 变量标注
对变量或类属性的 annotation。
在标注变量或类属性时,还可选择为其赋值:
class C: field: 'annotation'
变量标注通常被用作 类型提示:例如以下变量预期接受 int 类型的值:
count: int = 0
变量标注语法的详细解释见 带标注的赋值语句 一节。
请参看 function annotation、PEP 484 和 PEP 526,其中对此功能有详细描述。