### 导航
- [索引](../genindex.xhtml "总目录")
- [模块](../py-modindex.xhtml "Python 模块索引") |
- [下一页](constants.xhtml "内置常量") |
- [上一页](intro.xhtml "概述") |
- ![](https://box.kancloud.cn/a721fc7ec672275e257bbbfde49a4d4e_16x16.png)
- [Python](https://www.python.org/) »
- zh\_CN 3.7.3 [文档](../index.xhtml) »
- [Python 标准库](index.xhtml) »
- $('.inline-search').show(0); |
# 内置函数
Python 解释器内置了很多函数和类型,您可以在任何时候使用它们。以下按字母表顺序列出它们。
内置函数
[`abs()`](#abs "abs")
[`delattr()`](#delattr "delattr")
[`hash()`](#hash "hash")
[`memoryview()`](#func-memoryview)
[`set()`](#func-set)
[`all()`](#all "all")
[`dict()`](#func-dict)
[`help()`](#help "help")
[`min()`](#min "min")
[`setattr()`](#setattr "setattr")
[`any()`](#any "any")
[`dir()`](#dir "dir")
[`hex()`](#hex "hex")
[`next()`](#next "next")
[`slice()`](#slice "slice")
[`ascii()`](#ascii "ascii")
[`divmod()`](#divmod "divmod")
[`id()`](#id "id")
[`object()`](#object "object")
[`sorted()`](#sorted "sorted")
[`bin()`](#bin "bin")
[`enumerate()`](#enumerate "enumerate")
[`input()`](#input "input")
[`oct()`](#oct "oct")
[`staticmethod()`](#staticmethod "staticmethod")
[`bool()`](#bool "bool")
[`eval()`](#eval "eval")
[`int()`](#int "int")
[`open()`](#open "open")
[`str()`](#func-str)
[`breakpoint()`](#breakpoint "breakpoint")
[`exec()`](#exec "exec")
[`isinstance()`](#isinstance "isinstance")
[`ord()`](#ord "ord")
[`sum()`](#sum "sum")
[`bytearray()`](#func-bytearray)
[`filter()`](#filter "filter")
[`issubclass()`](#issubclass "issubclass")
[`pow()`](#pow "pow")
[`super()`](#super "super")
[`bytes()`](#func-bytes)
[`float()`](#float "float")
[`iter()`](#iter "iter")
[`print()`](#print "print")
[`tuple()`](#func-tuple)
[`callable()`](#callable "callable")
[`format()`](#format "format")
[`len()`](#len "len")
[`property()`](#property "property")
[`type()`](#type "type")
[`chr()`](#chr "chr")
[`frozenset()`](#func-frozenset)
[`list()`](#func-list)
[`range()`](#func-range)
[`vars()`](#vars "vars")
[`classmethod()`](#classmethod "classmethod")
[`getattr()`](#getattr "getattr")
[`locals()`](#locals "locals")
[`repr()`](#repr "repr")
[`zip()`](#zip "zip")
[`compile()`](#compile "compile")
[`globals()`](#globals "globals")
[`map()`](#map "map")
[`reversed()`](#reversed "reversed")
[`__import__()`](#__import__ "__import__")
[`complex()`](#complex "complex")
[`hasattr()`](#hasattr "hasattr")
[`max()`](#max "max")
[`round()`](#round "round")
`abs`(*x*)返回一个数的绝对值。实参可以是整数或浮点数。如果实参是一个复数,返回它的模。
`all`(*iterable*)如果 *iterable* 的所有元素为真(或迭代器为空),返回 `True` 。等价于:
```
def all(iterable):
for element in iterable:
if not element:
return False
return True
```
`any`(*iterable*)如果\*iterable\*的任一元素为真则返回``True``。如果迭代器为空,返回``False``。等价于:
```
def any(iterable):
for element in iterable:
if element:
return True
return False
```
`ascii`(*object*)就像函数 [`repr()`](#repr "repr"),返回一个对象可打印的字符串,但是 [`repr()`](#repr "repr") 返回的字符串中非 ASCII 编码的字符,会使用 `\x`、`\u` 和 `\U` 来转义。生成的字符串和 Python 2 的 [`repr()`](#repr "repr") 返回的结果相似。
`bin`(*x*)将一个整数转变为一个前缀为“0b”的二进制字符串。结果是一个合法的 Python 表达式。如果 *x* 不是 Python 的 [`int`](#int "int") 对象,那它需要定义 [`__index__()`](../reference/datamodel.xhtml#object.__index__ "object.__index__") 方法返回一个整数。一些例子:
```
>>> bin(3)
'0b11'
>>> bin(-10)
'-0b1010'
```
如果不一定需要前缀“0b”,还可以使用如下的方法。
```
>>> format(14, '#b'), format(14, 'b')
('0b1110', '1110')
>>> f'{14:#b}', f'{14:b}'
('0b1110', '1110')
```
另见 [`format()`](#format "format") 获取更多信息。
*class* `bool`(\[*x*\])返回一个布尔值,`True` 或者 `False`。 *x* 使用标准的 [真值测试过程](stdtypes.xhtml#truth) 来转换。如果 *x* 是假的或者被省略,返回 `False`;其他情况返回 `True`。[`bool`](#bool "bool") 类是 [`int`](#int "int") 的子类(参见 [数字类型 --- int, float, complex](stdtypes.xhtml#typesnumeric))。其他类不能继承自它。它只有 `False` 和 `True` 两个实例(参见 [布尔值](stdtypes.xhtml#bltin-boolean-values))。
在 3.7 版更改: *x* 现在只能作为位置参数。
`breakpoint`(*\*args*, *\*\*kws*)此函数会在调用时将你陷入调试器中。具体来说,它调用 [`sys.breakpointhook()`](sys.xhtml#sys.breakpointhook "sys.breakpointhook") ,直接传递 `args` 和 `kws` 。默认情况下, `sys.breakpointhook()` 调用 [`pdb.set_trace()`](pdb.xhtml#pdb.set_trace "pdb.set_trace") 且没有参数。在这种情况下,它纯粹是一个便利函数,因此您不必显式导入 [`pdb`](pdb.xhtml#module-pdb "pdb: The Python debugger for interactive interpreters.") 且键入尽可能少的代码即可进入调试器。但是, [`sys.breakpointhook()`](sys.xhtml#sys.breakpointhook "sys.breakpointhook") 可以设置为其他一些函数并被 [`breakpoint()`](#breakpoint "breakpoint") 自动调用,以允许进入你想用的调试器。
3\.7 新版功能.
*class* `bytearray`(\[*source*\[, *encoding*\[, *errors*\]\]\])返回一个新的 bytes 数组。 [`bytearray`](stdtypes.xhtml#bytearray "bytearray") 类是一个可变序列,包含范围为 0 <= x < 256 的整数。它有可变序列大部分常见的方法,见 [可变序列类型](stdtypes.xhtml#typesseq-mutable) 的描述;同时有 [`bytes`](stdtypes.xhtml#bytes "bytes") 类型的大部分方法,参见 [bytes 和 bytearray 操作](stdtypes.xhtml#bytes-methods)。
可选形参 *source* 可以用不同的方式来初始化数组:
- 如果是一个 *string*,您必须提供 *encoding* 参数(*errors* 参数仍是可选的);[`bytearray()`](stdtypes.xhtml#bytearray "bytearray") 会使用 [`str.encode()`](stdtypes.xhtml#str.encode "str.encode") 方法来将 string 转变成 bytes。
- 如果是一个 *integer*,会初始化大小为该数字的数组,并使用 null 字节填充。
- 如果是一个符合 *buffer* 接口的对象,该对象的只读 buffer 会用来初始化字节数组。
- 如果是一个 *iterable* 可迭代对象,它的元素的范围必须是 `0 <= x < 256` 的整数,它会被用作数组的初始内容。
如果没有实参,则创建大小为 0 的数组。
另见 [二进制序列类型 --- bytes, bytearray, memoryview](stdtypes.xhtml#binaryseq) 和 [bytearray 对象](stdtypes.xhtml#typebytearray)。
*class* `bytes`(\[*source*\[, *encoding*\[, *errors*\]\]\])返回一个新的“bytes”对象, 是一个不可变序列,包含范围为 `0 <= x < 256` 的整数。[`bytes`](stdtypes.xhtml#bytes "bytes") 是 [`bytearray`](stdtypes.xhtml#bytearray "bytearray") 的不可变版本 - 它有其中不改变序列的方法和相同的索引、切片操作。
因此,构造函数的实参和 [`bytearray()`](stdtypes.xhtml#bytearray "bytearray") 相同。
字节对象还可以用字面值创建,参见 [字符串和字节串字面值](../reference/lexical_analysis.xhtml#strings)。
另见 [二进制序列类型 --- bytes, bytearray, memoryview](stdtypes.xhtml#binaryseq),[bytes 对象](stdtypes.xhtml#typebytes) 和 [bytes 和 bytearray 操作](stdtypes.xhtml#bytes-methods)。
`callable`(*object*)如果实参 *object* 是可调用的,返回 [`True`](constants.xhtml#True "True"),否则返回 [`False`](constants.xhtml#False "False")。如果返回真,调用仍可能会失败;但如果返回假,则调用 *object* 肯定会失败。注意类是可调用的(调用类会返回一个新的实例)。如果实例的类有 [`__call__()`](../reference/datamodel.xhtml#object.__call__ "object.__call__") 方法,则它是可调用。
3\.2 新版功能: 这个函数一开始在 Python 3.0 被移除了,但在 Python 3.2 被重新加入。
`chr`(*i*)返回 Unicode 码位为整数 *i* 的字符的字符串格式。例如,`chr(97)` 返回字符串 `'a'`,`chr(8364)` 返回字符串 `'€'`。这是 [`ord()`](#ord "ord") 的逆函数。
实参的合法范围是 0 到 1,114,111(16 进制表示是 0x10FFFF)。如果 *i* 超过这个范围,会触发 [`ValueError`](exceptions.xhtml#ValueError "ValueError") 异常。
`@``classmethod`把一个方法封装成类方法。
一个类方法把类自己作为第一个实参,就像一个实例方法把实例自己作为第一个实参。请用以下习惯来声明类方法:
```
class C:
@classmethod
def f(cls, arg1, arg2, ...): ...
```
`@classmethod` 这样的形式称为函数的 [decorator](../glossary.xhtml#term-decorator) -- 详情参阅 [函数定义](../reference/compound_stmts.xhtml#function)。
类方法的调用可以在类上进行 (例如 `C.f()`) 也可以在实际上进行 (例如 `C().f()`)。 其所属类以外的类实例会被忽略。 如果类方法在其所属类的派生类上调用,则该派生类对象会被作为隐含的第一个参数被传入。
类方法与 C++ 或 Java 中的静态方法不同。 如果你需要后者,请参阅 [`staticmethod()`](#staticmethod "staticmethod")。
想了解更多有关类方法的信息,请参阅 [标准类型层级结构](../reference/datamodel.xhtml#types) 。
`compile`(*source*, *filename*, *mode*, *flags=0*, *dont\_inherit=False*, *optimize=-1*)将 *source* 编译成代码或 AST 对象。代码对象可以被 [`exec()`](#exec "exec") 或 [`eval()`](#eval "eval") 执行。*source* 可以是常规的字符串、字节字符串,或者 AST 对象。参见 [`ast`](ast.xhtml#module-ast "ast: Abstract Syntax Tree classes and manipulation.") 模块的文档了解如何使用 AST 对象。
*filename* 实参需要是代码读取的文件名;如果代码不需要从文件中读取,可以传入一些可辨识的值(经常会使用 `'<string>'`)。
*mode* 实参指定了编译代码必须用的模式。如果 *source* 是语句序列,可以是 `'exec'`;如果是单一表达式,可以是 `'eval'`;如果是单个交互式语句,可以是 `'single'`。(在最后一种情况下,如果表达式执行结果不是 `None` 将会被打印出来。)
可选参数 *flags* 和 *dont\_inherit* 控制在编译 *source* 时要用到哪个 [future 语句](../reference/simple_stmts.xhtml#future)。 如果两者都未提供(或都为零)则会使用调用 [`compile()`](#compile "compile") 的代码中有效的 future 语句来编译代码。 如果给出了 *flags* 参数但没有 *dont\_inherit* (或是为零) 则 *flags* 参数所指定的 以及那些无论如何都有效的 future 语句会被使用。 如果 *dont\_inherit* 为一个非零整数,则只使用 *flags* 参数 -- 在调用外围有效的 future 语句将被忽略。
Future 语句使用比特位来指定,多个语句可以通过按位或来指定。具体特性的比特位可以通过 [`__future__`](__future__.xhtml#module-__future__ "__future__: Future statement definitions") 模块中的 `_Feature` 类的实例的 `compiler_flag` 属性来获得。
*optimize* 实参指定编译器的优化级别;默认值 `-1` 选择与解释器的 [`-O`](../using/cmdline.xhtml#cmdoption-o) 选项相同的优化级别。显式级别为 `0` (没有优化;`__debug__` 为真)、`1` (断言被删除, `__debug__` 为假)或 `2` (文档字符串也被删除)。
如果编译的源码不合法,此函数会触发 [`SyntaxError`](exceptions.xhtml#SyntaxError "SyntaxError") 异常;如果源码包含 null 字节,则会触发 [`ValueError`](exceptions.xhtml#ValueError "ValueError") 异常。
如果您想分析 Python 代码的 AST 表示,请参阅 [`ast.parse()`](ast.xhtml#ast.parse "ast.parse")。
注解
在 `'single'` 或 `'eval'` 模式编译多行代码字符串时,输入必须以至少一个换行符结尾。 这使 [`code`](code.xhtml#module-code "code: Facilities to implement read-eval-print loops.") 模块更容易检测语句的完整性。
警告
在将足够大或者足够复杂的字符串编译成 AST 对象时,Python 解释器有可以因为 Python AST 编译器的栈深度限制而崩溃。
在 3.2 版更改: 允许使用 Windows 和 Mac 的换行符。在 `'exec'` 模式不再需要以换行符结尾。增加了 *optimize* 形参。
在 3.5 版更改: 之前 *source* 中包含 null 字节的话会触发 [`TypeError`](exceptions.xhtml#TypeError "TypeError") 异常。
*class* `complex`(\[*real*\[, *imag*\]\])返回值为 *real* + *imag*\*1j 的复数,或将字符串或数字转换为复数。如果第一个形参是字符串,则它被解释为一个复数,并且函数调用时必须没有第二个形参。第二个形参不能是字符串。每个实参都可以是任意的数值类型(包括复数)。如果省略了 *imag*,则默认值为零,构造函数会像 [`int`](#int "int") 和 [`float`](#float "float") 一样进行数值转换。如果两个实参都省略,则返回 `0j`。
注解
当从字符串转换时,字符串在 `+` 或 `-` 的周围必须不能有空格。例如 `complex('1+2j')` 是合法的,但 `complex('1 + 2j')` 会触发 [`ValueError`](exceptions.xhtml#ValueError "ValueError") 异常。
[数字类型 --- int, float, complex](stdtypes.xhtml#typesnumeric) 描述了复数类型。
在 3.6 版更改: 您可以使用下划线将代码文字中的数字进行分组。
`delattr`(*object*, *name*)[`setattr()`](#setattr "setattr") 相关的函数。实参是一个对象和一个字符串。该字符串必须是对象的某个属性。如果对象允许,该函数将删除指定的属性。例如 `delattr(x, 'foobar')` 等价于 `del x.foobar` 。
*class* `dict`(*\*\*kwarg*)*class* `dict`(*mapping*, *\*\*kwarg*)*class* `dict`(*iterable*, *\*\*kwarg*)创建一个新的字典。[`dict`](stdtypes.xhtml#dict "dict") 对象是一个字典类。参见 [`dict`](stdtypes.xhtml#dict "dict") 和 [映射类型 --- dict](stdtypes.xhtml#typesmapping) 了解这个类。
其他容器类型,请参见内置的 [`list`](stdtypes.xhtml#list "list")、[`set`](stdtypes.xhtml#set "set") 和 [`tuple`](stdtypes.xhtml#tuple "tuple") 类,以及 [`collections`](collections.xhtml#module-collections "collections: Container datatypes") 模块。
`dir`(\[*object*\])如果没有实参,则返回当前本地作用域中的名称列表。如果有实参,它会尝试返回该对象的有效属性列表。
如果对象有一个名为 [`__dir__()`](../reference/datamodel.xhtml#object.__dir__ "object.__dir__") 的方法,那么该方法将被调用,并且必须返回一个属性列表。这允许实现自定义 [`__getattr__()`](../reference/datamodel.xhtml#object.__getattr__ "object.__getattr__") 或 [`__getattribute__()`](../reference/datamodel.xhtml#object.__getattribute__ "object.__getattribute__") 函数的对象能够自定义 [`dir()`](#dir "dir") 来报告它们的属性。
如果对象不提供 [`__dir__()`](../reference/datamodel.xhtml#object.__dir__ "object.__dir__"),这个函数会尝试从对象已定义的 [`__dict__`](stdtypes.xhtml#object.__dict__ "object.__dict__") 属性和类型对象收集信息。结果列表并不总是完整的,如果对象有自定义 [`__getattr__()`](../reference/datamodel.xhtml#object.__getattr__ "object.__getattr__"),那结果可能不准确。
默认的 [`dir()`](#dir "dir") 机制对不同类型的对象行为不同,它会试图返回最相关而不是最全的信息:
- 如果对象是模块对象,则列表包含模块的属性名称。
- 如果对象是类型或类对象,则列表包含它们的属性名称,并且递归查找所有基类的属性。
- 否则,列表包含对象的属性名称,它的类属性名称,并且递归查找它的类的所有基类的属性。
返回的列表按字母表排序。例如:
```
>>> import struct
>>> dir() # show the names in the module namespace # doctest: +SKIP
['__builtins__', '__name__', 'struct']
>>> dir(struct) # show the names in the struct module # doctest: +SKIP
['Struct', '__all__', '__builtins__', '__cached__', '__doc__', '__file__',
'__initializing__', '__loader__', '__name__', '__package__',
'_clearcache', 'calcsize', 'error', 'pack', 'pack_into',
'unpack', 'unpack_from']
>>> class Shape:
... def __dir__(self):
... return ['area', 'perimeter', 'location']
>>> s = Shape()
>>> dir(s)
['area', 'location', 'perimeter']
```
注解
因为 [`dir()`](#dir "dir") 主要是为了便于在交互式时使用,所以它会试图返回人们感兴趣的名字集合,而不是试图保证结果的严格性或一致性,它具体的行为也可能在不同版本之间改变。例如,当实参是一个类时,metaclass 的属性不包含在结果列表中。
`divmod`(*a*, *b*)它将两个(非复数)数字作为实参,并在执行整数除法时返回一对商和余数。对于混合操作数类型,适用双目算术运算符的规则。对于整数,结果和 `(a // b, a % b)` 一致。对于浮点数,结果是 `(q, a % b)` ,*q* 通常是 `math.floor(a / b)` 但可能会比 1 小。在任何情况下, `q * b + a % b` 和 *a* 基本相等;如果 `a % b` 非零,它的符号和 *b* 一样,并且 `0 <= abs(a % b) < abs(b)` 。
`enumerate`(*iterable*, *start=0*)返回一个枚举对象。*iterable* 必须是一个序列,或 [iterator](../glossary.xhtml#term-iterator),或其他支持迭代的对象。 [`enumerate()`](#enumerate "enumerate") 返回的迭代器的 [`__next__()`](stdtypes.xhtml#iterator.__next__ "iterator.__next__") 方法返回一个元组,里面包含一个计数值(从 *start* 开始,默认为 0)和通过迭代 *iterable* 获得的值。
```
>>> seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1))
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
```
等价于:
```
def enumerate(sequence, start=0):
n = start
for elem in sequence:
yield n, elem
n += 1
```
`eval`(*expression*, *globals=None*, *locals=None*)实参是一个字符串,以及可选的 globals 和 locals。*globals* 实参必须是一个字典。*locals* 可以是任何映射对象。
*expression* 参数会作为一个 Python 表达式(从技术上说是一个条件列表)被解析并求值,使用 *globals* 和 *locals* 字典作为全局和局部命名空间。 如果 *globals* 字典存在且不包含以 `__builtins__` 为键的值,则会在解析 *expression* 之前插入以此为键的对内置模块 [`builtins`](builtins.xhtml#module-builtins "builtins: The module that provides the built-in namespace.") 的字典的引用。 这意味着 *expression* 通常具有对标准 [`builtins`](builtins.xhtml#module-builtins "builtins: The module that provides the built-in namespace.") 模块的完全访问权限且受限的环境会被传播。 如果省略 *locals* 字典则其默认值为 *globals* 字典。 如果两个字典同时省略,表达式会在 [`eval()`](#eval "eval") 被调用的环境中执行。 返回值为表达式求值的结果。 语法错误将作为异常被报告。 例如:
```
>>> x = 1
>>> eval('x+1')
2
```
这个函数也可以用来执行任何代码对象(如 [`compile()`](#compile "compile") 创建的)。这种情况下,参数是代码对象,而不是字符串。如果编译该对象时的 *mode* 实参是 `'exec'` 那么 [`eval()`](#eval "eval") 返回值为 `None` 。
提示: [`exec()`](#exec "exec") 函数支持动态执行语句。 [`globals()`](#globals "globals") 和 [`locals()`](#locals "locals") 函数各自返回当前的全局和本地字典,因此您可以将它们传递给 [`eval()`](#eval "eval") 或 [`exec()`](#exec "exec") 来使用。
另外可以参阅 [`ast.literal_eval()`](ast.xhtml#ast.literal_eval "ast.literal_eval"),该函数可以安全执行仅包含文字的表达式字符串。
`exec`(*object*\[, *globals*\[, *locals*\]\])这个函数支持动态执行 Python 代码。*object* 必须是字符串或者代码对象。如果是字符串,那么该字符串将被解析为一系列 Python 语句并执行(除非发生语法错误)。[1](#id2) 如果是代码对象,它将被直接执行。在任何情况下,被执行的代码都需要和文件输入一样是有效的(见参考手册中关于文件输入的章节)。请注意即使在传递给 [`exec()`](#exec "exec") 函数的代码的上下文中,[`return`](../reference/simple_stmts.xhtml#return) 和 [`yield`](../reference/simple_stmts.xhtml#yield) 语句也不能在函数定义之外使用。该函数返回值是 `None` 。
无论哪种情况,如果省略了可选参数,代码将在当前范围内执行。如果提供了 *globals* 参数,就必须是字典类型,而且会被用作全局和本地变量。如果同时提供了 *globals* 和 *locals* 参数,它们分别被用作全局和本地变量。如果提供了 *locals* 参数,则它可以是任何映射型的对象。请记住在模块层级,全局和本地变量是相同的字典。如果 exec 有两个不同的 *globals* 和 *locals* 对象,代码就像嵌入在类定义中一样执行。
如果 *globals* 字典不包含 `__builtins__` 键值,则将为该键插入对内建 [`builtins`](builtins.xhtml#module-builtins "builtins: The module that provides the built-in namespace.") 模块字典的引用。因此,在将执行的代码传递给 [`exec()`](#exec "exec") 之前,可以通过将自己的 `__builtins__` 字典插入到 *globals* 中来控制可以使用哪些内置代码。
注解
内置 [`globals()`](#globals "globals") 和 [`locals()`](#locals "locals") 函数各自返回当前的全局和本地字典,因此可以将它们传递给 [`exec()`](#exec "exec") 的第二个和第三个实参。
注解
默认情况下,*locals* 的行为如下面 [`locals()`](#locals "locals") 函数描述的一样:不要试图改变默认的 *locals* 字典。如果您想在 [`exec()`](#exec "exec") 函数返回时知道代码对 *locals* 的变动,请明确地传递 *locals* 字典。
`filter`(*function*, *iterable*)用 *iterable* 中函数 *function* 返回真的那些元素,构建一个新的迭代器。*iterable* 可以是一个序列,一个支持迭代的容器,或一个迭代器。如果 *function* 是 `None` ,则会假设它是一个身份函数,即 *iterable* 中所有返回假的元素会被移除。
请注意, `filter(function, iterable)` 相当于一个生成器表达式,当 function 不是 `None` 的时候为 `(item for item in iterable if function(item))`;function 是 `None` 的时候为 `(item for item in iterable if item)` 。
请参阅 [`itertools.filterfalse()`](itertools.xhtml#itertools.filterfalse "itertools.filterfalse") 了解,只有 *function* 返回 false 时才选取 *iterable* 中元素的补充函数。
*class* `float`(\[*x*\])返回从数字或字符串 *x* 生成的浮点数。
如果实参是字符串,则它必须是包含十进制数字的字符串,字符串前面可以有符号,之前也可以有空格。可选的符号有 `'+'` 和 `'-'` ; `'+'` 对创建的值没有影响。实参也可以是 NaN(非数字)、正负无穷大的字符串。确切地说,除去首尾的空格后,输入必须遵循以下语法:
```
sign ::= "+" | "-"
infinity ::= "Infinity" | "inf"
nan ::= "nan"
numeric_value ::= floatnumber | infinity | nan
numeric_string ::= [sign] numeric_value
```
这里, `floatnumber` 是 Python 浮点数的字符串形式,详见 [浮点数字面值](../reference/lexical_analysis.xhtml#floating)。字母大小写都可以,例如,“inf”、“Inf”、“INFINITY”、“iNfINity” 都可以表示正无穷大。
另一方面,如果实参是整数或浮点数,则返回具有相同值(在 Python 浮点精度范围内)的浮点数。如果实参在 Python 浮点精度范围外,则会触发 [`OverflowError`](exceptions.xhtml#OverflowError "OverflowError")。
对于一般的 Python 对象 `x` , `float(x)` 指派给 `x.__float__()` 。
如果没有实参,则返回 `0.0` 。
例如:
```
>>> float('+1.23')
1.23
>>> float(' -12345\n')
-12345.0
>>> float('1e-003')
0.001
>>> float('+1E6')
1000000.0
>>> float('-Infinity')
-inf
```
[数字类型 --- int, float, complex](stdtypes.xhtml#typesnumeric) 描述了浮点类型。
在 3.6 版更改: 您可以使用下划线将代码文字中的数字进行分组。
在 3.7 版更改: *x* 现在只能作为位置参数。
`format`(*value*\[, *format\_spec*\])将 *value* 转换为 *format\_spec* 控制的“格式化”表示。*format\_spec* 的解释取决于 *value* 实参的类型,但是大多数内置类型使用标准格式化语法:[Format Specification Mini-Language](string.xhtml#formatspec)。
默认的 *format\_spec* 是一个空字符串,它通常和调用 [`str(value)`](stdtypes.xhtml#str "str") 的结果相同。
调用 `format(value, format_spec)` 会转换成 `type(value).__format__(value, format_spec)` ,所以实例字典中的 [`__format__()`](../reference/datamodel.xhtml#object.__format__ "object.__format__") 方法将不会调用。如果搜索到 [`object`](#object "object") 有这个方法但 *format\_spec* 不为空,*format\_spec* 或返回值不是字符串,会触发 [`TypeError`](exceptions.xhtml#TypeError "TypeError") 异常。
在 3.4 版更改: 当 *format\_spec* 不是空字符串时, `object().__format__(format_spec)` 会触发 [`TypeError`](exceptions.xhtml#TypeError "TypeError")。
*class* `frozenset`(\[*iterable*\])返回一个新的 [`frozenset`](stdtypes.xhtml#frozenset "frozenset") 对象,它包含可选参数 *iterable* 中的元素。 `frozenset` 是一个内置的类。有关此类的文档,请参阅 [`frozenset`](stdtypes.xhtml#frozenset "frozenset") 和 [集合类型 --- set, frozenset](stdtypes.xhtml#types-set)。
请参阅内建的 [`set`](stdtypes.xhtml#set "set")、[`list`](stdtypes.xhtml#list "list")、[`tuple`](stdtypes.xhtml#tuple "tuple") 和 [`dict`](stdtypes.xhtml#dict "dict") 类,以及 [`collections`](collections.xhtml#module-collections "collections: Container datatypes") 模块来了解其它的容器。
`getattr`(*object*, *name*\[, *default*\])返回对象命名属性的值。*name* 必须是字符串。如果该字符串是对象的属性之一,则返回该属性的值。例如, `getattr(x, 'foobar')` 等同于 `x.foobar`。如果指定的属性不存在,且提供了 *default* 值,则返回它,否则触发 [`AttributeError`](exceptions.xhtml#AttributeError "AttributeError")。
`globals`()返回表示当前全局符号表的字典。这总是当前模块的字典(在函数或方法中,不是调用它的模块,而是定义它的模块)。
`hasattr`(*object*, *name*)该实参是一个对象和一个字符串。如果字符串是对象的属性之一的名称,则返回 `True`,否则返回 `False`。(此功能是通过调用 `getattr(object, name)` 看是否有 [`AttributeError`](exceptions.xhtml#AttributeError "AttributeError") 异常来实现的。)
`hash`(*object*)返回该对象的哈希值(如果它有的话)。哈希值是整数。它们在字典查找元素时用来快速比较字典的键。相同大小的数字变量有相同的哈希值(即使它们类型不同,如 1 和 1.0)。
注解
如果对象实现了自己的 [`__hash__()`](../reference/datamodel.xhtml#object.__hash__ "object.__hash__") 方法,请注意,[`hash()`](#hash "hash") 根据机器的字长来截断返回值。另请参阅 [`__hash__()`](../reference/datamodel.xhtml#object.__hash__ "object.__hash__")。
`help`(\[*object*\])启动内置的帮助系统(此函数主要在交互式中使用)。如果没有实参,解释器控制台里会启动交互式帮助系统。如果实参是一个字符串,则在模块、函数、类、方法、关键字或文档主题中搜索该字符串,并在控制台上打印帮助信息。如果实参是其他任意对象,则会生成该对象的帮助页。
请注意如果在函数的形参列表中出现了斜杠 (/),则它在发起调用 [`help()`](#help "help") 的时候意味着斜杠之前的均为仅限位置形参。 更多相关信息,请参阅 [有关仅限位置形参的 FAQ 条目](../faq/programming.xhtml#faq-positional-only-arguments)。
该函数通过 [`site`](site.xhtml#module-site "site: Module responsible for site-specific configuration.") 模块加入到内置命名空间。
在 3.4 版更改: [`pydoc`](pydoc.xhtml#module-pydoc "pydoc: Documentation generator and online help system.") 和 [`inspect`](inspect.xhtml#module-inspect "inspect: Extract information and source code from live objects.") 的变更使得可调用对象的签名信息更加全面和一致。
`hex`(*x*)将整数转换为以“0x”为前缀的小写十六进制字符串。如果 *x* 不是 Python [`int`](#int "int") 对象,则必须定义返回整数的 [`__index__()`](../reference/datamodel.xhtml#object.__index__ "object.__index__") 方法。一些例子:
```
>>> hex(255)
'0xff'
>>> hex(-42)
'-0x2a'
```
如果要将整数转换为大写或小写的十六进制字符串,并可选择有无“0x”前缀,则可以使用如下方法:
```
>>> '%#x' % 255, '%x' % 255, '%X' % 255
('0xff', 'ff', 'FF')
>>> format(255, '#x'), format(255, 'x'), format(255, 'X')
('0xff', 'ff', 'FF')
>>> f'{255:#x}', f'{255:x}', f'{255:X}'
('0xff', 'ff', 'FF')
```
另见 [`format()`](#format "format") 获取更多信息。
另请参阅 [`int()`](#int "int") 将十六进制字符串转换为以 16 为基数的整数。
注解
如果要获取浮点数的十六进制字符串形式,请使用 [`float.hex()`](stdtypes.xhtml#float.hex "float.hex") 方法。
`id`(*object*)返回对象的“标识值”。该值是一个整数,在此对象的生命周期中保证是唯一且恒定的。两个生命期不重叠的对象可能具有相同的 [`id()`](#id "id") 值。
**CPython implementation detail:** This is the address of the object in memory.
`input`(\[*prompt*\])如果存在 *prompt* 实参,则将其写入标准输出,末尾不带换行符。接下来,该函数从输入中读取一行,将其转换为字符串(除了末尾的换行符)并返回。当读取到 EOF 时,则触发 [`EOFError`](exceptions.xhtml#EOFError "EOFError")。例如:
```
>>> s = input('--> ')
--> Monty Python's Flying Circus
>>> s
"Monty Python's Flying Circus"
```
如果加载了 [`readline`](readline.xhtml#module-readline "readline: GNU readline support for Python. (Unix)") 模块,[`input()`](#input "input") 将使用它来提供复杂的行编辑和历史记录功能。
*class* `int`(\[*x*\])*class* `int`(*x*, *base=10*)返回一个使用数字或字符串 *x* 生成的整数对象,或者没有实参的时候返回 `0` 。如果 *x* 定义了 [`__int__()`](../reference/datamodel.xhtml#object.__int__ "object.__int__"),`int(x)` 返回 `x.__int__()` 。如果 *x* 定义了 [`__trunc__()`](../reference/datamodel.xhtml#object.__trunc__ "object.__trunc__"),它返回 `x.__trunc__()` 。对于浮点数,它向零舍入。
如果 *x* 不是数字,或者有 *base* 参数,*x* 必须是字符串、[`bytes`](stdtypes.xhtml#bytes "bytes")、表示进制为 *base* 的 [整数字面值](../reference/lexical_analysis.xhtml#integers) 的 [`bytearray`](stdtypes.xhtml#bytearray "bytearray") 实例。该文字前可以有 `+` 或 `-` (中间不能有空格),前后可以有空格。一个进制为 n 的数字包含 0 到 n-1 的数,其中 `a` 到 `z` (或 `A` 到 `Z` )表示 10 到 35。默认的 *base* 为 10 ,允许的进制有 0、2-36。2、8、16 进制的数字可以在代码中用 `0b`/`0B` 、 `0o`/`0O` 、 `0x`/`0X` 前缀来表示。进制为 0 将安照代码的字面量来精确解释,最后的结果会是 2、8、10、16 进制中的一个。所以 `int('010', 0)` 是非法的,但 `int('010')` 和 `int('010', 8)` 是合法的。
整数类型定义请参阅 [数字类型 --- int, float, complex](stdtypes.xhtml#typesnumeric) 。
在 3.4 版更改: 如果 *base* 不是 [`int`](#int "int") 的实例,但 *base* 对象有 [`base.__index__`](../reference/datamodel.xhtml#object.__index__ "object.__index__") 方法,则会调用该方法来获取进制数。以前的版本使用 [`base.__int__`](../reference/datamodel.xhtml#object.__int__ "object.__int__") 而不是 [`base.__index__`](../reference/datamodel.xhtml#object.__index__ "object.__index__")。
在 3.6 版更改: 您可以使用下划线将代码文字中的数字进行分组。
在 3.7 版更改: *x* 现在只能作为位置参数。
`isinstance`(*object*, *classinfo*)如果 *object* 实参是 *classinfo* 实参的实例,或者是(直接、间接或 [虚拟](../glossary.xhtml#term-abstract-base-class))子类的实例,则返回 true。如果 *object* 不是给定类型的对象,函数始终返回 false。如果 *classinfo* 是对象类型(或多个递归元组)的元组,如果 *object* 是其中的任何一个的实例则返回 true。 如果 *classinfo* 既不是类型,也不是类型元组或类型的递归元组,那么会触发 [`TypeError`](exceptions.xhtml#TypeError "TypeError") 异常。
`issubclass`(*class*, *classinfo*)如果 *class* 是 *classinfo* 的子类(直接、间接或 [虚拟](../glossary.xhtml#term-abstract-base-class) 的),则返回 true。*classinfo* 可以是类对象的元组,此时 *classinfo* 中的每个元素都会被检查。其他情况,会触发 [`TypeError`](exceptions.xhtml#TypeError "TypeError") 异常。
`iter`(*object*\[, *sentinel*\])返回一个 [iterator](../glossary.xhtml#term-iterator) 对象。根据是否存在第二个实参,第一个实参的解释是非常不同的。如果没有第二个实参,*object* 必须是支持迭代协议(有 [`__iter__()`](../reference/datamodel.xhtml#object.__iter__ "object.__iter__") 方法)的集合对象,或必须支持序列协议(有 [`__getitem__()`](../reference/datamodel.xhtml#object.__getitem__ "object.__getitem__") 方法,且数字参数从 `0` 开始)。如果它不支持这些协议,会触发 [`TypeError`](exceptions.xhtml#TypeError "TypeError")。如果有第二个实参 *sentinel*,那么 *object* 必须是可调用的对象。这种情况下生成的迭代器,每次迭代调用它的 [`__next__()`](stdtypes.xhtml#iterator.__next__ "iterator.__next__") 方法时都会不带实参地调用 *object*;如果返回的结果是 *sentinel* 则触发 [`StopIteration`](exceptions.xhtml#StopIteration "StopIteration"),否则返回调用结果。
另请参阅 [迭代器类型](stdtypes.xhtml#typeiter)。
适合 [`iter()`](#iter "iter") 的第二种形式的应用之一是构建块读取器。 例如,从二进制数据库文件中读取固定宽度的块,直至到达文件的末尾:
```
from functools import partial
with open('mydata.db', 'rb') as f:
for block in iter(partial(f.read, 64), b''):
process_block(block)
```
`len`(*s*)返回对象的长度(元素个数)。实参可以是序列(如 string、bytes、tuple、list 或 range 等)或集合(如 dictionary、set 或 frozen set 等)。
*class* `list`(\[*iterable*\])除了是函数,[`list`](stdtypes.xhtml#list "list") 也是可变序列类型,详情请参阅 [列表](stdtypes.xhtml#typesseq-list) 和 [序列类型 --- list, tuple, range](stdtypes.xhtml#typesseq)。
`locals`()更新并返回表示当前本地符号表的字典。 在函数代码块但不是类代码块中调用 [`locals()`](#locals "locals") 时将返回自由变量。 请注意在模块层级上,[`locals()`](#locals "locals") 和 [`globals()`](#globals "globals") 是同一个字典。
注解
不要更改此字典的内容;更改不会影响解释器使用的局部变量或自由变量的值。
`map`(*function*, *iterable*, *...*)产生一个将 *function* 应用于迭代器中所有元素并返回结果的迭代器。如果传递了额外的 *iterable* 实参,*function* 必须接受相同个数的实参,并使用所有迭代器中并行获取的元素。当有多个迭代器时,最短的迭代器耗尽则整个迭代结束。如果函数的输入已经是元组实参,请参阅 [`itertools.starmap()`](itertools.xhtml#itertools.starmap "itertools.starmap")。
`max`(*iterable*, *\**\[, *key*, *default*\])`max`(*arg1*, *arg2*, *\*args*\[, *key*\])返回可迭代对象中最大的元素,或者返回两个及以上实参中最大的。
如果只提供了一个位置参数,它必须是非空 [iterable](../glossary.xhtml#term-iterable),返回可迭代对象中最大的元素;如果提供了两个及以上的位置参数,则返回最大的位置参数。
有两个可选只能用关键字的实参。*key* 实参指定排序函数用的参数,如传给 [`list.sort()`](stdtypes.xhtml#list.sort "list.sort") 的。*default* 实参是当可迭代对象为空时返回的值。如果可迭代对象为空,并且没有给 *default* ,则会触发 [`ValueError`](exceptions.xhtml#ValueError "ValueError")。
如果有多个最大元素,则此函数将返回第一个找到的。这和其他稳定排序工具如 `sorted(iterable, key=keyfunc, reverse=True)[0]` 和 `heapq.nlargest(1, iterable, key=keyfunc)` 保持一致。
3\.4 新版功能: keyword-only 实参 *default* 。
`memoryview`(*obj*)返回由给定实参创建的“内存视图”对象。有关详细信息,请参阅 [内存视图](stdtypes.xhtml#typememoryview)。
`min`(*iterable*, *\**\[, *key*, *default*\])`min`(*arg1*, *arg2*, *\*args*\[, *key*\])返回可迭代对象中最小的元素,或者返回两个及以上实参中最小的。
如果只提供了一个位置参数,它必须是 [iterable](../glossary.xhtml#term-iterable),返回可迭代对象中最小的元素;如果提供了两个及以上的位置参数,则返回最小的位置参数。
有两个可选只能用关键字的实参。*key* 实参指定排序函数用的参数,如传给 [`list.sort()`](stdtypes.xhtml#list.sort "list.sort") 的。*default* 实参是当可迭代对象为空时返回的值。如果可迭代对象为空,并且没有给 *default* ,则会触发 [`ValueError`](exceptions.xhtml#ValueError "ValueError")。
如果有多个最小元素,则此函数将返回第一个找到的。这和其他稳定排序工具如 `sorted(iterable, key=keyfunc)[0]` 和 `heapq.nsmallest(1, iterable, key=keyfunc)` 保持一致。
3\.4 新版功能: keyword-only 实参 *default* 。
`next`(*iterator*\[, *default*\])通过调用 *iterator* 的 [`__next__()`](stdtypes.xhtml#iterator.__next__ "iterator.__next__") 方法获取下一个元素。如果迭代器耗尽,则返回给定的 *default*,如果没有默认值则触发 [`StopIteration`](exceptions.xhtml#StopIteration "StopIteration")。
*class* `object`返回一个没有特征的新对象。[`object`](#object "object") 是所有类的基类。它具有所有 Python 类实例的通用方法。这个函数不接受任何实参。
注解
由于 [`object`](#object "object") 没有 [`__dict__`](stdtypes.xhtml#object.__dict__ "object.__dict__"),因此无法将任意属性赋给 [`object`](#object "object") 的实例。
`oct`(*x*)将一个整数转变为一个前缀为“0o”的八进制字符串。结果是一个合法的 Python 表达式。如果 *x* 不是 Python 的 [`int`](#int "int") 对象,那它需要定义 [`__index__()`](../reference/datamodel.xhtml#object.__index__ "object.__index__") 方法返回一个整数。一些例子:
```
>>> oct(8)
'0o10'
>>> oct(-56)
'-0o70'
```
如果要将整数转换为八进制字符串,并可选择有无“0o”前缀,则可以使用如下方法:
```
>>> '%#o' % 10, '%o' % 10
('0o12', '12')
>>> format(10, '#o'), format(10, 'o')
('0o12', '12')
>>> f'{10:#o}', f'{10:o}'
('0o12', '12')
```
另见 [`format()`](#format "format") 获取更多信息。
>
`open`(*file*, *mode='r'*, *buffering=-1*, *encoding=None*, *errors=None*, *newline=None*, *closefd=True*, *opener=None*)打开 *file* 并返回对应的 [file object](../glossary.xhtml#term-file-object)。如果该文件不能打开,则触发 [`OSError`](exceptions.xhtml#OSError "OSError")。
*file* 是一个 [path-like object](../glossary.xhtml#term-path-like-object),表示将要打开的文件的路径(绝对路径或者当前工作目录的相对路径),也可以是要被封装的整数类型文件描述符。(如果是文件描述符,它会随着返回的 I/O 对象关闭而关闭,除非 *closefd* 被设为 `False` 。)
*mode* 是一个可选字符串,用于指定打开文件的模式。默认值是 `'r'` ,这意味着它以文本模式打开并读取。其他常见模式有:写入 `'w'` (截断已经存在的文件);排它性创建 `'x'` ;追加写 `'a'` (在 *一些* Unix 系统上,无论当前的文件指针在什么位置,*所有* 写入都会追加到文件末尾)。在文本模式,如果 *encoding* 没有指定,则根据平台来决定使用的编码:使用 `locale.getpreferredencoding(False)` 来获取本地编码。(要读取和写入原始字节,请使用二进制模式并不要指定 *encoding*。)可用的模式有:
字符
意义
`'r'`
读取(默认)
`'w'`
写入,并先截断文件
`'x'`
排它性创建,如果文件已存在则失败
`'a'`
写入,如果文件存在则在末尾追加
`'b'`
二进制模式
`'t'`
文本模式(默认)
`'+'`
更新磁盘文件(读取并写入)
默认的模式是 `'r'` (打开并读取文本,同 `'rt'` )。对于二进制写入, `'w+b'` 模式打开并把文件截断成 0 字节; `'r+b'` 则不会截断。
正如在 [概述](io.xhtml#io-overview) 中提到的,Python区分二进制和文本I/O。以二进制模式打开的文件(包括 *mode* 参数中的 `'b'` )返回的内容为 `bytes`对象,不进行任何解码。在文本模式下(默认情况下,或者在 *mode* 参数中包含 ``'t'` )时,文件内容返回为 [`str`](stdtypes.xhtml#str "str") ,首先使用指定的 *encoding* (如果给定)或者使用平台默认的的字节编码解码。
此外还允许使用一个模式字符 `'U'`,该字符已不再具有任何效果,并被视为已弃用。 之前它会在文本模式中启用 [universal newlines](../glossary.xhtml#term-universal-newlines),这在 Python 3.0 中成为默认行为。 请参阅 [newline](#open-newline-parameter) 形参的文档了解更多细节。
注解
Python不依赖于底层操作系统的文本文件概念;所有处理都由Python本身完成,因此与平台无关。
*buffering* 是一个可选的整数,用于设置缓冲策略。传递0以切换缓冲关闭(仅允许在二进制模式下),1选择行缓冲(仅在文本模式下可用),并且>1的整数以指示固定大小的块缓冲区的大小(以字节为单位)。如果没有给出 *buffering* 参数,则默认缓冲策略的工作方式如下:
- 二进制文件以固定大小的块进行缓冲;使用启发式方法选择缓冲区的大小,尝试确定底层设备的“块大小”或使用 [`io.DEFAULT_BUFFER_SIZE`](io.xhtml#io.DEFAULT_BUFFER_SIZE "io.DEFAULT_BUFFER_SIZE")。在许多系统上,缓冲区的长度通常为4096或8192字节。
- “交互式”文本文件( [`isatty()`](io.xhtml#io.IOBase.isatty "io.IOBase.isatty") 返回 `True` 的文件)使用行缓冲。其他文本文件使用上述策略用于二进制文件。
*encoding* 是用于解码或编码文件的编码的名称。这应该只在文本模式下使用。默认编码是依赖于平台的(不 管 [`locale.getpreferredencoding()`](locale.xhtml#locale.getpreferredencoding "locale.getpreferredencoding") 返回何值),但可以使用任何Python支持的 [text encoding](../glossary.xhtml#term-text-encoding) 。有关支持的编码列表,请参阅 [`codecs`](codecs.xhtml#module-codecs "codecs: Encode and decode data and streams.") 模块。
*errors* 是一个可选的字符串参数,用于指定如何处理编码和解码错误 - 这不能在二进制模式下使用。可以使用各种标准错误处理程序(列在 [Error Handlers](codecs.xhtml#error-handlers) ),但是使用 [`codecs.register_error()`](codecs.xhtml#codecs.register_error "codecs.register_error") 注册的任何错误处理名称也是有效的。标准名称包括:
- 如果存在编码错误,`'strict'` 会引发 [`ValueError`](exceptions.xhtml#ValueError "ValueError") 异常。 默认值 `None` 具有相同的效果。
- `'ignore'` 忽略错误。请注意,忽略编码错误可能会导致数据丢失。
- `'replace'` 会将替换标记(例如 `'?'` )插入有错误数据的地方。
- `'surrogateescape'` 将表示任何不正确的字节作为Unicode专用区中的代码点,范围从U+DC80到U+DCFF。当在写入数据时使用 `surrogateescape` 错误处理程序时,这些私有代码点将被转回到相同的字节中。这对于处理未知编码的文件很有用。
- 只有在写入文件时才支持 `'xmlcharrefreplace'`。编码不支持的字符将替换为相应的XML字符引用 `&#nnn;`。
- `'backslashreplace'` 用Python的反向转义序列替换格式错误的数据。
- `'namereplace'` (也只在编写时支持)用 `\N{...}` 转义序列替换不支持的字符。
*newline* 控制 [universal newlines](../glossary.xhtml#term-universal-newlines) 模式如何生效(它仅适用于文本模式)。它可以是 `None`,`''`,`'\n'`,`'\r'` 和 `'\r\n'`。它的工作原理:
- 从流中读取输入时,如果 *newline* 为 `None`,则启用通用换行模式。输入中的行可以以 `'\n'`,`'\r'` 或 `'\r\n'` 结尾,这些行被翻译成 `'\n'` 在返回呼叫者之前。如果它是 `''`,则启用通用换行模式,但行结尾将返回给调用者未翻译。如果它具有任何其他合法值,则输入行仅由给定字符串终止,并且行结尾将返回给未调用的调用者。
- 将输出写入流时,如果 *newline* 为 `None`,则写入的任何 `'\n'` 字符都将转换为系统默认行分隔符 [`os.linesep`](os.xhtml#os.linesep "os.linesep")。如果 *newline* 是 `''` 或 `'\n'`,则不进行翻译。如果 *newline* 是任何其他合法值,则写入的任何 `'\n'` 字符将被转换为给定的字符串。
如果 *closefd* 是 `False` 并且给出了文件描述符而不是文件名,那么当文件关闭时,底层文件描述符将保持打开状态。如果给出文件名则 *closefd* 必须为 `True` (默认值),否则将引发错误。
可以通过传递可调用的 *opener* 来使用自定义开启器。然后通过使用参数( *file*,*flags* )调用 *opener* 获得文件对象的基础文件描述符。 *opener* 必须返回一个打开的文件描述符(使用 [`os.open`](os.xhtml#os.open "os.open") as *opener* 时与传递 `None` 的效果相同)。
新创建的文件是 [不可继承的](os.xhtml#fd-inheritance)。
下面的示例使用 [`os.open()`](os.xhtml#os.open "os.open") 函数的 [dir\_fd](os.xhtml#dir-fd) 的形参,从给定的目录中用相对路径打开文件:
```
>>> import os
>>> dir_fd = os.open('somedir', os.O_RDONLY)
>>> def opener(path, flags):
... return os.open(path, flags, dir_fd=dir_fd)
...
>>> with open('spamspam.txt', 'w', opener=opener) as f:
... print('This will be written to somedir/spamspam.txt', file=f)
...
>>> os.close(dir_fd) # don't leak a file descriptor
```
[`open()`](#open "open") 函数所返回的 [file object](../glossary.xhtml#term-file-object) 类型取决于所用模式。 当使用 [`open()`](#open "open") 以文本模式 (`'w'`, `'r'`, `'wt'`, `'rt'` 等) 打开文件时,它将返回 [`io.TextIOBase`](io.xhtml#io.TextIOBase "io.TextIOBase") (特别是 [`io.TextIOWrapper`](io.xhtml#io.TextIOWrapper "io.TextIOWrapper")) 的一个子类。 当使用缓冲以二进制模式打开文件时,返回的类是 [`io.BufferedIOBase`](io.xhtml#io.BufferedIOBase "io.BufferedIOBase") 的一个子类。 具体的类会有多种:在只读的二进制模式下,它将返回 [`io.BufferedReader`](io.xhtml#io.BufferedReader "io.BufferedReader");在写入二进制和追加二进制模式下,它将返回 [`io.BufferedWriter`](io.xhtml#io.BufferedWriter "io.BufferedWriter"),而在读/写模式下,它将返回 [`io.BufferedRandom`](io.xhtml#io.BufferedRandom "io.BufferedRandom")。 当禁用缓冲时,则会返回原始流,即 [`io.RawIOBase`](io.xhtml#io.RawIOBase "io.RawIOBase") 的一个子类 [`io.FileIO`](io.xhtml#io.FileIO "io.FileIO")。
另请参阅文件操作模块,例如 [`fileinput`](fileinput.xhtml#module-fileinput "fileinput: Loop over standard input or a list of files.")、[`io`](io.xhtml#module-io "io: Core tools for working with streams.") (声明了 [`open()`](#open "open"))、[`os`](os.xhtml#module-os "os: Miscellaneous operating system interfaces.")、[`os.path`](os.path.xhtml#module-os.path "os.path: Operations on pathnames.")、[`tempfile`](tempfile.xhtml#module-tempfile "tempfile: Generate temporary files and directories.") 和 [`shutil`](shutil.xhtml#module-shutil "shutil: High-level file operations, including copying.")。
> 在 3.3 版更改: - 增加了 *opener* 形参。
> - 增加了 `'x'` 模式。
> - 过去触发的 [`IOError`](exceptions.xhtml#IOError "IOError"),现在是 [`OSError`](exceptions.xhtml#OSError "OSError") 的别名。
> - 如果文件已存在但使用了排它性创建模式( `'x'` ),现在会触发 [`FileExistsError`](exceptions.xhtml#FileExistsError "FileExistsError")。
> 在 3.4 版更改: - 文件现在禁止继承。
Deprecated since version 3.4, will be removed in version 4.0: `'U'` 模式。
> 在 3.5 版更改: - 如果系统调用被中断,但信号处理程序没有触发异常,此函数现在会重试系统调用,而不是触发 [`InterruptedError`](exceptions.xhtml#InterruptedError "InterruptedError") 异常(原因详见 [**PEP 475**](https://www.python.org/dev/peps/pep-0475) \[https://www.python.org/dev/peps/pep-0475\])。
> - 增加了 `'namereplace'` 错误处理接口。
> 在 3.6 版更改: - 增加对实现了 [`os.PathLike`](os.xhtml#os.PathLike "os.PathLike") 对象的支持。
> - 在 Windows 上,打开一个控制台缓冲区将返回 [`io.RawIOBase`](io.xhtml#io.RawIOBase "io.RawIOBase") 的子类,而不是 [`io.FileIO`](io.xhtml#io.FileIO "io.FileIO")。
`ord`(*c*)对表示单个 Unicode 字符的字符串,返回代表它 Unicode 码点的整数。例如 `ord('a')` 返回整数 `97`, `ord('€')` (欧元符合)返回 `8364` 。这是 [`chr()`](#chr "chr") 的逆函数。
`pow`(*x*, *y*\[, *z*\])返回 *x* 的 *y* 次幂;如果 *z* 存在,则对 *z* 取余(比直接 `pow(x, y) % z` 计算更高效)。两个参数形式的 `pow(x, y)` 等价于幂运算符: `x**y`。
参数必须为数值类型。 对于混用的操作数类型,则适用二元算术运算符的类型强制转换规则。 对于 [`int`](#int "int") 操作数,结果具有与操作数相同的类型(转换后),除非第二个参数为负值;在这种情况下,所有参数将被转换为浮点数并输出浮点数结果。 例如,`10**2` 返回 `100`,但 `10**-2` 返回 `0.01`。 如果第二个参数为负值,则第三个参数必须省略。 如果存在 *z*,则 *x* 和 *y* 必须为整数类型,且 *y* 必须为非负数。
`print`(*\*objects*, *sep=' '*, *end='\\n'*, *file=sys.stdout*, *flush=False*)将 *objects* 打印到 *file* 指定的文本流,以 *sep* 分隔并在末尾加上 *end*。 *sep*, *end*, *file* 和 *flush* 如果存在,它们必须以关键字参数的形式给出。
所有非关键字参数都会被转换为字符串,就像是执行了 [`str()`](stdtypes.xhtml#str "str") 一样,并会被写入到流,以 *sep* 且在末尾加上 *end*。 *sep* 和 *end* 都必须为字符串;它们也可以为 `None`,这意味着使用默认值。 如果没有给出 *objects*,则 [`print()`](#print "print") 将只写入 *end*。
*file* 参数必须是一个具有 `write(string)` 方法的对象;如果参数不存在或为 `None`,则将使用 [`sys.stdout`](sys.xhtml#sys.stdout "sys.stdout")。 由于要打印的参数会被转换为文本字符串,因此 [`print()`](#print "print") 不能用于二进制模式的文件对象。 对于这些对象,应改用 `file.write(...)`。
输出是否被缓存通常决定于 *file*,但如果 *flush* 关键字参数为真值,流会被强制刷新。
在 3.3 版更改: 增加了 *flush* 关键字参数。
*class* `property`(*fget=None*, *fset=None*, *fdel=None*, *doc=None*)返回 property 属性。
*fget* 是获取属性值的函数。 *fset* 是用于设置属性值的函数。 *fdel* 是用于删除属性值的函数。并且 *doc* 为属性对象创建文档字符串。
一个典型的用法是定义一个托管属性 `x`:
```
class C:
def __init__(self):
self._x = None
def getx(self):
return self._x
def setx(self, value):
self._x = value
def delx(self):
del self._x
x = property(getx, setx, delx, "I'm the 'x' property.")
```
如果 *c* 是 *C* 的实例,`c.x` 将调用getter,`c.x = value` 将调用setter, `del c.x` 将调用deleter。
如果给出,*doc* 将成为该 property 属性的文档字符串。 否则该 property 将拷贝 *fget* 的文档字符串(如果存在)。 这令使用 [`property()`](#property "property") 作为 [decorator](../glossary.xhtml#term-decorator) 来创建只读的特征属性可以很容易地实现:
```
class Parrot:
def __init__(self):
self._voltage = 100000
@property
def voltage(self):
"""Get the current voltage."""
return self._voltage
```
以上 `@property` 装饰器会将 `voltage()` 方法转化为一个具有相同名称的只读属性的 "getter",并将 *voltage* 的文档字符串设置为 "Get the current voltage."
特征属性对象具有 `getter`, `setter` 以及 `deleter` 方法,它们可用作装饰器来创建该特征属性的副本,并将相应的访问函数设为所装饰的函数。 这最好是用一个例子来解释:
```
class C:
def __init__(self):
self._x = None
@property
def x(self):
"""I'm the 'x' property."""
return self._x
@x.setter
def x(self, value):
self._x = value
@x.deleter
def x(self):
del self._x
```
上述代码与第一个例子完全等价。 注意一定要给附加函数与原始的特征属性相同的名称 (在本例中为 `x`。)
返回的特征属性对象同样具有与构造器参数相对应的属性 `fget`, `fset` 和 `fdel`。
在 3.5 版更改: 特性属性对象的文档字符串现在是可写的。
`range`(*stop*)`range`(*start*, *stop*\[, *step*\])虽然被称为函数,但 [`range`](stdtypes.xhtml#range "range") 实际上是一个不可变的序列类型,参见在 [range 对象](stdtypes.xhtml#typesseq-range) 与 [序列类型 --- list, tuple, range](stdtypes.xhtml#typesseq) 中的文档说明。
`repr`(*object*)返回包含一个对象的可打印表示形式的字符串。 对于许多类型来说,该函数会尝试返回的字符串将会与该对象被传递给 [`eval()`](#eval "eval") 时所生成的对象具有相同的值,在其他情况下表示形式会是一个括在尖括号中的字符串,其中包含对象类型的名称与通常包括对象名称和地址的附加信息。 类可以通过定义 [`__repr__()`](../reference/datamodel.xhtml#object.__repr__ "object.__repr__") 方法来控制此函数为它的实例所返回的内容。
`reversed`(*seq*)返回一个反向的 [iterator](../glossary.xhtml#term-iterator)。 *seq* 必须是一个具有 [`__reversed__()`](../reference/datamodel.xhtml#object.__reversed__ "object.__reversed__") 方法的对象或者是支持该序列协议(具有从``0`` 开始的整数类型参数的 [`__len__()`](../reference/datamodel.xhtml#object.__len__ "object.__len__") 方法和 [`__getitem__()`](../reference/datamodel.xhtml#object.__getitem__ "object.__getitem__") 方法)。
`round`(*number*\[, *ndigits*\])返回 *number* 舍入到小数点后 *ndigits* 位精度的值。 如果 *ndigits* 被省略或为 `None`,则返回最接近输入值的整数。
对于支持 [`round()`](#round "round") 的内置类型,值会被舍入到最接近的 10 的负 *ndigits* 次幂的倍数;如果与两个倍数的距离相等,则选择偶数 (因此,`round(0.5)` 和 `round(-0.5)` 均为 `0` 而 `round(1.5)` 为 `2`)。 任何整数值都可作为有效的 *ndigits* (正数、零或负数)。 如果 *ndigits* 被省略或为 `None` 则返回值将为整数。 否则返回值与 *number* 的类型相同。
对于一般的 Python 对象 `number`, `round` 将委托给 `number.__round__`。
注解
对浮点数执行 [`round()`](#round "round") 的行为可能会令人惊讶:例如,`round(2.675, 2)` 将给出 `2.67` 而不是期望的 `2.68`。 这不算是程序错误:这一结果是由于大多数十进制小数实际上都不能以浮点数精确地表示。 请参阅 [浮点算术:争议和限制](../tutorial/floatingpoint.xhtml#tut-fp-issues) 了解更多信息。
*class* `set`(\[*iterable*\])返回一个新的 [`set`](stdtypes.xhtml#set "set") 对象,可以选择带有从 *iterable* 获取的元素。 `set` 是一个内置类型。 请查看 [`set`](stdtypes.xhtml#set "set") 和 [集合类型 --- set, frozenset](stdtypes.xhtml#types-set) 获取关于这个类的文档。
有关其他容器请参看内置的 [`frozenset`](stdtypes.xhtml#frozenset "frozenset"), [`list`](stdtypes.xhtml#list "list"), [`tuple`](stdtypes.xhtml#tuple "tuple") 和 [`dict`](stdtypes.xhtml#dict "dict") 类,以及 [`collections`](collections.xhtml#module-collections "collections: Container datatypes") 模块。
`setattr`(*object*, *name*, *value*)此函数与 [`getattr()`](#getattr "getattr") 两相对应。 其参数为一个对象、一个字符串和一个任意值。 字符串指定一个现有属性或者新增属性。 函数会将值赋给该属性,只要对象允许这种操作。 例如,`setattr(x, 'foobar', 123)` 等价于 `x.foobar = 123`。
*class* `slice`(*stop*)*class* `slice`(*start*, *stop*\[, *step*\])返回一个表示由 `range(start, stop, step)` 所指定索引集的 [slice](../glossary.xhtml#term-slice) 对象。 其中 *start* 和 *step* 参数默认为 `None`。 切片对象具有仅会返回对应参数值(或其默认值)的只读数据属性 `start`, `stop` 和 `step`。 它们没有其他的显式功能;不过它们会被 NumPy 以及其他第三方扩展所使用。 切片对象也会在使用扩展索引语法时被生成。 例如: `a[start:stop:step]` 或 `a[start:stop, i]`。 请参阅 [`itertools.islice()`](itertools.xhtml#itertools.islice "itertools.islice") 了解返回迭代器的一种替代版本。
`sorted`(*iterable*, *\**, *key=None*, *reverse=False*)根据 *iterable* 中的项返回一个新的已排序列表。
具有两个可选参数,它们都必须指定为关键字参数。
*key* 指定带有单个参数的函数,用于从 *iterable* 的每个元素中提取用于比较的键 (例如 `key=str.lower`)。 默认值为 `None` (直接比较元素)。
*reverse* 为一个布尔值。 如果设为 `True`,则每个列表元素将按反向顺序比较进行排序。
使用 [`functools.cmp_to_key()`](functools.xhtml#functools.cmp_to_key "functools.cmp_to_key") 可将老式的 *cmp* 函数转换为 *key* 函数。
内置的 [`sorted()`](#sorted "sorted") 确保是稳定的。 如果一个排序确保不会改变比较结果相等的元素的相对顺序就称其为稳定的 --- 这有利于进行多重排序(例如先按部门、再按薪级排序)。
有关排序示例和简要排序教程,请参阅 [排序指南](../howto/sorting.xhtml#sortinghowto) 。
`@``staticmethod`将方法转换为静态方法。
静态方法不会接收隐式的第一个参数。要声明一个静态方法,请使用此语法
```
class C:
@staticmethod
def f(arg1, arg2, ...): ...
```
`@staticmethod` 这样的形式称为函数的 [decorator](../glossary.xhtml#term-decorator) -- 详情参阅 [函数定义](../reference/compound_stmts.xhtml#function)。
静态方法的调用可以在类上进行 (例如 `C.f()`) 也可以在实例上进行 (例如 `C().f()`)。
Python中的静态方法与Java或C ++中的静态方法类似。另请参阅 [`classmethod()`](#classmethod "classmethod") ,用于创建备用类构造函数的变体。
像所有装饰器一样,也可以像常规函数一样调用 `staticmethod` ,并对其结果执行某些操作。比如某些情况下需要从类主体引用函数并且您希望避免自动转换为实例方法。对于这些情况,请使用此语法:
```
class C:
builtin_open = staticmethod(open)
```
想了解更多有关静态方法的信息,请参阅 [标准类型层级结构](../reference/datamodel.xhtml#types) 。
*class* `str`(*object=''*)*class* `str`(*object=b''*, *encoding='utf-8'*, *errors='strict'*)返回一个 [`str`](stdtypes.xhtml#str "str") 版本的 *object* 。有关详细信息,请参阅 [`str()`](stdtypes.xhtml#str "str") 。
`str` 是内置字符串 [class](../glossary.xhtml#term-class) 。更多关于字符串的信息查看 [文本序列类型 --- str](stdtypes.xhtml#textseq)。
`sum`(*iterable*\[, *start*\])从 *start* 开始自左向右对 *iterable* 中的项求和并返回总计值。 *start* 默认为 `0`。 *iterable* 的项通常为数字,开始值则不允许为字符串。
对某些用例来说,存在 [`sum()`](#sum "sum") 的更好替代。 拼接字符串序列的更好更快方式是调用 `''.join(sequence)`。 要以扩展精度对浮点值求和,请参阅 [`math.fsum()`](math.xhtml#math.fsum "math.fsum")。 要拼接一系列可迭代对象,请考虑使用 [`itertools.chain()`](itertools.xhtml#itertools.chain "itertools.chain")。
`super`(\[*type*\[, *object-or-type*\]\])返回一个代理对象,它会将方法调用委托给 *type* 指定的父类或兄弟类。 这对于访问已在类中被重载的继承方法很有用。 搜索顺序与 [`getattr()`](#getattr "getattr") 所使用的相同,只是 *type* 指定的类型本身会被跳过。
*type* 的 [`__mro__`](stdtypes.xhtml#class.__mro__ "class.__mro__") 属性列出了 [`getattr()`](#getattr "getattr") 和 [`super()`](#super "super") 所使用的方法解析顺序。 该属性是动态的,可以在继承层级结构更新的时候任意改变。
如果省略第二个参数,则返回的超类对象是未绑定的。 如果第二个参数为一个对象,则 `isinstance(obj, type)` 必须为真值。 如果第二个参数为一个类型,则 `issubclass(type2, type)` 必须为真值(这适用于类方法)。
*super* 有两个典型用例。 在具有单继承的类层级结构中,*super* 可用来引用父类而不必显式地指定它们的名称,从而令代码更易维护。 这种用法与其他编程语言中 *super* 的用法非常相似。
第二个用例是在动态执行环境中支持协作多重继承。 此用例为 Python 所独有,在静态编译语言或仅支持单继承的语言中是不存在的。 这使得实现“菱形图”成为可能,在这时会有多个基类实现相同的方法。 好的设计强制要求这种方法在每个情况下具有相同的调用签名(因为调用顺序是在运行时确定的,也因为该顺序要适应类层级结构的更改,还因为该顺序可能包含在运行时之前未知的兄弟类)。
对于以上两个用例,典型的超类调用看起来是这样的:
```
class C(B):
def method(self, arg):
super().method(arg) # This does the same thing as:
# super(C, self).method(arg)
```
请注意 [`super()`](#super "super") 是作为显式加点属性查找的绑定过程的一部分来实现的,例如 `super().__getitem__(name)`。 它做到这一点是通过实现自己的 [`__getattribute__()`](../reference/datamodel.xhtml#object.__getattribute__ "object.__getattribute__") 方法,这样就能以可预测的顺序搜索类,并且支持协作多重继承。 对应地,[`super()`](#super "super") 在像 `super()[name]` 这样使用语句或操作符进行隐式查找时则未被定义。
还要注意的是,除了零个参数的形式以外,[`super()`](#super "super") 并不限于在方法内部傅和。 两个参数的形式明确指定参数并进行相应的引用。 零个参数的形式仅适用于类定义内部,因为编译器需要填入必要的细节以正确地检索到被定义的类,还需要为普通访问当前实例。
对于有关如何使用 [`super()`](#super "super") 来如何设计协作类的实用建议,请参阅 [使用 super() 的指南](https://rhettinger.wordpress.com/2011/05/26/super-considered-super/) \[https://rhettinger.wordpress.com/2011/05/26/super-considered-super/\]。
`tuple`(\[*iterable*\])虽然被称为函数,但 [`tuple`](stdtypes.xhtml#tuple "tuple") 实际上是一个不可变的序列类型,参见在 [元组](stdtypes.xhtml#typesseq-tuple) 与 [序列类型 --- list, tuple, range](stdtypes.xhtml#typesseq) 中的文档说明。
*class* `type`(*object*)*class* `type`(*name*, *bases*, *dict*)传入一个参数时,返回 *object* 的类型。 返回值是一个 type 对象,通常与 [`object.__class__`](stdtypes.xhtml#instance.__class__ "instance.__class__") 所返回的对象相同。
推荐使用 [`isinstance()`](#isinstance "isinstance") 内置函数来检测对象的类型,因为它会考虑子类的情况。
传入三个参数时,返回一个新的 type 对象。 这在本质上是 [`class`](../reference/compound_stmts.xhtml#class) 语句的一种动态形式。 *name* 字符串即类名并且会成为 [`__name__`](stdtypes.xhtml#definition.__name__ "definition.__name__") 属性;*bases* 元组列出基类并且会成为 [`__bases__`](stdtypes.xhtml#class.__bases__ "class.__bases__") 属性;而 *dict* 字典为包含类主体定义的命名空间并且会被复制到一个标准字典成为 [`__dict__`](stdtypes.xhtml#object.__dict__ "object.__dict__") 属性。 例如,下面两条语句会创建相同的 [`type`](#type "type") 对象:
```
>>> class X:
... a = 1
...
>>> X = type('X', (object,), dict(a=1))
```
另请参阅 [类型对象](stdtypes.xhtml#bltin-type-objects)。
在 3.6 版更改: [`type`](#type "type") 的子类如果未重载 `type.__new__`,将不再能使用一个参数的形式来获取对象的类型。
`vars`(\[*object*\])返回模块、类、实例或任何其它具有 [`__dict__`](stdtypes.xhtml#object.__dict__ "object.__dict__") 属性的对象的 [`__dict__`](stdtypes.xhtml#object.__dict__ "object.__dict__") 属性。
模块和实例这样的对象具有可更新的 [`__dict__`](stdtypes.xhtml#object.__dict__ "object.__dict__") 属性;但是,其它对象的 [`__dict__`](stdtypes.xhtml#object.__dict__ "object.__dict__") 属性可能会设为限制写入(例如,类会使用 [`types.MappingProxyType`](types.xhtml#types.MappingProxyType "types.MappingProxyType") 来防止直接更新字典)。
不带参数时,[`vars()`](#vars "vars") 的行为类似 [`locals()`](#locals "locals")。 请注意,locals 字典仅对于读取起作用,因为对 locals 字典的更新会被忽略。
`zip`(*\*iterables*)创建一个聚合了来自每个可迭代对象中的元素的迭代器。
返回一个元组的迭代器,其中的第 *i* 个元组包含来自每个参数序列或可迭代对象的第 *i* 个元素。 当所输入可迭代对象中最短的一个被耗尽时,迭代器将停止迭代。 当只有一个可迭代对象参数时,它将返回一个单元组的迭代器。 不带参数时,它将返回一个空迭代器。 相当于:
```
def zip(*iterables):
# zip('ABCD', 'xy') --> Ax By
sentinel = object()
iterators = [iter(it) for it in iterables]
while iterators:
result = []
for it in iterators:
elem = next(it, sentinel)
if elem is sentinel:
return
result.append(elem)
yield tuple(result)
```
函数会保证可迭代对象按从左至右的顺序被求值。 使得可以通过 `zip(*[iter(s)]*n)` 这样的惯用形式将一系列数据聚类为长度为 n 的分组。 这将重复 *同样的* 迭代器 `n` 次,以便每个输出的元组具有第 `n` 次调用该迭代器的结果。 它的作用效果就是将输入拆分为长度为 n 的数据块。
当你不用关心较长可迭代对象末尾不匹配的值时,则 [`zip()`](#zip "zip") 只须使用长度不相等的输入即可。 如果那些值很重要,则应改用 [`itertools.zip_longest()`](itertools.xhtml#itertools.zip_longest "itertools.zip_longest")。
[`zip()`](#zip "zip") 与 `*` 运算符相结合可以用来拆解一个列表:
```
>>> x = [1, 2, 3]
>>> y = [4, 5, 6]
>>> zipped = zip(x, y)
>>> list(zipped)
[(1, 4), (2, 5), (3, 6)]
>>> x2, y2 = zip(*zip(x, y))
>>> x == list(x2) and y == list(y2)
True
```
`__import__`(*name*, *globals=None*, *locals=None*, *fromlist=()*, *level=0*)注解
与 [`importlib.import_module()`](importlib.xhtml#importlib.import_module "importlib.import_module") 不同,这是一个日常 Python 编程中不需要用到的高级函数。
此函数会由 [`import`](../reference/simple_stmts.xhtml#import) 语句发起调用。 它可以被替换 (通过导入 [`builtins`](builtins.xhtml#module-builtins "builtins: The module that provides the built-in namespace.") 模块并赋值给 `builtins.__import__`) 以便修改 `import` 语句的语义,但是 **强烈** 不建议这样做,因为使用导入钩子 (参见 [**PEP 302**](https://www.python.org/dev/peps/pep-0302) \[https://www.python.org/dev/peps/pep-0302\]) 通常更容易实现同样的目标,并且不会导致代码问题,因为许多代码都会假定所用的是默认实现。 同样也不建议直接使用 [`__import__()`](#__import__ "__import__") 而应该用 [`importlib.import_module()`](importlib.xhtml#importlib.import_module "importlib.import_module")。
该函数会导入 *name* 模块,有可能使用给定的 *globals* 和 *locals* 来确定如何在包的上下文中解读名称。 *fromlist* 给出了应该从由 *name* 指定的模块导入对象或子模块的名称。 标准实现完全不使用其 *locals* 参数,而仅使用 *globals* 参数来确定 [`import`](../reference/simple_stmts.xhtml#import) 语句的包上下文。
*level* 指定是使用绝对还是相对导入。 `0` (默认值) 意味着仅执行绝对导入。 *level* 为正数值表示相对于模块调用 [`__import__()`](#__import__ "__import__") 的目录,将要搜索的父目录层数 (详情参见 [**PEP 328**](https://www.python.org/dev/peps/pep-0328) \[https://www.python.org/dev/peps/pep-0328\])。
当 *name* 变量的形式为 `package.module` 时,通常将会返回最高层级的包(第一个点号之前的名称),而 *不是* 以 *name* 命名的模块。 但是,当给出了非空的 *fromlist* 参数时,则将返回以 *name* 命名的模块。
例如,语句 `import spam` 的结果将为与以下代码作用相同的字节码:
```
spam = __import__('spam', globals(), locals(), [], 0)
```
语句 `import spam.ham` 的结果将为以下调用:
```
spam = __import__('spam.ham', globals(), locals(), [], 0)
```
请注意在这里 [`__import__()`](#__import__ "__import__") 是如何返回顶层模块的,因为这是通过 [`import`](../reference/simple_stmts.xhtml#import) 语句被绑定到特定名称的对象。
另一方面,语句 `from spam.ham import eggs, sausage as saus` 的结果将为
```
_temp = __import__('spam.ham', globals(), locals(), ['eggs', 'sausage'], 0)
eggs = _temp.eggs
saus = _temp.sausage
```
在这里, `spam.ham` 模块会由 [`__import__()`](#__import__ "__import__") 返回。 要导入的对象将从此对象中提取并赋值给它们对应的名称。
如果您只想按名称导入模块(可能在包中),请使用 [`importlib.import_module()`](importlib.xhtml#importlib.import_module "importlib.import_module")
在 3.3 版更改: Negative values for *level* are no longer supported (which also changes the default value to 0).
脚注
[1](#id1)解析器只接受 Unix 风格的行结束符。如果您从文件中读取代码,请确保用换行符转换模式转换 Windows 或 Mac 风格的换行符。
### 导航
- [索引](../genindex.xhtml "总目录")
- [模块](../py-modindex.xhtml "Python 模块索引") |
- [下一页](constants.xhtml "内置常量") |
- [上一页](intro.xhtml "概述") |
- ![](https://box.kancloud.cn/a721fc7ec672275e257bbbfde49a4d4e_16x16.png)
- [Python](https://www.python.org/) »
- zh\_CN 3.7.3 [文档](../index.xhtml) »
- [Python 标准库](index.xhtml) »
- $('.inline-search').show(0); |
© [版权所有](../copyright.xhtml) 2001-2019, Python Software Foundation.
Python 软件基金会是一个非盈利组织。 [请捐助。](https://www.python.org/psf/donations/)
最后更新于 5月 21, 2019. [发现了问题](../bugs.xhtml)?
使用[Sphinx](http://sphinx.pocoo.org/)1.8.4 创建。
- Python文档内容
- Python 有什么新变化?
- Python 3.7 有什么新变化
- 摘要 - 发布重点
- 新的特性
- 其他语言特性修改
- 新增模块
- 改进的模块
- C API 的改变
- 构建的改变
- 性能优化
- 其他 CPython 实现的改变
- 已弃用的 Python 行为
- 已弃用的 Python 模块、函数和方法
- 已弃用的 C API 函数和类型
- 平台支持的移除
- API 与特性的移除
- 移除的模块
- Windows 专属的改变
- 移植到 Python 3.7
- Python 3.7.1 中的重要变化
- Python 3.7.2 中的重要变化
- Python 3.6 有什么新变化A
- 摘要 - 发布重点
- 新的特性
- 其他语言特性修改
- 新增模块
- 改进的模块
- 性能优化
- Build and C API Changes
- 其他改进
- 弃用
- 移除
- 移植到Python 3.6
- Python 3.6.2 中的重要变化
- Python 3.6.4 中的重要变化
- Python 3.6.5 中的重要变化
- Python 3.6.7 中的重要变化
- Python 3.5 有什么新变化
- 摘要 - 发布重点
- 新的特性
- 其他语言特性修改
- 新增模块
- 改进的模块
- Other module-level changes
- 性能优化
- Build and C API Changes
- 弃用
- 移除
- Porting to Python 3.5
- Notable changes in Python 3.5.4
- What's New In Python 3.4
- 摘要 - 发布重点
- 新的特性
- 新增模块
- 改进的模块
- CPython Implementation Changes
- 弃用
- 移除
- Porting to Python 3.4
- Changed in 3.4.3
- What's New In Python 3.3
- 摘要 - 发布重点
- PEP 405: Virtual Environments
- PEP 420: Implicit Namespace Packages
- PEP 3118: New memoryview implementation and buffer protocol documentation
- PEP 393: Flexible String Representation
- PEP 397: Python Launcher for Windows
- PEP 3151: Reworking the OS and IO exception hierarchy
- PEP 380: Syntax for Delegating to a Subgenerator
- PEP 409: Suppressing exception context
- PEP 414: Explicit Unicode literals
- PEP 3155: Qualified name for classes and functions
- PEP 412: Key-Sharing Dictionary
- PEP 362: Function Signature Object
- PEP 421: Adding sys.implementation
- Using importlib as the Implementation of Import
- 其他语言特性修改
- A Finer-Grained Import Lock
- Builtin functions and types
- 新增模块
- 改进的模块
- 性能优化
- Build and C API Changes
- 弃用
- Porting to Python 3.3
- What's New In Python 3.2
- PEP 384: Defining a Stable ABI
- PEP 389: Argparse Command Line Parsing Module
- PEP 391: Dictionary Based Configuration for Logging
- PEP 3148: The concurrent.futures module
- PEP 3147: PYC Repository Directories
- PEP 3149: ABI Version Tagged .so Files
- PEP 3333: Python Web Server Gateway Interface v1.0.1
- 其他语言特性修改
- New, Improved, and Deprecated Modules
- 多线程
- 性能优化
- Unicode
- Codecs
- 文档
- IDLE
- Code Repository
- Build and C API Changes
- Porting to Python 3.2
- What's New In Python 3.1
- PEP 372: Ordered Dictionaries
- PEP 378: Format Specifier for Thousands Separator
- 其他语言特性修改
- New, Improved, and Deprecated Modules
- 性能优化
- IDLE
- Build and C API Changes
- Porting to Python 3.1
- What's New In Python 3.0
- Common Stumbling Blocks
- Overview Of Syntax Changes
- Changes Already Present In Python 2.6
- Library Changes
- PEP 3101: A New Approach To String Formatting
- Changes To Exceptions
- Miscellaneous Other Changes
- Build and C API Changes
- 性能
- Porting To Python 3.0
- What's New in Python 2.7
- The Future for Python 2.x
- Changes to the Handling of Deprecation Warnings
- Python 3.1 Features
- PEP 372: Adding an Ordered Dictionary to collections
- PEP 378: Format Specifier for Thousands Separator
- PEP 389: The argparse Module for Parsing Command Lines
- PEP 391: Dictionary-Based Configuration For Logging
- PEP 3106: Dictionary Views
- PEP 3137: The memoryview Object
- 其他语言特性修改
- New and Improved Modules
- Build and C API Changes
- Other Changes and Fixes
- Porting to Python 2.7
- New Features Added to Python 2.7 Maintenance Releases
- Acknowledgements
- Python 2.6 有什么新变化
- Python 3.0
- Changes to the Development Process
- PEP 343: The 'with' statement
- PEP 366: Explicit Relative Imports From a Main Module
- PEP 370: Per-user site-packages Directory
- PEP 371: The multiprocessing Package
- PEP 3101: Advanced String Formatting
- PEP 3105: print As a Function
- PEP 3110: Exception-Handling Changes
- PEP 3112: Byte Literals
- PEP 3116: New I/O Library
- PEP 3118: Revised Buffer Protocol
- PEP 3119: Abstract Base Classes
- PEP 3127: Integer Literal Support and Syntax
- PEP 3129: Class Decorators
- PEP 3141: A Type Hierarchy for Numbers
- 其他语言特性修改
- New and Improved Modules
- Deprecations and Removals
- Build and C API Changes
- Porting to Python 2.6
- Acknowledgements
- What's New in Python 2.5
- PEP 308: Conditional Expressions
- PEP 309: Partial Function Application
- PEP 314: Metadata for Python Software Packages v1.1
- PEP 328: Absolute and Relative Imports
- PEP 338: Executing Modules as Scripts
- PEP 341: Unified try/except/finally
- PEP 342: New Generator Features
- PEP 343: The 'with' statement
- PEP 352: Exceptions as New-Style Classes
- PEP 353: Using ssize_t as the index type
- PEP 357: The 'index' method
- 其他语言特性修改
- New, Improved, and Removed Modules
- Build and C API Changes
- Porting to Python 2.5
- Acknowledgements
- What's New in Python 2.4
- PEP 218: Built-In Set Objects
- PEP 237: Unifying Long Integers and Integers
- PEP 289: Generator Expressions
- PEP 292: Simpler String Substitutions
- PEP 318: Decorators for Functions and Methods
- PEP 322: Reverse Iteration
- PEP 324: New subprocess Module
- PEP 327: Decimal Data Type
- PEP 328: Multi-line Imports
- PEP 331: Locale-Independent Float/String Conversions
- 其他语言特性修改
- New, Improved, and Deprecated Modules
- Build and C API Changes
- Porting to Python 2.4
- Acknowledgements
- What's New in Python 2.3
- PEP 218: A Standard Set Datatype
- PEP 255: Simple Generators
- PEP 263: Source Code Encodings
- PEP 273: Importing Modules from ZIP Archives
- PEP 277: Unicode file name support for Windows NT
- PEP 278: Universal Newline Support
- PEP 279: enumerate()
- PEP 282: The logging Package
- PEP 285: A Boolean Type
- PEP 293: Codec Error Handling Callbacks
- PEP 301: Package Index and Metadata for Distutils
- PEP 302: New Import Hooks
- PEP 305: Comma-separated Files
- PEP 307: Pickle Enhancements
- Extended Slices
- 其他语言特性修改
- New, Improved, and Deprecated Modules
- Pymalloc: A Specialized Object Allocator
- Build and C API Changes
- Other Changes and Fixes
- Porting to Python 2.3
- Acknowledgements
- What's New in Python 2.2
- 概述
- PEPs 252 and 253: Type and Class Changes
- PEP 234: Iterators
- PEP 255: Simple Generators
- PEP 237: Unifying Long Integers and Integers
- PEP 238: Changing the Division Operator
- Unicode Changes
- PEP 227: Nested Scopes
- New and Improved Modules
- Interpreter Changes and Fixes
- Other Changes and Fixes
- Acknowledgements
- What's New in Python 2.1
- 概述
- PEP 227: Nested Scopes
- PEP 236: future Directives
- PEP 207: Rich Comparisons
- PEP 230: Warning Framework
- PEP 229: New Build System
- PEP 205: Weak References
- PEP 232: Function Attributes
- PEP 235: Importing Modules on Case-Insensitive Platforms
- PEP 217: Interactive Display Hook
- PEP 208: New Coercion Model
- PEP 241: Metadata in Python Packages
- New and Improved Modules
- Other Changes and Fixes
- Acknowledgements
- What's New in Python 2.0
- 概述
- What About Python 1.6?
- New Development Process
- Unicode
- 列表推导式
- Augmented Assignment
- 字符串的方法
- Garbage Collection of Cycles
- Other Core Changes
- Porting to 2.0
- Extending/Embedding Changes
- Distutils: Making Modules Easy to Install
- XML Modules
- Module changes
- New modules
- IDLE Improvements
- Deleted and Deprecated Modules
- Acknowledgements
- 更新日志
- Python 下一版
- Python 3.7.3 最终版
- Python 3.7.3 发布候选版 1
- Python 3.7.2 最终版
- Python 3.7.2 发布候选版 1
- Python 3.7.1 最终版
- Python 3.7.1 RC 2版本
- Python 3.7.1 发布候选版 1
- Python 3.7.0 正式版
- Python 3.7.0 release candidate 1
- Python 3.7.0 beta 5
- Python 3.7.0 beta 4
- Python 3.7.0 beta 3
- Python 3.7.0 beta 2
- Python 3.7.0 beta 1
- Python 3.7.0 alpha 4
- Python 3.7.0 alpha 3
- Python 3.7.0 alpha 2
- Python 3.7.0 alpha 1
- Python 3.6.6 final
- Python 3.6.6 RC 1
- Python 3.6.5 final
- Python 3.6.5 release candidate 1
- Python 3.6.4 final
- Python 3.6.4 release candidate 1
- Python 3.6.3 final
- Python 3.6.3 release candidate 1
- Python 3.6.2 final
- Python 3.6.2 release candidate 2
- Python 3.6.2 release candidate 1
- Python 3.6.1 final
- Python 3.6.1 release candidate 1
- Python 3.6.0 final
- Python 3.6.0 release candidate 2
- Python 3.6.0 release candidate 1
- Python 3.6.0 beta 4
- Python 3.6.0 beta 3
- Python 3.6.0 beta 2
- Python 3.6.0 beta 1
- Python 3.6.0 alpha 4
- Python 3.6.0 alpha 3
- Python 3.6.0 alpha 2
- Python 3.6.0 alpha 1
- Python 3.5.5 final
- Python 3.5.5 release candidate 1
- Python 3.5.4 final
- Python 3.5.4 release candidate 1
- Python 3.5.3 final
- Python 3.5.3 release candidate 1
- Python 3.5.2 final
- Python 3.5.2 release candidate 1
- Python 3.5.1 final
- Python 3.5.1 release candidate 1
- Python 3.5.0 final
- Python 3.5.0 release candidate 4
- Python 3.5.0 release candidate 3
- Python 3.5.0 release candidate 2
- Python 3.5.0 release candidate 1
- Python 3.5.0 beta 4
- Python 3.5.0 beta 3
- Python 3.5.0 beta 2
- Python 3.5.0 beta 1
- Python 3.5.0 alpha 4
- Python 3.5.0 alpha 3
- Python 3.5.0 alpha 2
- Python 3.5.0 alpha 1
- Python 教程
- 课前甜点
- 使用 Python 解释器
- 调用解释器
- 解释器的运行环境
- Python 的非正式介绍
- Python 作为计算器使用
- 走向编程的第一步
- 其他流程控制工具
- if 语句
- for 语句
- range() 函数
- break 和 continue 语句,以及循环中的 else 子句
- pass 语句
- 定义函数
- 函数定义的更多形式
- 小插曲:编码风格
- 数据结构
- 列表的更多特性
- del 语句
- 元组和序列
- 集合
- 字典
- 循环的技巧
- 深入条件控制
- 序列和其它类型的比较
- 模块
- 有关模块的更多信息
- 标准模块
- dir() 函数
- 包
- 输入输出
- 更漂亮的输出格式
- 读写文件
- 错误和异常
- 语法错误
- 异常
- 处理异常
- 抛出异常
- 用户自定义异常
- 定义清理操作
- 预定义的清理操作
- 类
- 名称和对象
- Python 作用域和命名空间
- 初探类
- 补充说明
- 继承
- 私有变量
- 杂项说明
- 迭代器
- 生成器
- 生成器表达式
- 标准库简介
- 操作系统接口
- 文件通配符
- 命令行参数
- 错误输出重定向和程序终止
- 字符串模式匹配
- 数学
- 互联网访问
- 日期和时间
- 数据压缩
- 性能测量
- 质量控制
- 自带电池
- 标准库简介 —— 第二部分
- 格式化输出
- 模板
- 使用二进制数据记录格式
- 多线程
- 日志
- 弱引用
- 用于操作列表的工具
- 十进制浮点运算
- 虚拟环境和包
- 概述
- 创建虚拟环境
- 使用pip管理包
- 接下来?
- 交互式编辑和编辑历史
- Tab 补全和编辑历史
- 默认交互式解释器的替代品
- 浮点算术:争议和限制
- 表示性错误
- 附录
- 交互模式
- 安装和使用 Python
- 命令行与环境
- 命令行
- 环境变量
- 在Unix平台中使用Python
- 获取最新版本的Python
- 构建Python
- 与Python相关的路径和文件
- 杂项
- 编辑器和集成开发环境
- 在Windows上使用 Python
- 完整安装程序
- Microsoft Store包
- nuget.org 安装包
- 可嵌入的包
- 替代捆绑包
- 配置Python
- 适用于Windows的Python启动器
- 查找模块
- 附加模块
- 在Windows上编译Python
- 其他平台
- 在苹果系统上使用 Python
- 获取和安装 MacPython
- IDE
- 安装额外的 Python 包
- Mac 上的图形界面编程
- 在 Mac 上分发 Python 应用程序
- 其他资源
- Python 语言参考
- 概述
- 其他实现
- 标注
- 词法分析
- 行结构
- 其他形符
- 标识符和关键字
- 字面值
- 运算符
- 分隔符
- 数据模型
- 对象、值与类型
- 标准类型层级结构
- 特殊方法名称
- 协程
- 执行模型
- 程序的结构
- 命名与绑定
- 异常
- 导入系统
- importlib
- 包
- 搜索
- 加载
- 基于路径的查找器
- 替换标准导入系统
- Package Relative Imports
- 有关 main 的特殊事项
- 开放问题项
- 参考文献
- 表达式
- 算术转换
- 原子
- 原型
- await 表达式
- 幂运算符
- 一元算术和位运算
- 二元算术运算符
- 移位运算
- 二元位运算
- 比较运算
- 布尔运算
- 条件表达式
- lambda 表达式
- 表达式列表
- 求值顺序
- 运算符优先级
- 简单语句
- 表达式语句
- 赋值语句
- assert 语句
- pass 语句
- del 语句
- return 语句
- yield 语句
- raise 语句
- break 语句
- continue 语句
- import 语句
- global 语句
- nonlocal 语句
- 复合语句
- if 语句
- while 语句
- for 语句
- try 语句
- with 语句
- 函数定义
- 类定义
- 协程
- 最高层级组件
- 完整的 Python 程序
- 文件输入
- 交互式输入
- 表达式输入
- 完整的语法规范
- Python 标准库
- 概述
- 可用性注释
- 内置函数
- 内置常量
- 由 site 模块添加的常量
- 内置类型
- 逻辑值检测
- 布尔运算 — and, or, not
- 比较
- 数字类型 — int, float, complex
- 迭代器类型
- 序列类型 — list, tuple, range
- 文本序列类型 — str
- 二进制序列类型 — bytes, bytearray, memoryview
- 集合类型 — set, frozenset
- 映射类型 — dict
- 上下文管理器类型
- 其他内置类型
- 特殊属性
- 内置异常
- 基类
- 具体异常
- 警告
- 异常层次结构
- 文本处理服务
- string — 常见的字符串操作
- re — 正则表达式操作
- 模块 difflib 是一个计算差异的助手
- textwrap — Text wrapping and filling
- unicodedata — Unicode 数据库
- stringprep — Internet String Preparation
- readline — GNU readline interface
- rlcompleter — GNU readline的完成函数
- 二进制数据服务
- struct — Interpret bytes as packed binary data
- codecs — Codec registry and base classes
- 数据类型
- datetime — 基础日期/时间数据类型
- calendar — General calendar-related functions
- collections — 容器数据类型
- collections.abc — 容器的抽象基类
- heapq — 堆队列算法
- bisect — Array bisection algorithm
- array — Efficient arrays of numeric values
- weakref — 弱引用
- types — Dynamic type creation and names for built-in types
- copy — 浅层 (shallow) 和深层 (deep) 复制操作
- pprint — 数据美化输出
- reprlib — Alternate repr() implementation
- enum — Support for enumerations
- 数字和数学模块
- numbers — 数字的抽象基类
- math — 数学函数
- cmath — Mathematical functions for complex numbers
- decimal — 十进制定点和浮点运算
- fractions — 分数
- random — 生成伪随机数
- statistics — Mathematical statistics functions
- 函数式编程模块
- itertools — 为高效循环而创建迭代器的函数
- functools — 高阶函数和可调用对象上的操作
- operator — 标准运算符替代函数
- 文件和目录访问
- pathlib — 面向对象的文件系统路径
- os.path — 常见路径操作
- fileinput — Iterate over lines from multiple input streams
- stat — Interpreting stat() results
- filecmp — File and Directory Comparisons
- tempfile — Generate temporary files and directories
- glob — Unix style pathname pattern expansion
- fnmatch — Unix filename pattern matching
- linecache — Random access to text lines
- shutil — High-level file operations
- macpath — Mac OS 9 路径操作函数
- 数据持久化
- pickle —— Python 对象序列化
- copyreg — Register pickle support functions
- shelve — Python object persistence
- marshal — Internal Python object serialization
- dbm — Interfaces to Unix “databases”
- sqlite3 — SQLite 数据库 DB-API 2.0 接口模块
- 数据压缩和存档
- zlib — 与 gzip 兼容的压缩
- gzip — 对 gzip 格式的支持
- bz2 — 对 bzip2 压缩算法的支持
- lzma — 用 LZMA 算法压缩
- zipfile — 在 ZIP 归档中工作
- tarfile — Read and write tar archive files
- 文件格式
- csv — CSV 文件读写
- configparser — Configuration file parser
- netrc — netrc file processing
- xdrlib — Encode and decode XDR data
- plistlib — Generate and parse Mac OS X .plist files
- 加密服务
- hashlib — 安全哈希与消息摘要
- hmac — 基于密钥的消息验证
- secrets — Generate secure random numbers for managing secrets
- 通用操作系统服务
- os — 操作系统接口模块
- io — 处理流的核心工具
- time — 时间的访问和转换
- argparse — 命令行选项、参数和子命令解析器
- getopt — C-style parser for command line options
- 模块 logging — Python 的日志记录工具
- logging.config — 日志记录配置
- logging.handlers — Logging handlers
- getpass — 便携式密码输入工具
- curses — 终端字符单元显示的处理
- curses.textpad — Text input widget for curses programs
- curses.ascii — Utilities for ASCII characters
- curses.panel — A panel stack extension for curses
- platform — Access to underlying platform's identifying data
- errno — Standard errno system symbols
- ctypes — Python 的外部函数库
- 并发执行
- threading — 基于线程的并行
- multiprocessing — 基于进程的并行
- concurrent 包
- concurrent.futures — 启动并行任务
- subprocess — 子进程管理
- sched — 事件调度器
- queue — 一个同步的队列类
- _thread — 底层多线程 API
- _dummy_thread — _thread 的替代模块
- dummy_threading — 可直接替代 threading 模块。
- contextvars — Context Variables
- Context Variables
- Manual Context Management
- asyncio support
- 网络和进程间通信
- asyncio — 异步 I/O
- socket — 底层网络接口
- ssl — TLS/SSL wrapper for socket objects
- select — Waiting for I/O completion
- selectors — 高级 I/O 复用库
- asyncore — 异步socket处理器
- asynchat — 异步 socket 指令/响应 处理器
- signal — Set handlers for asynchronous events
- mmap — Memory-mapped file support
- 互联网数据处理
- email — 电子邮件与 MIME 处理包
- json — JSON 编码和解码器
- mailcap — Mailcap file handling
- mailbox — Manipulate mailboxes in various formats
- mimetypes — Map filenames to MIME types
- base64 — Base16, Base32, Base64, Base85 数据编码
- binhex — 对binhex4文件进行编码和解码
- binascii — 二进制和 ASCII 码互转
- quopri — Encode and decode MIME quoted-printable data
- uu — Encode and decode uuencode files
- 结构化标记处理工具
- html — 超文本标记语言支持
- html.parser — 简单的 HTML 和 XHTML 解析器
- html.entities — HTML 一般实体的定义
- XML处理模块
- xml.etree.ElementTree — The ElementTree XML API
- xml.dom — The Document Object Model API
- xml.dom.minidom — Minimal DOM implementation
- xml.dom.pulldom — Support for building partial DOM trees
- xml.sax — Support for SAX2 parsers
- xml.sax.handler — Base classes for SAX handlers
- xml.sax.saxutils — SAX Utilities
- xml.sax.xmlreader — Interface for XML parsers
- xml.parsers.expat — Fast XML parsing using Expat
- 互联网协议和支持
- webbrowser — 方便的Web浏览器控制器
- cgi — Common Gateway Interface support
- cgitb — Traceback manager for CGI scripts
- wsgiref — WSGI Utilities and Reference Implementation
- urllib — URL 处理模块
- urllib.request — 用于打开 URL 的可扩展库
- urllib.response — Response classes used by urllib
- urllib.parse — Parse URLs into components
- urllib.error — Exception classes raised by urllib.request
- urllib.robotparser — Parser for robots.txt
- http — HTTP 模块
- http.client — HTTP协议客户端
- ftplib — FTP protocol client
- poplib — POP3 protocol client
- imaplib — IMAP4 protocol client
- nntplib — NNTP protocol client
- smtplib —SMTP协议客户端
- smtpd — SMTP Server
- telnetlib — Telnet client
- uuid — UUID objects according to RFC 4122
- socketserver — A framework for network servers
- http.server — HTTP 服务器
- http.cookies — HTTP state management
- http.cookiejar — Cookie handling for HTTP clients
- xmlrpc — XMLRPC 服务端与客户端模块
- xmlrpc.client — XML-RPC client access
- xmlrpc.server — Basic XML-RPC servers
- ipaddress — IPv4/IPv6 manipulation library
- 多媒体服务
- audioop — Manipulate raw audio data
- aifc — Read and write AIFF and AIFC files
- sunau — 读写 Sun AU 文件
- wave — 读写WAV格式文件
- chunk — Read IFF chunked data
- colorsys — Conversions between color systems
- imghdr — 推测图像类型
- sndhdr — 推测声音文件的类型
- ossaudiodev — Access to OSS-compatible audio devices
- 国际化
- gettext — 多语种国际化服务
- locale — 国际化服务
- 程序框架
- turtle — 海龟绘图
- cmd — 支持面向行的命令解释器
- shlex — Simple lexical analysis
- Tk图形用户界面(GUI)
- tkinter — Tcl/Tk的Python接口
- tkinter.ttk — Tk themed widgets
- tkinter.tix — Extension widgets for Tk
- tkinter.scrolledtext — 滚动文字控件
- IDLE
- 其他图形用户界面(GUI)包
- 开发工具
- typing — 类型标注支持
- pydoc — Documentation generator and online help system
- doctest — Test interactive Python examples
- unittest — 单元测试框架
- unittest.mock — mock object library
- unittest.mock 上手指南
- 2to3 - 自动将 Python 2 代码转为 Python 3 代码
- test — Regression tests package for Python
- test.support — Utilities for the Python test suite
- test.support.script_helper — Utilities for the Python execution tests
- 调试和分析
- bdb — Debugger framework
- faulthandler — Dump the Python traceback
- pdb — The Python Debugger
- The Python Profilers
- timeit — 测量小代码片段的执行时间
- trace — Trace or track Python statement execution
- tracemalloc — Trace memory allocations
- 软件打包和分发
- distutils — 构建和安装 Python 模块
- ensurepip — Bootstrapping the pip installer
- venv — 创建虚拟环境
- zipapp — Manage executable Python zip archives
- Python运行时服务
- sys — 系统相关的参数和函数
- sysconfig — Provide access to Python's configuration information
- builtins — 内建对象
- main — 顶层脚本环境
- warnings — Warning control
- dataclasses — 数据类
- contextlib — Utilities for with-statement contexts
- abc — 抽象基类
- atexit — 退出处理器
- traceback — Print or retrieve a stack traceback
- future — Future 语句定义
- gc — 垃圾回收器接口
- inspect — 检查对象
- site — Site-specific configuration hook
- 自定义 Python 解释器
- code — Interpreter base classes
- codeop — Compile Python code
- 导入模块
- zipimport — Import modules from Zip archives
- pkgutil — Package extension utility
- modulefinder — 查找脚本使用的模块
- runpy — Locating and executing Python modules
- importlib — The implementation of import
- Python 语言服务
- parser — Access Python parse trees
- ast — 抽象语法树
- symtable — Access to the compiler's symbol tables
- symbol — 与 Python 解析树一起使用的常量
- token — 与Python解析树一起使用的常量
- keyword — 检验Python关键字
- tokenize — Tokenizer for Python source
- tabnanny — 模糊缩进检测
- pyclbr — Python class browser support
- py_compile — Compile Python source files
- compileall — Byte-compile Python libraries
- dis — Python 字节码反汇编器
- pickletools — Tools for pickle developers
- 杂项服务
- formatter — Generic output formatting
- Windows系统相关模块
- msilib — Read and write Microsoft Installer files
- msvcrt — Useful routines from the MS VC++ runtime
- winreg — Windows 注册表访问
- winsound — Sound-playing interface for Windows
- Unix 专有服务
- posix — The most common POSIX system calls
- pwd — 用户密码数据库
- spwd — The shadow password database
- grp — The group database
- crypt — Function to check Unix passwords
- termios — POSIX style tty control
- tty — 终端控制功能
- pty — Pseudo-terminal utilities
- fcntl — The fcntl and ioctl system calls
- pipes — Interface to shell pipelines
- resource — Resource usage information
- nis — Interface to Sun's NIS (Yellow Pages)
- Unix syslog 库例程
- 被取代的模块
- optparse — Parser for command line options
- imp — Access the import internals
- 未创建文档的模块
- 平台特定模块
- 扩展和嵌入 Python 解释器
- 推荐的第三方工具
- 不使用第三方工具创建扩展
- 使用 C 或 C++ 扩展 Python
- 自定义扩展类型:教程
- 定义扩展类型:已分类主题
- 构建C/C++扩展
- 在Windows平台编译C和C++扩展
- 在更大的应用程序中嵌入 CPython 运行时
- Embedding Python in Another Application
- Python/C API 参考手册
- 概述
- 代码标准
- 包含文件
- 有用的宏
- 对象、类型和引用计数
- 异常
- 嵌入Python
- 调试构建
- 稳定的应用程序二进制接口
- The Very High Level Layer
- Reference Counting
- 异常处理
- Printing and clearing
- 抛出异常
- Issuing warnings
- Querying the error indicator
- Signal Handling
- Exception Classes
- Exception Objects
- Unicode Exception Objects
- Recursion Control
- 标准异常
- 标准警告类别
- 工具
- 操作系统实用程序
- 系统功能
- 过程控制
- 导入模块
- Data marshalling support
- 语句解释及变量编译
- 字符串转换与格式化
- 反射
- 编解码器注册与支持功能
- 抽象对象层
- Object Protocol
- 数字协议
- Sequence Protocol
- Mapping Protocol
- 迭代器协议
- 缓冲协议
- Old Buffer Protocol
- 具体的对象层
- 基本对象
- 数值对象
- 序列对象
- 容器对象
- 函数对象
- 其他对象
- Initialization, Finalization, and Threads
- 在Python初始化之前
- 全局配置变量
- Initializing and finalizing the interpreter
- Process-wide parameters
- Thread State and the Global Interpreter Lock
- Sub-interpreter support
- Asynchronous Notifications
- Profiling and Tracing
- Advanced Debugger Support
- Thread Local Storage Support
- 内存管理
- 概述
- 原始内存接口
- Memory Interface
- 对象分配器
- 默认内存分配器
- Customize Memory Allocators
- The pymalloc allocator
- tracemalloc C API
- 示例
- 对象实现支持
- 在堆中分配对象
- Common Object Structures
- Type 对象
- Number Object Structures
- Mapping Object Structures
- Sequence Object Structures
- Buffer Object Structures
- Async Object Structures
- 使对象类型支持循环垃圾回收
- API 和 ABI 版本管理
- 分发 Python 模块
- 关键术语
- 开源许可与协作
- 安装工具
- 阅读指南
- 我该如何...?
- ...为我的项目选择一个名字?
- ...创建和分发二进制扩展?
- 安装 Python 模块
- 关键术语
- 基本使用
- 我应如何 ...?
- ... 在 Python 3.4 之前的 Python 版本中安装 pip ?
- ... 只为当前用户安装软件包?
- ... 安装科学计算类 Python 软件包?
- ... 使用并行安装的多个 Python 版本?
- 常见的安装问题
- 在 Linux 的系统 Python 版本上安装
- 未安装 pip
- 安装二进制编译扩展
- Python 常用指引
- 将 Python 2 代码迁移到 Python 3
- 简要说明
- 详情
- 将扩展模块移植到 Python 3
- 条件编译
- 对象API的更改
- 模块初始化和状态
- CObject 替换为 Capsule
- 其他选项
- Curses Programming with Python
- What is curses?
- Starting and ending a curses application
- Windows and Pads
- Displaying Text
- User Input
- For More Information
- 实现描述器
- 摘要
- 定义和简介
- 描述器协议
- 发起调用描述符
- 描述符示例
- Properties
- 函数和方法
- Static Methods and Class Methods
- 函数式编程指引
- 概述
- 迭代器
- 生成器表达式和列表推导式
- 生成器
- 内置函数
- itertools 模块
- The functools module
- Small functions and the lambda expression
- Revision History and Acknowledgements
- 引用文献
- 日志 HOWTO
- 日志基础教程
- 进阶日志教程
- 日志级别
- 有用的处理程序
- 记录日志中引发的异常
- 使用任意对象作为消息
- 优化
- 日志操作手册
- 在多个模块中使用日志
- 在多线程中使用日志
- 使用多个日志处理器和多种格式化
- 在多个地方记录日志
- 日志服务器配置示例
- 处理日志处理器的阻塞
- Sending and receiving logging events across a network
- Adding contextual information to your logging output
- Logging to a single file from multiple processes
- Using file rotation
- Use of alternative formatting styles
- Customizing LogRecord
- Subclassing QueueHandler - a ZeroMQ example
- Subclassing QueueListener - a ZeroMQ example
- An example dictionary-based configuration
- Using a rotator and namer to customize log rotation processing
- A more elaborate multiprocessing example
- Inserting a BOM into messages sent to a SysLogHandler
- Implementing structured logging
- Customizing handlers with dictConfig()
- Using particular formatting styles throughout your application
- Configuring filters with dictConfig()
- Customized exception formatting
- Speaking logging messages
- Buffering logging messages and outputting them conditionally
- Formatting times using UTC (GMT) via configuration
- Using a context manager for selective logging
- 正则表达式HOWTO
- 概述
- 简单模式
- 使用正则表达式
- 更多模式能力
- 修改字符串
- 常见问题
- 反馈
- 套接字编程指南
- 套接字
- 创建套接字
- 使用一个套接字
- 断开连接
- 非阻塞的套接字
- 排序指南
- 基本排序
- 关键函数
- Operator 模块函数
- 升序和降序
- 排序稳定性和排序复杂度
- 使用装饰-排序-去装饰的旧方法
- 使用 cmp 参数的旧方法
- 其它
- Unicode 指南
- Unicode 概述
- Python's Unicode Support
- Reading and Writing Unicode Data
- Acknowledgements
- 如何使用urllib包获取网络资源
- 概述
- Fetching URLs
- 处理异常
- info and geturl
- Openers and Handlers
- Basic Authentication
- Proxies
- Sockets and Layers
- 脚注
- Argparse 教程
- 概念
- 基础
- 位置参数介绍
- Introducing Optional arguments
- Combining Positional and Optional arguments
- Getting a little more advanced
- Conclusion
- ipaddress模块介绍
- 创建 Address/Network/Interface 对象
- 审查 Address/Network/Interface 对象
- Network 作为 Address 列表
- 比较
- 将IP地址与其他模块一起使用
- 实例创建失败时获取更多详细信息
- Argument Clinic How-To
- The Goals Of Argument Clinic
- Basic Concepts And Usage
- Converting Your First Function
- Advanced Topics
- 使用 DTrace 和 SystemTap 检测CPython
- Enabling the static markers
- Static DTrace probes
- Static SystemTap markers
- Available static markers
- SystemTap Tapsets
- 示例
- Python 常见问题
- Python常见问题
- 一般信息
- 现实世界中的 Python
- 编程常见问题
- 一般问题
- 核心语言
- 数字和字符串
- 性能
- 序列(元组/列表)
- 对象
- 模块
- 设计和历史常见问题
- 为什么Python使用缩进来分组语句?
- 为什么简单的算术运算得到奇怪的结果?
- 为什么浮点计算不准确?
- 为什么Python字符串是不可变的?
- 为什么必须在方法定义和调用中显式使用“self”?
- 为什么不能在表达式中赋值?
- 为什么Python对某些功能(例如list.index())使用方法来实现,而其他功能(例如len(List))使用函数实现?
- 为什么 join()是一个字符串方法而不是列表或元组方法?
- 异常有多快?
- 为什么Python中没有switch或case语句?
- 难道不能在解释器中模拟线程,而非得依赖特定于操作系统的线程实现吗?
- 为什么lambda表达式不能包含语句?
- 可以将Python编译为机器代码,C或其他语言吗?
- Python如何管理内存?
- 为什么CPython不使用更传统的垃圾回收方案?
- CPython退出时为什么不释放所有内存?
- 为什么有单独的元组和列表数据类型?
- 列表是如何在CPython中实现的?
- 字典是如何在CPython中实现的?
- 为什么字典key必须是不可变的?
- 为什么 list.sort() 没有返回排序列表?
- 如何在Python中指定和实施接口规范?
- 为什么没有goto?
- 为什么原始字符串(r-strings)不能以反斜杠结尾?
- 为什么Python没有属性赋值的“with”语句?
- 为什么 if/while/def/class语句需要冒号?
- 为什么Python在列表和元组的末尾允许使用逗号?
- 代码库和插件 FAQ
- 通用的代码库问题
- 通用任务
- 线程相关
- 输入输出
- 网络 / Internet 编程
- 数据库
- 数学和数字
- 扩展/嵌入常见问题
- 可以使用C语言中创建自己的函数吗?
- 可以使用C++语言中创建自己的函数吗?
- C很难写,有没有其他选择?
- 如何从C执行任意Python语句?
- 如何从C中评估任意Python表达式?
- 如何从Python对象中提取C的值?
- 如何使用Py_BuildValue()创建任意长度的元组?
- 如何从C调用对象的方法?
- 如何捕获PyErr_Print()(或打印到stdout / stderr的任何内容)的输出?
- 如何从C访问用Python编写的模块?
- 如何从Python接口到C ++对象?
- 我使用Setup文件添加了一个模块,为什么make失败了?
- 如何调试扩展?
- 我想在Linux系统上编译一个Python模块,但是缺少一些文件。为什么?
- 如何区分“输入不完整”和“输入无效”?
- 如何找到未定义的g++符号__builtin_new或__pure_virtual?
- 能否创建一个对象类,其中部分方法在C中实现,而其他方法在Python中实现(例如通过继承)?
- Python在Windows上的常见问题
- 我怎样在Windows下运行一个Python程序?
- 我怎么让 Python 脚本可执行?
- 为什么有时候 Python 程序会启动缓慢?
- 我怎样使用Python脚本制作可执行文件?
- *.pyd 文件和DLL文件相同吗?
- 我怎样将Python嵌入一个Windows程序?
- 如何让编辑器不要在我的 Python 源代码中插入 tab ?
- 如何在不阻塞的情况下检查按键?
- 图形用户界面(GUI)常见问题
- 图形界面常见问题
- Python 是否有平台无关的图形界面工具包?
- 有哪些Python的GUI工具是某个平台专用的?
- 有关Tkinter的问题
- “为什么我的电脑上安装了 Python ?”
- 什么是Python?
- 为什么我的电脑上安装了 Python ?
- 我能删除 Python 吗?
- 术语对照表
- 文档说明
- Python 文档贡献者
- 解决 Bug
- 文档错误
- 使用 Python 的错误追踪系统
- 开始为 Python 贡献您的知识
- 版权
- 历史和许可证
- 软件历史
- 访问Python或以其他方式使用Python的条款和条件
- Python 3.7.3 的 PSF 许可协议
- Python 2.0 的 BeOpen.com 许可协议
- Python 1.6.1 的 CNRI 许可协议
- Python 0.9.0 至 1.2 的 CWI 许可协议
- 集成软件的许可和认可
- Mersenne Twister
- 套接字
- Asynchronous socket services
- Cookie management
- Execution tracing
- UUencode and UUdecode functions
- XML Remote Procedure Calls
- test_epoll
- Select kqueue
- SipHash24
- strtod and dtoa
- OpenSSL
- expat
- libffi
- zlib
- cfuhash
- libmpdec