Glossary

  • >>>

    • 交互式 Shell 程序的默认 Python 提示符。经常看到可以在解释器中交互执行的代码示例。
  • ...

    • Importing 缩进代码块的代码时,在Pair匹配的左右定界符(括号,方括号,花括号或三引号)内或指定装饰符后,交互式 Shell 程序的默认 Python 提示符。
  • 2to3

    • pass处理大多数不兼容问题来try将 Python 2.x 代码转换为 Python 3.x 代码的工具,这些不兼容问题可以pass分析源代码并遍历解析树来检测。

2 to3 在标准库中以lib2to3的形式提供;提供一个独立的入口点作为Tools/scripts/2to3。参见2 to3-自动 Python 2 到 3 代码翻译

  • 抽象 Base Class

    • 抽象 Base Class pass提供一种定义接口的方式来补充duck-typing,而hasattr()之类的其他技术可能笨拙或微妙地错误(例如magic methods)。 ABC 引入了虚拟子类,这些子类不是从类继承而来的,但仍被isinstance()issubclass()识别;请参阅abc模块文档。 Python 随附了许多内置的 ABC,用于数据结构(在collections模块中),数字(在numbers模块中)和流(在io模块中)。您可以使用abc模块创建自己的 ABC。
  • argument

    • 调用函数时传递给function(或method)的值。有两种类型的参数:
    • keyword arguments *:在函数调用中以标识符(例如name=)开头的参数,或以**开头的字典中的值形式传递的参数。例如,在对complex()的以下调用中,35都是关键字参数:
complex(real=3, imag=5)
complex(**{'real': 3, 'imag': 5})
    • positional arguments *:不是关键字参数的参数。位置参数可以出现在参数列表的开头和/或作为iterable的元素传递,并以*开头。例如,35都是以下调用中的位置参数:
complex(3, 5)
complex(*(3, 5))

将参数分配给函数体内的命名局部变量。有关 Management 此分配的规则,请参见Calls部分。从语法上讲,任何表达式都可以用来表示参数。评估值分配给局部变量。

另请参见parameter词汇表条目和参数和参数之间的区别上的常见问题。

  • attribute

    • 与对象关联的值,该名称使用点分表达式按名称引用。例如,如果对象* o 具有属性 a ,则将其称为 o.a *。
  • BDFL

  • bytes-like object

    • 支持buffer protocol的对象,例如strbytearraymemoryview。类似字节的对象可用于需要二进制数据的各种操作,例如压缩,保存到二进制文件或pass套接字发送。一些操作需要二进制数据是可变的,在这种情况下,并非所有类似字节的对象都可以应用。
  • bytecode

    • Python 源代码被编译为字节码,这是 CPython 解释器中 Python 程序的内部表示形式。字节码也缓存在.pyc.pyo文件中,因此第二次执行同一文件更快(可以避免从源代码重新编译到字节码)。据说这种“中间语言”在virtual machine上运行,该virtual machine执行与每个字节码相对应的机器代码。请注意,字节码不能在不同的 Python 虚拟机之间工作,也不能在 Python 版本之间保持稳定。

字节码指令列表可在dis 模块的文档中找到。

  • class

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

  • coercion

    • 在涉及相同类型的两个参数的操作期间,将一种类型的实例隐式转换为另一种实例。例如,int(3.15)将浮点数转换为整数3,但在3+4.5中,每个参数的类型不同(一个 int,一个浮点),并且必须将两个参数都转换为相同的类型,否则它们将被添加。提出TypeError。可以使用coerce内置函数来执行两个操作数之间的强制转换。因此,3+4.5等效于调用operator.add(*coerce(3, 4.5))并导致operator.add(3.0, 4.5)。如果没有强制,则即使兼容类型的所有参数都必须由程序员标准化为相同的值,例如float(3)+4.5而不是3+4.5
  • complex number

    • 熟悉的实数系统的扩展,其中所有数字都表示为实部和虚部的总和。虚数是虚数单位的实数倍(-1的平方根),通常在 math 中写为i或在工程学中写为j。 Python 内置了对复数的支持,后者使用后一种符号编写;虚部写有j后缀,例如3+1j。要访问math模块的复杂等效项,请使用cmath。使用复数是相当高级的 math Function。如果您不了解它们的需求,那么几乎可以肯定,您可以放心地忽略它们。
  • context manager

  • CPython

    • Python 编程语言的规范实现,分布在python.org上。必要时使用术语“ CPython”将这种实现与其他实现(例如 Jython 或 IronPython)区分开来。
  • decorator

    • 返回另一个函数的函数,通常使用@wrapper语法作为函数转换应用。装饰器的常见示例是classmethod()staticmethod()

装饰器语法只是语法糖,以下两个函数定义在语义上是等效的:

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

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

类存在相同的概念,但在该类中较少使用。有关装饰器的更多信息,请参见function definitionsclass definitions的文档。

  • descriptor
    • 定义方法get()set()delete()的任何* new-style 对象。当类属性是 Descriptors 时,其特殊绑定行为在属性查找时触发。通常,使用 a.b 获取,设置或删除属性会在 a 的类字典中查找名为 b 的对象,但是如果 b *是 Descriptors,则会调用相应的 Descriptors 方法。理解 Descriptors 是深入了解 Python 的关键,因为它们是许多Function(包括函数,方法,属性,类方法,静态方法以及对超类的引用)的基础。

有关 Descriptors 的方法的更多信息,请参见Implementing Descriptors

  • dictionary

    • 关联数组,其中任意键 Map 到值。键可以是具有hash()eq()方法的任何对象。在 Perl 中称为哈希。
  • dictionary view

  • docstring

    • 字符串 Literals,显示为类,函数或模块中的第一个表达式。当执行套件时会忽略该套件,但编译器会识别该套件,并将其放入封闭类,函数或模块的__doc__属性中。由于可以pass内省使用,因此它是记录对象的规范位置。
  • duck-typing

    • 一种编程样式,它不会查看对象的类型来确定它是否具有正确的接口;而是简单地调用或使用方法或属性(“如果它看起来像鸭子,而象鸭子一样,则一定是鸭子.”)pass强调接口而不是特定类型,精心设计的代码pass允许多态替换。鸭式 Importing 避免使用type()isinstance()进行测试。 (但是请注意,可以使用抽象 Base Class来补充鸭式 Importing。)相反,它通常采用hasattr()测试或EAFP编程。
  • EAFP

    • 寻求宽恕比允许容易。这种通用的 Python 编码风格假定有效键或属性的存在,并在假定被证明为 Pseudo 情况下捕获异常。这种干净快捷的样式的特点是存在许多tryexcept语句。该技术与许多其他语言(如 C)通用的LBYL风格形成对比。
  • expression

    • 可以评估为某种值的一种语法。换句话说,表达式是表达式元素(如 Literals,名称,属性访问,运算符或函数调用)的累积,它们都返回一个值。与许多其他语言相反,并非所有语言构造都是表达式。还有statement不能用作表达式,例如printif。分配也是语句,而不是表达式。
  • extension module

    • 用 C 或 C 编写的模块,使用 Python 的 C API 与内核和用户代码进行交互。
  • file object

    • 向基础资源公开面向文件的 API(使用诸如read()write()之类的方法)的对象。根据对象的创建方式,文件对象可以介导对实际磁盘文件或其他类型的存储或通信设备(例如标准 Importing/输出,内存缓冲区,套接字,管道等)的访问。 。文件对象也称为类似文件的对象

实际上,文件对象分为三类:原始二进制文件,缓冲的二进制文件和文本文件。它们的接口在io模块中定义。创建文件对象的规范方法是使用open()函数。

  • file-like object

  • finder

    • 试图找到模块的loader的对象。它必须实现一个名为find_module()的方法。有关详情,请参见 PEP 302
  • floor division

    • 四舍五入到最接近的整数的 math 除法。楼层划分运算符是//。例如,与 float true 除法返回的2.75相比,表达式11 // 4的求值为2。请注意,(-11) // 4-3,因为它是-2.75向下舍入。参见 PEP 238
  • function

  • future

    • 伪模块,程序员可以使用其来启用与当前解释器不兼容的新语言Function。例如,表达式11/4当前计算结果为2。如果执行该模块的模块pass执行以下命令启用了“真除法”:
from __future__ import division

表达式11/4的计算结果为2.75。pass导入future模块并评估其变量,您可以看到新Function何时首次添加到语言中以及何时将成为默认Function:

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

    • 当不再使用内存时释放内存的过程。 Python pass引用计数和能够检测和break引用周期的循环垃圾收集器执行垃圾收集。
  • generator

    • 一个返回迭代器的函数。它看起来像一个普通函数,除了它包含yield语句以产生一系列可在 for 循环中使用的值,或者可以使用next()函数一次检索一个值。每个yield都会暂时中止处理,并记住位置执行状态(包括局部变量和未决的try语句)。生成器恢复后,它将在break处重新开始(与在每次调用时重新启动的Function相反)。
  • generator expression

    • 该表达式返回一个迭代器。它看起来像一个普通表达式,后跟一个for表达式,该表达式定义了循环变量,范围和可选的if表达式。组合表达式为封闭函数生成值:
>>> sum(i*i for i in range(10))         # sum of squares 0, 1, 4, ... 81
285
  • GIL

  • 全局解释器锁

    • CPython解释程序用来确保一次只有一个线程执行 Python bytecode的机制。pass使对象模型(包括关键的内置类型,如dict)隐式地安全地防止并发访问,从而简化了 CPython 的实现。锁定整个解释器可以使解释器更容易进行多线程处理,但会牺牲 multiprocessing 器机器提供的许多并行性。

但是,某些扩展模块(标准的或第三方的)被设计为在执行诸如压缩或散列之类的计算密集型任务时释放 GIL。另外,在执行 I/O 时,始终释放 GIL。

过去创建“自由线程”解释器(一种以更精细的粒度锁定共享数据的解释器)的努力并未成功,因为在常见的单处理器情况下性能会受到影响。相信克服该性能问题将使实施更加复杂,因此维护成本更高。

  • hashable
    • 如果对象的哈希值在其生命周期内始终不变(需要hash()方法),并且可以与其他对象进行比较(需要eq()cmp()方法),则该对象是可哈希的。比较相等的可哈希对象必须具有相同的哈希值。

散列性使对象可用作字典键和 set 成员,因为这些数据结构在内部使用散列值。

Python 的所有不可变内置对象都是可哈希的,而没有可变容器(例如列表或字典)是可哈希的。作为用户定义类实例的对象默认情况下是可哈希的;它们都比较不相等(除了它们本身),并且它们的哈希值是从id()派生的。

  • IDLE

    • Python 的集成开发环境。 IDLE 是 Python 的标准发行版附带的基本编辑器和解释器环境。
  • immutable

    • 具有固定值的对象。不可变的对象包括数字,字符串和 Tuples。这样的对象不能改变。如果必须存储其他值,则必须创建一个新对象。它们在需要恒定哈希值(例如,作为字典中的键)的地方起着重要作用。
  • integer division

    • math 除法将舍弃所有余数。例如,与浮点除法返回的2.75相比,表达式11/4当前求值为2。也称为楼层划分。当将两个整数相除时,结果将始终是另一个整数(已将 floor 函数应用于该整数)。但是,如果操作数之一是另一种数字类型(例如float),则结果将被强制转换为通用类型(请参见coercion)。例如,将整数除以浮点数将得出浮点数,可能带有小数。可以使用//运算符而不是/运算符来强制进行整数除法。另请参见future
  • importing

    • 一个模块中的 Python 代码可用于另一模块中的 Python 代码的过程。
  • importer

    • 查找和加载模块的对象; finderloader对象。
  • interactive

    • Python 具有交互式解释器,这意味着您可以在解释器提示符下 Importing 语句和表达式,立即执行它们并查看其结果。只需启动不带任何参数的python(可能是从计算机的主菜单中选择它)。这是测试新想法或检查模块和包的一种非常有效的方法(请记住help(x))。
  • interpreted

    • 与已编译的语言相反,Python 是一种解释性语言,尽管由于字节码编译器的存在,两者之间的区别可能会很模糊。这意味着源文件可以直接运行,而无需显式创建然后运行的可执行文件。尽管解释型语言的程序运行通常也较慢,但它们通常具有比编译型语言更短的开发/调试周期。另请参见interactive
  • iterable

    • 一个能够一次返回其成员的对象。可迭代的示例包括所有序列类型(例如liststrtuple)和一些非序列类型(例如dictfile)以及使用iter()getitem()方法定义的任何类的对象。可迭代变量可用于for循环以及需要序列的其他许多地方(zip()map()…)。将可迭代对象作为参数传递给内置函数iter()时,它将返回对象的迭代器。此迭代器适合在一组值上传递一次。使用可迭代对象时,通常不必自己调用iter()或处理迭代器对象。 for语句自动为您执行此操作,并创建一个临时的未命名变量来在循环持续时间内保存迭代器。另请参见iteratorsequencegenerator
  • iterator

    • 表示数据流的对象。重复调用迭代器的next()方法将返回流中的后续项。如果没有更多数据可用,则会引发StopIteration异常。此时,迭代器对象已用尽,对其next()方法的任何进一步调用都只会再次引发StopIteration。迭代器必须具有返回迭代器对象本身的iter()方法,因此每个迭代器也是可迭代的,并且可以在接受其他可迭代的大多数地方使用。一个值得注意的 exception 是try多次迭代遍历的代码。每次将容器对象传递给iter()函数或在for循环中使用它时,容器对象(例如list)都会产生一个新的新迭代器。使用迭代器try执行此操作将仅返回上一次迭代过程中使用的相同的耗尽的迭代器对象,使其看起来像一个空容器。

可以在Iterator Types中找到更多信息。

  • key function
    • 键函数或归类函数是可调用的,可返回用于排序或排序的值。例如,locale.strxfrm()用于产生一个排序键,该键知道特定于语言环境的排序约定。

Python 中的许多工具都接受关键Function来控制元素的排序或分组方式。它们包括min()max()sorted()list.sort()heapq.nsmallest()heapq.nlargest()itertools.groupby()

有几种创建键Function的方法。例如。 str.lower()方法可用作区分大小写的排序的关键Function。或者,可以从_表达式(例如lambda r: (r[0], r[2]))构建临时键Function。此外,operator模块提供了三个关键函数构造函数:attrgetter()itemgetter()methodcaller()。有关如何创建和使用关键Function的示例,请参见排序方式

  • keyword argument

  • lambda

    • 一个由单个expression组成的匿名内联函数,在调用该函数时会对其进行评估。创建 lambda 函数的语法为lambda [parameters]: expression
  • LBYL

    • 三思而后行。这种编码样式在进行调用或查找之前会明确测试前提条件。这种风格与EAFP方法相反,其 Feature 是存在许多if语句。

在多线程环境中,LBYL 方法可能会在“外观”和“跳跃”之间引入竞争条件。例如,如果另一个线程在测试之后但在查找之前从* mapping 中删除 key *,则代码if key in mapping: return mapping[key]可能会失败。可以使用锁或使用 EAFP 方法解决此问题。

  • list

    • 内置 Python sequence。尽管它的名称是 O(1),但它更类似于其他语言中的数组而不是链接列表。
  • list comprehension

    • 一种处理序列中所有或部分元素并返回包含结果的列表的紧凑方法。 result = ["0x%02x" % x for x in range(256) if x % 2 == 0]生成的字符串列表包含偶数十六进制数字(0x ..),范围从 0 到 255.if子句是可选的。如果Ellipsis,则处理range(256)中的所有元素。
  • loader

    • 加载模块的对象。它必须定义一个名为load_module()的方法。加载程序通常由finder返回。有关详情,请参见 PEP 302
  • magic method

  • mapping

  • metaclass

    • 一类的一类。类定义创建类名称,类字典和 Base Class 列表。元类负责接受这三个参数并创建类。大多数面向对象的编程语言都提供默认实现。使 Python 与众不同的是,可以创建自定义元类。大多数用户从不需要此工具,但是当需要时,元类可以提供强大而优雅的解决方案。它们已用于记录属性访问,增加线程安全性,跟踪对象创建,实现单例以及许多其他任务。

可以在定制类创建中找到更多信息。

  • method

    • 在类体内定义的函数。如果调用该类的实例的属性,则该方法将获得该实例对象的第一个argument(通常称为self)。参见functionnested scope
  • 方法解析 Sequences

    • 方法解析 Sequences 是查找期间在 Base Class 中搜索成员的 Sequences。有关自 2.3 版本以来 Python 解释器使用的算法的详细信息,请参见Python 2.3 方法解析 Sequences
  • module

    • 用作 Python 代码的组织单位的对象。模块具有一个包含任意 Python 对象的名称空间。passimporting的过程将模块加载到 Python 中。

另请参见package

  • MRO

  • mutable

    • 可变对象可以更改其值,但保留其id()。另请参见immutable
  • named tuple

    • 任何也可以使用命名属性访问其可索引元素的类似 Tuples 的类(例如time.localtime()返回一个类似 tuple 的对象,其中可以使用诸如t[0]的索引或诸如t.tm_year的命名属性来访问* year *)。

命名 Tuples 可以是内置类型,例如time.struct_time,也可以使用常规的类定义来创建。也可以使用工厂函数collections.namedtuple()创建Function齐全的名为 tuple 的 Tuples。后一种方法自动提供了额外的Function,例如像Employee(name='jones', title='programmer')这样的自文档表示。

  • namespace

    • 变量存储的位置。命名空间被实现为字典。对象(在方法中)具有本地,全局和内置名称空间以及嵌套名称空间。命名空间pass防止命名冲突来支持模块化。例如,函数__builtin__.open()os.open()pass它们的名称空间来区分。命名空间还可以pass清楚地说明哪个模块实现了Function来提高可读性和可维护性。例如,写random.seed()itertools.izip()可以清楚地表明这些Function分别由randomitertools模块实现。
  • nested scope

    • 在封闭定义中引用变量的能力。例如,在另一个函数内部定义的函数可以引用外部函数中的变量。请注意,嵌套作用域仅用于参考而不能用于赋值,因为它将始终写入最内部作用域。相反,局部变量在最内部的范围内都可以读写。同样,全局变量读取和写入全局名称空间。
  • new-style class

    • object继承的任何类。这包括listdict之类的所有内置类型。只有new-style类才能使用 Python 的较新的通用Function,例如__slots__,Descriptors,属性和getattribute()

可以在New-style and classic classes中找到更多信息。

  • object

    • 具有状态(属性或值)和定义的行为(方法)的任何数据。也是new-style class的finally Base Class。
  • package

    • Python module,可以包含子模块或递归地包含子包。从技术上讲,包是具有__path__属性的 Python 模块。
  • parameter

    • function(或方法)定义中的已命名实体,它指定函数可以接受的argument(或在某些情况下为参数)。参数有四种类型:
    • positional-or-keyword :指定可以passpositionallykeyword argument传递的参数。这是默认的参数类型,例如下面的 foo bar *:
def func(foo, bar=None): ...
    • positional-only *:指定只能由位置提供的参数。 Python 没有用于定义仅位置参数的语法。但是,某些内置函数具有仅位置参数(例如abs())。
    • var-positional :指定可以提供任意 Sequences 的位置参数(除了已被其他参数接受的任何位置参数)。可以pass在参数名称前加上*来定义这样的参数,例如下面的 args *:
def func(*args, **kwargs): ...
    • var-keyword :指定可以提供任意多个关键字参数(除了已被其他参数接受的任何关键字参数)。可以pass在参数名称前加上**来定义此类参数,例如,在以上示例中为 kwargs *。

参数可以指定可选参数和必需参数,以及一些可选参数的默认值。

另请参见argument词汇表条目,参数和参数之间的区别上的 FAQ 问题和Function definitions部分。

  • PEP
    • Python 增强建议。 PEP 是一个设计文档,向 Python 社区提供信息,或描述 Python 或其过程或环境的新Function。 PEP 应提供简明的技术规范和建议Function的原理。

PEP 旨在成为主要机制,用于提出主要的新Function,收集社区对某个问题的意见以及记录已纳入 Python 的设计决策。 PEP 作者负责在社区内构建共识并记录不同意见。

See PEP 1.

  • positional argument

  • Python 3000

    • Python 3.x 发行行的昵称(在不久的将来,当版本 3 发行时就产生了这个昵称.)这也简称为“ Py3k”。
  • Pythonic

    • 与 Python 语言最常见的习惯用法很相近的概念或一段代码,而不是使用其他语言通用的概念来实现代码。例如,Python 中的一个常见用法是使用for语句遍历可迭代对象的所有元素。许多其他语言没有这种类型的构造,因此不熟悉 Python 的人有时会改用数字计数器:
for i in range(len(food)):
    print food[i]

与更清洁的 Pythonic 方法相反:

for piece in food:
    print piece
  • reference count

    • 对对象的引用数。当对象的引用计数降至零时,将对其进行释放。引用计数通常对 Python 代码不可见,但是它是CPython实现的关键元素。 sys模块定义了getrefcount()函数,程序员可以调用该函数返回特定对象的引用计数。
  • slots

    • new-style class内部的语句pass预先语句实例属性的空间并消除实例字典来节省内存。尽管这项技术很受欢迎,但要正确使用它有些棘手,最适合保留在内存至关重要的应用程序中有大量实例的罕见情况。
  • sequence

    • iterable支持passgetitem()特殊方法使用整数索引进行有效的元素访问,并定义len()方法,该方法返回序列的长度。一些内置序列类型是liststrtupleunicode。请注意,dict还支持getitem()len(),但被视为 Map 而不是序列,因为查找使用了任意的immutable键而不是整数。
  • slice

    • 通常包含sequence的一部分的对象。使用下标符号[]创建一个切片,当给出多个时,例如在variable_name[1:3:5]中,数字之间用冒号表示。方括号(下标)表示法在内部使用slice个对象(或在较早的版本中为getslice()setslice())。
  • special method

    • Python 隐式调用的一种方法,用于对类型(例如加法)执行特定操作。此类方法的名称以双下划线开头和结尾。 特殊方法名称中记录了特殊方法。
  • statement

    • 语句是套件(代码的“块”)的一部分。语句可以是expression,也可以是带有关键字的多个结构之一,例如ifwhilefor
  • struct sequence

    • 具有命名元素的 Tuples。结构序列公开了一个类似于named tuple的接口,因为可以pass索引或作为属性来访问元素。但是,它们没有任何命名的 Tuples 方法,例如_make()_asdict()。结构序列的示例包括sys.float_info和返回值os.stat()
  • triple-quoted string

    • 由引号(“)或撇号(')的三个实例绑定的字符串。尽管它们不提供单引号字符串不具备的任何Function,但由于多种原因,它们很有用。它们允许您可以在字符串中包含未转义的单引号和双引号,并且它们可以跨越多行而无需使用延续字符,这使得它们在编写文档字符串时特别有用。
  • type

    • Python 对象的类型决定了它是哪种对象。每个对象都有一个类型。对象的类型可以pass其class属性进行访问,也可以使用type(obj)进行检索。
  • universal newlines

    • 一种解释文本流的方式,其中将以下所有内容都视为行尾:Unix 行尾约定'\n',Windows 约定'\r\n'和旧的 Macintosh 约定'\r'。另请参见 PEP 278 PEP 3116以及str.splitlines()
  • virtual environment

    • 一种协作隔离的运行时环境,该环境允许 Python 用户和应用程序安装和升级 Python 分发软件包,而不会干扰在同一系统上运行的其他 Python 应用程序的行为。
  • virtual machine

    • 完全由软件定义的计算机。 Python 的虚拟机执行字节码编译器发出的bytecode
  • 禅宗 Python

    • 列出有助于理解和使用该语言的 Python 设计原则和 IDEA。可以在交互式提示符下键入“ import this”来找到列表。