summaryrefslogtreecommitdiffstats
path: root/Lib/pydoc_data
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/pydoc_data')
-rw-r--r--Lib/pydoc_data/_pydoc.css6
-rw-r--r--Lib/pydoc_data/topics.py13785
2 files changed, 6856 insertions, 6935 deletions
diff --git a/Lib/pydoc_data/_pydoc.css b/Lib/pydoc_data/_pydoc.css
deleted file mode 100644
index f036ef3..0000000
--- a/Lib/pydoc_data/_pydoc.css
+++ /dev/null
@@ -1,6 +0,0 @@
-/*
- CSS file for pydoc.
-
- Contents of this file are subject to change without notice.
-
-*/
diff --git a/Lib/pydoc_data/topics.py b/Lib/pydoc_data/topics.py
index c3fe079..5fc84a8 100644
--- a/Lib/pydoc_data/topics.py
+++ b/Lib/pydoc_data/topics.py
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
-# Autogenerated by Sphinx on Tue Nov 19 11:42:25 2019
-topics = {'assert': 'The "assert" statement\n'
+# Autogenerated by Sphinx on Sat Aug 26 11:16:28 2017
+topics = {'assert': '\n'
+ 'The "assert" statement\n'
'**********************\n'
'\n'
'Assert statements are a convenient way to insert debugging '
@@ -26,8 +27,7 @@ topics = {'assert': 'The "assert" statement\n'
'implementation, the built-in variable "__debug__" is "True" under\n'
'normal circumstances, "False" when optimization is requested '
'(command\n'
- 'line option "-O"). The current code generator emits no code for '
- 'an\n'
+ 'line option -O). The current code generator emits no code for an\n'
'assert statement when optimization is requested at compile time. '
'Note\n'
'that it is unnecessary to include the source code for the '
@@ -39,27 +39,27 @@ topics = {'assert': 'The "assert" statement\n'
'Assignments to "__debug__" are illegal. The value for the '
'built-in\n'
'variable is determined when the interpreter starts.\n',
- 'assignment': 'Assignment statements\n'
+ 'assignment': '\n'
+ 'Assignment statements\n'
'*********************\n'
'\n'
'Assignment statements are used to (re)bind names to values and '
'to\n'
'modify attributes or items of mutable objects:\n'
'\n'
- ' assignment_stmt ::= (target_list "=")+ (starred_expression '
- '| yield_expression)\n'
+ ' assignment_stmt ::= (target_list "=")+ (expression_list | '
+ 'yield_expression)\n'
' target_list ::= target ("," target)* [","]\n'
' target ::= identifier\n'
- ' | "(" [target_list] ")"\n'
+ ' | "(" target_list ")"\n'
' | "[" [target_list] "]"\n'
' | attributeref\n'
' | subscription\n'
' | slicing\n'
- ' | "*" target\n'
'\n'
- '(See section Primaries for the syntax definitions for '
- '*attributeref*,\n'
- '*subscription*, and *slicing*.)\n'
+ '(See section Primaries for the syntax definitions for the last '
+ 'three\n'
+ 'symbols.)\n'
'\n'
'An assignment statement evaluates the expression list '
'(remember that\n'
@@ -83,45 +83,21 @@ topics = {'assert': 'The "assert" statement\n'
'definition of the object types (see section The standard type\n'
'hierarchy).\n'
'\n'
- 'Assignment of an object to a target list, optionally enclosed '
- 'in\n'
- 'parentheses or square brackets, is recursively defined as '
+ 'Assignment of an object to a target list is recursively '
+ 'defined as\n'
'follows.\n'
'\n'
- '* If the target list is a single target with no trailing '
- 'comma,\n'
- ' optionally in parentheses, the object is assigned to that '
- 'target.\n'
- '\n'
- '* Else: The object must be an iterable with the same number of '
- 'items\n'
- ' as there are targets in the target list, and the items are '
- 'assigned,\n'
- ' from left to right, to the corresponding targets.\n'
- '\n'
- ' * If the target list contains one target prefixed with an\n'
- ' asterisk, called a “starred” target: The object must be '
- 'an\n'
- ' iterable with at least as many items as there are targets '
- 'in the\n'
- ' target list, minus one. The first items of the iterable '
- 'are\n'
- ' assigned, from left to right, to the targets before the '
- 'starred\n'
- ' target. The final items of the iterable are assigned to '
- 'the\n'
- ' targets after the starred target. A list of the remaining '
- 'items\n'
- ' in the iterable is then assigned to the starred target '
- '(the list\n'
- ' can be empty).\n'
+ '* If the target list is a single target: The object is '
+ 'assigned to\n'
+ ' that target.\n'
'\n'
- ' * Else: The object must be an iterable with the same number '
- 'of\n'
- ' items as there are targets in the target list, and the '
- 'items are\n'
- ' assigned, from left to right, to the corresponding '
- 'targets.\n'
+ '* If the target list is a comma-separated list of targets: '
+ 'The\n'
+ ' object must be an iterable with the same number of items as '
+ 'there\n'
+ ' are targets in the target list, and the items are assigned, '
+ 'from\n'
+ ' left to right, to the corresponding targets.\n'
'\n'
'Assignment of an object to a single target is recursively '
'defined as\n'
@@ -129,16 +105,14 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
'* If the target is an identifier (name):\n'
'\n'
- ' * If the name does not occur in a "global" or "nonlocal" '
- 'statement\n'
- ' in the current code block: the name is bound to the object '
- 'in the\n'
- ' current local namespace.\n'
+ ' * If the name does not occur in a "global" statement in the\n'
+ ' current code block: the name is bound to the object in the '
+ 'current\n'
+ ' local namespace.\n'
'\n'
- ' * Otherwise: the name is bound to the object in the global\n'
- ' namespace or the outer namespace determined by '
- '"nonlocal",\n'
- ' respectively.\n'
+ ' * Otherwise: the name is bound to the object in the current '
+ 'global\n'
+ ' namespace.\n'
'\n'
' The name is rebound if it was already bound. This may cause '
'the\n'
@@ -148,6 +122,14 @@ topics = {'assert': 'The "assert" statement\n'
'destructor (if it\n'
' has one) to be called.\n'
'\n'
+ '* If the target is a target list enclosed in parentheses or '
+ 'in\n'
+ ' square brackets: The object must be an iterable with the '
+ 'same number\n'
+ ' of items as there are targets in the target list, and its '
+ 'items are\n'
+ ' assigned, from left to right, to the corresponding targets.\n'
+ '\n'
'* If the target is an attribute reference: The primary '
'expression in\n'
' the reference is evaluated. It should yield an object with\n'
@@ -162,21 +144,20 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
' Note: If the object is a class instance and the attribute '
'reference\n'
- ' occurs on both sides of the assignment operator, the '
- 'right-hand side\n'
- ' expression, "a.x" can access either an instance attribute or '
- '(if no\n'
- ' instance attribute exists) a class attribute. The left-hand '
- 'side\n'
- ' target "a.x" is always set as an instance attribute, '
- 'creating it if\n'
- ' necessary. Thus, the two occurrences of "a.x" do not '
- 'necessarily\n'
- ' refer to the same attribute: if the right-hand side '
- 'expression\n'
- ' refers to a class attribute, the left-hand side creates a '
- 'new\n'
- ' instance attribute as the target of the assignment:\n'
+ ' occurs on both sides of the assignment operator, the RHS '
+ 'expression,\n'
+ ' "a.x" can access either an instance attribute or (if no '
+ 'instance\n'
+ ' attribute exists) a class attribute. The LHS target "a.x" '
+ 'is always\n'
+ ' set as an instance attribute, creating it if necessary. '
+ 'Thus, the\n'
+ ' two occurrences of "a.x" do not necessarily refer to the '
+ 'same\n'
+ ' attribute: if the RHS expression refers to a class '
+ 'attribute, the\n'
+ ' LHS creates a new instance attribute as the target of the\n'
+ ' assignment:\n'
'\n'
' class Cls:\n'
' x = 3 # class variable\n'
@@ -197,21 +178,23 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
' If the primary is a mutable sequence object (such as a '
'list), the\n'
- ' subscript must yield an integer. If it is negative, the '
- 'sequence’s\n'
- ' length is added to it. The resulting value must be a '
- 'nonnegative\n'
- ' integer less than the sequence’s length, and the sequence is '
- 'asked\n'
- ' to assign the assigned object to its item with that index. '
- 'If the\n'
- ' index is out of range, "IndexError" is raised (assignment to '
- 'a\n'
- ' subscripted sequence cannot add new items to a list).\n'
+ ' subscript must yield a plain integer. If it is negative, '
+ 'the\n'
+ " sequence's length is added to it. The resulting value must "
+ 'be a\n'
+ " nonnegative integer less than the sequence's length, and "
+ 'the\n'
+ ' sequence is asked to assign the assigned object to its item '
+ 'with\n'
+ ' that index. If the index is out of range, "IndexError" is '
+ 'raised\n'
+ ' (assignment to a subscripted sequence cannot add new items '
+ 'to a\n'
+ ' list).\n'
'\n'
' If the primary is a mapping object (such as a dictionary), '
'the\n'
- ' subscript must have a type compatible with the mapping’s key '
+ " subscript must have a type compatible with the mapping's key "
'type,\n'
' and the mapping is then asked to create a key/datum pair '
'which maps\n'
@@ -221,10 +204,6 @@ topics = {'assert': 'The "assert" statement\n'
'new\n'
' key/value pair (if no key with the same value existed).\n'
'\n'
- ' For user-defined objects, the "__setitem__()" method is '
- 'called with\n'
- ' appropriate arguments.\n'
- '\n'
'* If the target is a slicing: The primary expression in the\n'
' reference is evaluated. It should yield a mutable sequence '
'object\n'
@@ -234,21 +213,21 @@ topics = {'assert': 'The "assert" statement\n'
'expressions are\n'
' evaluated, insofar they are present; defaults are zero and '
'the\n'
- ' sequence’s length. The bounds should evaluate to integers. '
- 'If\n'
- ' either bound is negative, the sequence’s length is added to '
- 'it. The\n'
- ' resulting bounds are clipped to lie between zero and the '
- 'sequence’s\n'
- ' length, inclusive. Finally, the sequence object is asked to '
- 'replace\n'
- ' the slice with the items of the assigned sequence. The '
- 'length of\n'
- ' the slice may be different from the length of the assigned '
- 'sequence,\n'
- ' thus changing the length of the target sequence, if the '
- 'target\n'
- ' sequence allows it.\n'
+ " sequence's length. The bounds should evaluate to (small) "
+ 'integers.\n'
+ " If either bound is negative, the sequence's length is added "
+ 'to it.\n'
+ ' The resulting bounds are clipped to lie between zero and '
+ 'the\n'
+ " sequence's length, inclusive. Finally, the sequence object "
+ 'is asked\n'
+ ' to replace the slice with the items of the assigned '
+ 'sequence. The\n'
+ ' length of the slice may be different from the length of the '
+ 'assigned\n'
+ ' sequence, thus changing the length of the target sequence, '
+ 'if the\n'
+ ' object allows it.\n'
'\n'
'**CPython implementation detail:** In the current '
'implementation, the\n'
@@ -258,28 +237,20 @@ topics = {'assert': 'The "assert" statement\n'
'causing\n'
'less detailed error messages.\n'
'\n'
- 'Although the definition of assignment implies that overlaps '
- 'between\n'
- 'the left-hand side and the right-hand side are ‘simultaneous’ '
+ 'WARNING: Although the definition of assignment implies that '
+ 'overlaps\n'
+ "between the left-hand side and the right-hand side are 'safe' "
'(for\n'
'example "a, b = b, a" swaps two variables), overlaps *within* '
'the\n'
- 'collection of assigned-to variables occur left-to-right, '
- 'sometimes\n'
- 'resulting in confusion. For instance, the following program '
- 'prints\n'
- '"[0, 2]":\n'
+ 'collection of assigned-to variables are not safe! For '
+ 'instance, the\n'
+ 'following program prints "[0, 2]":\n'
'\n'
' x = [0, 1]\n'
' i = 0\n'
- ' i, x[i] = 1, 2 # i is updated, then x[i] is '
- 'updated\n'
- ' print(x)\n'
- '\n'
- 'See also:\n'
- '\n'
- ' **PEP 3132** - Extended Iterable Unpacking\n'
- ' The specification for the "*target" feature.\n'
+ ' i, x[i] = 1, 2\n'
+ ' print x\n'
'\n'
'\n'
'Augmented assignment statements\n'
@@ -293,11 +264,11 @@ topics = {'assert': 'The "assert" statement\n'
'(expression_list | yield_expression)\n'
' augtarget ::= identifier | attributeref | '
'subscription | slicing\n'
- ' augop ::= "+=" | "-=" | "*=" | "@=" | '
- '"/=" | "//=" | "%=" | "**="\n'
+ ' augop ::= "+=" | "-=" | "*=" | "/=" | '
+ '"//=" | "%=" | "**="\n'
' | ">>=" | "<<=" | "&=" | "^=" | "|="\n'
'\n'
- '(See section Primaries for the syntax definitions of the last '
+ '(See section Primaries for the syntax definitions for the last '
'three\n'
'symbols.)\n'
'\n'
@@ -323,15 +294,6 @@ topics = {'assert': 'The "assert" statement\n'
'old object\n'
'is modified instead.\n'
'\n'
- 'Unlike normal assignments, augmented assignments evaluate the '
- 'left-\n'
- 'hand side *before* evaluating the right-hand side. For '
- 'example, "a[i]\n'
- '+= f(x)" first looks-up "a[i]", then it evaluates "f(x)" and '
- 'performs\n'
- 'the addition, and lastly, it writes the result back to '
- '"a[i]".\n'
- '\n'
'With the exception of assigning to tuples and multiple targets '
'in a\n'
'single statement, the assignment done by augmented assignment\n'
@@ -346,211 +308,9 @@ topics = {'assert': 'The "assert" statement\n'
'For targets which are attribute references, the same caveat '
'about\n'
'class and instance attributes applies as for regular '
- 'assignments.\n'
- '\n'
- '\n'
- 'Annotated assignment statements\n'
- '===============================\n'
- '\n'
- '*Annotation* assignment is the combination, in a single '
- 'statement, of\n'
- 'a variable or attribute annotation and an optional assignment\n'
- 'statement:\n'
- '\n'
- ' annotated_assignment_stmt ::= augtarget ":" expression\n'
- ' ["=" (starred_expression | '
- 'yield_expression)]\n'
- '\n'
- 'The difference from normal Assignment statements is that only '
- 'single\n'
- 'target is allowed.\n'
- '\n'
- 'For simple names as assignment targets, if in class or module '
- 'scope,\n'
- 'the annotations are evaluated and stored in a special class or '
- 'module\n'
- 'attribute "__annotations__" that is a dictionary mapping from '
- 'variable\n'
- 'names (mangled if private) to evaluated annotations. This '
- 'attribute is\n'
- 'writable and is automatically created at the start of class or '
- 'module\n'
- 'body execution, if annotations are found statically.\n'
- '\n'
- 'For expressions as assignment targets, the annotations are '
- 'evaluated\n'
- 'if in class or module scope, but not stored.\n'
- '\n'
- 'If a name is annotated in a function scope, then this name is '
- 'local\n'
- 'for that scope. Annotations are never evaluated and stored in '
- 'function\n'
- 'scopes.\n'
- '\n'
- 'If the right hand side is present, an annotated assignment '
- 'performs\n'
- 'the actual assignment before evaluating annotations (where\n'
- 'applicable). If the right hand side is not present for an '
- 'expression\n'
- 'target, then the interpreter evaluates the target except for '
- 'the last\n'
- '"__setitem__()" or "__setattr__()" call.\n'
- '\n'
- 'See also:\n'
- '\n'
- ' **PEP 526** - Syntax for Variable Annotations\n'
- ' The proposal that added syntax for annotating the types '
- 'of\n'
- ' variables (including class variables and instance '
- 'variables),\n'
- ' instead of expressing them through comments.\n'
- '\n'
- ' **PEP 484** - Type hints\n'
- ' The proposal that added the "typing" module to provide a '
- 'standard\n'
- ' syntax for type annotations that can be used in static '
- 'analysis\n'
- ' tools and IDEs.\n'
- '\n'
- 'Changed in version 3.8: Now annotated assignments allow same\n'
- 'expressions in the right hand side as the regular '
- 'assignments.\n'
- 'Previously, some expressions (like un-parenthesized tuple '
- 'expressions)\n'
- 'caused a syntax error.\n',
- 'async': 'Coroutines\n'
- '**********\n'
- '\n'
- 'New in version 3.5.\n'
- '\n'
- '\n'
- 'Coroutine function definition\n'
- '=============================\n'
- '\n'
- ' async_funcdef ::= [decorators] "async" "def" funcname "(" '
- '[parameter_list] ")"\n'
- ' ["->" expression] ":" suite\n'
- '\n'
- 'Execution of Python coroutines can be suspended and resumed at '
- 'many\n'
- 'points (see *coroutine*). Inside the body of a coroutine '
- 'function,\n'
- '"await" and "async" identifiers become reserved keywords; "await"\n'
- 'expressions, "async for" and "async with" can only be used in\n'
- 'coroutine function bodies.\n'
- '\n'
- 'Functions defined with "async def" syntax are always coroutine\n'
- 'functions, even if they do not contain "await" or "async" '
- 'keywords.\n'
- '\n'
- 'It is a "SyntaxError" to use a "yield from" expression inside the '
- 'body\n'
- 'of a coroutine function.\n'
- '\n'
- 'An example of a coroutine function:\n'
- '\n'
- ' async def func(param1, param2):\n'
- ' do_stuff()\n'
- ' await some_coroutine()\n'
- '\n'
- '\n'
- 'The "async for" statement\n'
- '=========================\n'
- '\n'
- ' async_for_stmt ::= "async" for_stmt\n'
- '\n'
- 'An *asynchronous iterable* is able to call asynchronous code in '
- 'its\n'
- '*iter* implementation, and *asynchronous iterator* can call\n'
- 'asynchronous code in its *next* method.\n'
- '\n'
- 'The "async for" statement allows convenient iteration over\n'
- 'asynchronous iterators.\n'
- '\n'
- 'The following code:\n'
- '\n'
- ' async for TARGET in ITER:\n'
- ' BLOCK\n'
- ' else:\n'
- ' BLOCK2\n'
- '\n'
- 'Is semantically equivalent to:\n'
- '\n'
- ' iter = (ITER)\n'
- ' iter = type(iter).__aiter__(iter)\n'
- ' running = True\n'
- ' while running:\n'
- ' try:\n'
- ' TARGET = await type(iter).__anext__(iter)\n'
- ' except StopAsyncIteration:\n'
- ' running = False\n'
- ' else:\n'
- ' BLOCK\n'
- ' else:\n'
- ' BLOCK2\n'
- '\n'
- 'See also "__aiter__()" and "__anext__()" for details.\n'
- '\n'
- 'It is a "SyntaxError" to use an "async for" statement outside the '
- 'body\n'
- 'of a coroutine function.\n'
- '\n'
- '\n'
- 'The "async with" statement\n'
- '==========================\n'
- '\n'
- ' async_with_stmt ::= "async" with_stmt\n'
- '\n'
- 'An *asynchronous context manager* is a *context manager* that is '
- 'able\n'
- 'to suspend execution in its *enter* and *exit* methods.\n'
- '\n'
- 'The following code:\n'
- '\n'
- ' async with EXPR as VAR:\n'
- ' BLOCK\n'
- '\n'
- 'Is semantically equivalent to:\n'
- '\n'
- ' mgr = (EXPR)\n'
- ' aexit = type(mgr).__aexit__\n'
- ' aenter = type(mgr).__aenter__(mgr)\n'
- '\n'
- ' VAR = await aenter\n'
- ' try:\n'
- ' BLOCK\n'
- ' except:\n'
- ' if not await aexit(mgr, *sys.exc_info()):\n'
- ' raise\n'
- ' else:\n'
- ' await aexit(mgr, None, None, None)\n'
- '\n'
- 'See also "__aenter__()" and "__aexit__()" for details.\n'
- '\n'
- 'It is a "SyntaxError" to use an "async with" statement outside the\n'
- 'body of a coroutine function.\n'
- '\n'
- 'See also:\n'
- '\n'
- ' **PEP 492** - Coroutines with async and await syntax\n'
- ' The proposal that made coroutines a proper standalone concept '
- 'in\n'
- ' Python, and added supporting syntax.\n'
- '\n'
- '-[ Footnotes ]-\n'
- '\n'
- '[1] The exception is propagated to the invocation stack unless\n'
- ' there is a "finally" clause which happens to raise another\n'
- ' exception. That new exception causes the old one to be lost.\n'
- '\n'
- '[2] A string literal appearing as the first statement in the\n'
- ' function body is transformed into the function’s "__doc__"\n'
- ' attribute and therefore the function’s *docstring*.\n'
- '\n'
- '[3] A string literal appearing as the first statement in the class\n'
- ' body is transformed into the namespace’s "__doc__" item and\n'
- ' therefore the class’s *docstring*.\n',
- 'atom-identifiers': 'Identifiers (Names)\n'
+ 'assignments.\n',
+ 'atom-identifiers': '\n'
+ 'Identifiers (Names)\n'
'*******************\n'
'\n'
'An identifier occurring as an atom is a name. See '
@@ -590,28 +350,29 @@ topics = {'assert': 'The "assert" statement\n'
'happen. If the class name consists only of underscores, '
'no\n'
'transformation is done.\n',
- 'atom-literals': 'Literals\n'
+ 'atom-literals': '\n'
+ 'Literals\n'
'********\n'
'\n'
- 'Python supports string and bytes literals and various '
- 'numeric\n'
+ 'Python supports string literals and various numeric '
'literals:\n'
'\n'
- ' literal ::= stringliteral | bytesliteral\n'
- ' | integer | floatnumber | imagnumber\n'
+ ' literal ::= stringliteral | integer | longinteger\n'
+ ' | floatnumber | imagnumber\n'
'\n'
'Evaluation of a literal yields an object of the given type '
'(string,\n'
- 'bytes, integer, floating point number, complex number) with '
- 'the given\n'
- 'value. The value may be approximated in the case of '
- 'floating point\n'
- 'and imaginary (complex) literals. See section Literals for '
+ 'integer, long integer, floating point number, complex '
+ 'number) with the\n'
+ 'given value. The value may be approximated in the case of '
+ 'floating\n'
+ 'point and imaginary (complex) literals. See section '
+ 'Literals for\n'
'details.\n'
'\n'
'All literals correspond to immutable data types, and hence '
'the\n'
- 'object’s identity is less important than its value. '
+ "object's identity is less important than its value. "
'Multiple\n'
'evaluations of literals with the same value (either the '
'same\n'
@@ -619,7 +380,8 @@ topics = {'assert': 'The "assert" statement\n'
'may obtain\n'
'the same object or a different object with the same '
'value.\n',
- 'attribute-access': 'Customizing attribute access\n'
+ 'attribute-access': '\n'
+ 'Customizing attribute access\n'
'****************************\n'
'\n'
'The following methods can be defined to customize the '
@@ -630,19 +392,15 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
'object.__getattr__(self, name)\n'
'\n'
- ' Called when the default attribute access fails with '
- 'an\n'
- ' "AttributeError" (either "__getattribute__()" raises '
- 'an\n'
- ' "AttributeError" because *name* is not an instance '
- 'attribute or an\n'
- ' attribute in the class tree for "self"; or '
- '"__get__()" of a *name*\n'
- ' property raises "AttributeError"). This method '
- 'should either\n'
- ' return the (computed) attribute value or raise an '
- '"AttributeError"\n'
- ' exception.\n'
+ ' Called when an attribute lookup has not found the '
+ 'attribute in the\n'
+ ' usual places (i.e. it is not an instance attribute '
+ 'nor is it found\n'
+ ' in the class tree for "self"). "name" is the '
+ 'attribute name. This\n'
+ ' method should return the (computed) attribute value '
+ 'or raise an\n'
+ ' "AttributeError" exception.\n'
'\n'
' Note that if the attribute is found through the '
'normal mechanism,\n'
@@ -661,33 +419,7 @@ topics = {'assert': 'The "assert" statement\n'
' instead inserting them in another object). See the\n'
' "__getattribute__()" method below for a way to '
'actually get total\n'
- ' control over attribute access.\n'
- '\n'
- 'object.__getattribute__(self, name)\n'
- '\n'
- ' Called unconditionally to implement attribute '
- 'accesses for\n'
- ' instances of the class. If the class also defines '
- '"__getattr__()",\n'
- ' the latter will not be called unless '
- '"__getattribute__()" either\n'
- ' calls it explicitly or raises an "AttributeError". '
- 'This method\n'
- ' should return the (computed) attribute value or raise '
- 'an\n'
- ' "AttributeError" exception. In order to avoid '
- 'infinite recursion in\n'
- ' this method, its implementation should always call '
- 'the base class\n'
- ' method with the same name to access any attributes it '
- 'needs, for\n'
- ' example, "object.__getattribute__(self, name)".\n'
- '\n'
- ' Note: This method may still be bypassed when looking '
- 'up special\n'
- ' methods as the result of implicit invocation via '
- 'language syntax\n'
- ' or built-in functions. See Special method lookup.\n'
+ ' control in new-style classes.\n'
'\n'
'object.__setattr__(self, name, value)\n'
'\n'
@@ -695,15 +427,24 @@ topics = {'assert': 'The "assert" statement\n'
'This is called\n'
' instead of the normal mechanism (i.e. store the value '
'in the\n'
- ' instance dictionary). *name* is the attribute name, '
+ ' instance dictionary). *name* is the attribute name, '
'*value* is the\n'
' value to be assigned to it.\n'
'\n'
' If "__setattr__()" wants to assign to an instance '
'attribute, it\n'
- ' should call the base class method with the same name, '
- 'for example,\n'
- ' "object.__setattr__(self, name, value)".\n'
+ ' should not simply execute "self.name = value" --- '
+ 'this would cause\n'
+ ' a recursive call to itself. Instead, it should '
+ 'insert the value in\n'
+ ' the dictionary of instance attributes, e.g., '
+ '"self.__dict__[name] =\n'
+ ' value". For new-style classes, rather than accessing '
+ 'the instance\n'
+ ' dictionary, it should call the base class method with '
+ 'the same\n'
+ ' name, for example, "object.__setattr__(self, name, '
+ 'value)".\n'
'\n'
'object.__delattr__(self, name)\n'
'\n'
@@ -713,85 +454,39 @@ topics = {'assert': 'The "assert" statement\n'
'obj.name" is\n'
' meaningful for the object.\n'
'\n'
- 'object.__dir__(self)\n'
- '\n'
- ' Called when "dir()" is called on the object. A '
- 'sequence must be\n'
- ' returned. "dir()" converts the returned sequence to a '
- 'list and\n'
- ' sorts it.\n'
- '\n'
- '\n'
- 'Customizing module attribute access\n'
- '===================================\n'
- '\n'
- 'Special names "__getattr__" and "__dir__" can be also '
- 'used to\n'
- 'customize access to module attributes. The "__getattr__" '
- 'function at\n'
- 'the module level should accept one argument which is the '
- 'name of an\n'
- 'attribute and return the computed value or raise an '
- '"AttributeError".\n'
- 'If an attribute is not found on a module object through '
- 'the normal\n'
- 'lookup, i.e. "object.__getattribute__()", then '
- '"__getattr__" is\n'
- 'searched in the module "__dict__" before raising an '
- '"AttributeError".\n'
- 'If found, it is called with the attribute name and the '
- 'result is\n'
- 'returned.\n'
- '\n'
- 'The "__dir__" function should accept no arguments, and '
- 'return a\n'
- 'sequence of strings that represents the names accessible '
- 'on module. If\n'
- 'present, this function overrides the standard "dir()" '
- 'search on a\n'
- 'module.\n'
- '\n'
- 'For a more fine grained customization of the module '
- 'behavior (setting\n'
- 'attributes, properties, etc.), one can set the '
- '"__class__" attribute\n'
- 'of a module object to a subclass of "types.ModuleType". '
- 'For example:\n'
- '\n'
- ' import sys\n'
- ' from types import ModuleType\n'
- '\n'
- ' class VerboseModule(ModuleType):\n'
- ' def __repr__(self):\n'
- " return f'Verbose {self.__name__}'\n"
'\n'
- ' def __setattr__(self, attr, value):\n'
- " print(f'Setting {attr}...')\n"
- ' super().__setattr__(attr, value)\n'
+ 'More attribute access for new-style classes\n'
+ '===========================================\n'
'\n'
- ' sys.modules[__name__].__class__ = VerboseModule\n'
+ 'The following methods only apply to new-style classes.\n'
'\n'
- 'Note: Defining module "__getattr__" and setting module '
- '"__class__"\n'
- ' only affect lookups made using the attribute access '
- 'syntax –\n'
- ' directly accessing the module globals (whether by code '
- 'within the\n'
- ' module, or via a reference to the module’s globals '
- 'dictionary) is\n'
- ' unaffected.\n'
- '\n'
- 'Changed in version 3.5: "__class__" module attribute is '
- 'now writable.\n'
- '\n'
- 'New in version 3.7: "__getattr__" and "__dir__" module '
- 'attributes.\n'
+ 'object.__getattribute__(self, name)\n'
'\n'
- 'See also:\n'
+ ' Called unconditionally to implement attribute '
+ 'accesses for\n'
+ ' instances of the class. If the class also defines '
+ '"__getattr__()",\n'
+ ' the latter will not be called unless '
+ '"__getattribute__()" either\n'
+ ' calls it explicitly or raises an "AttributeError". '
+ 'This method\n'
+ ' should return the (computed) attribute value or raise '
+ 'an\n'
+ ' "AttributeError" exception. In order to avoid '
+ 'infinite recursion in\n'
+ ' this method, its implementation should always call '
+ 'the base class\n'
+ ' method with the same name to access any attributes it '
+ 'needs, for\n'
+ ' example, "object.__getattribute__(self, name)".\n'
'\n'
- ' **PEP 562** - Module __getattr__ and __dir__\n'
- ' Describes the "__getattr__" and "__dir__" functions '
- 'on modules.\n'
+ ' Note: This method may still be bypassed when looking '
+ 'up special\n'
+ ' methods as the result of implicit invocation via '
+ 'language syntax\n'
+ ' or built-in functions. See Special method lookup '
+ 'for new-style\n'
+ ' classes.\n'
'\n'
'\n'
'Implementing Descriptors\n'
@@ -802,41 +497,29 @@ topics = {'assert': 'The "assert" statement\n'
'containing the method (a so-called *descriptor* class) '
'appears in an\n'
'*owner* class (the descriptor must be in either the '
- 'owner’s class\n'
+ "owner's class\n"
'dictionary or in the class dictionary for one of its '
'parents). In the\n'
- 'examples below, “the attribute” refers to the attribute '
+ 'examples below, "the attribute" refers to the attribute '
'whose name is\n'
- 'the key of the property in the owner class’ "__dict__".\n'
+ "the key of the property in the owner class' "
+ '"__dict__".\n'
'\n'
- 'object.__get__(self, instance, owner=None)\n'
+ 'object.__get__(self, instance, owner)\n'
'\n'
' Called to get the attribute of the owner class (class '
'attribute\n'
' access) or of an instance of that class (instance '
'attribute\n'
- ' access). The optional *owner* argument is the owner '
- 'class, while\n'
- ' *instance* is the instance that the attribute was '
- 'accessed through,\n'
- ' or "None" when the attribute is accessed through the '
- '*owner*.\n'
- '\n'
- ' This method should return the computed attribute '
- 'value or raise an\n'
- ' "AttributeError" exception.\n'
- '\n'
- ' **PEP 252** specifies that "__get__()" is callable '
- 'with one or two\n'
- ' arguments. Python’s own built-in descriptors support '
- 'this\n'
- ' specification; however, it is likely that some '
- 'third-party tools\n'
- ' have descriptors that require both arguments. '
- 'Python’s own\n'
- ' "__getattribute__()" implementation always passes in '
- 'both arguments\n'
- ' whether they are required or not.\n'
+ ' access). *owner* is always the owner class, while '
+ '*instance* is the\n'
+ ' instance that the attribute was accessed through, or '
+ '"None" when\n'
+ ' the attribute is accessed through the *owner*. This '
+ 'method should\n'
+ ' return the (computed) attribute value or raise an '
+ '"AttributeError"\n'
+ ' exception.\n'
'\n'
'object.__set__(self, instance, value)\n'
'\n'
@@ -844,47 +527,19 @@ topics = {'assert': 'The "assert" statement\n'
'of the owner\n'
' class to a new value, *value*.\n'
'\n'
- ' Note, adding "__set__()" or "__delete__()" changes '
- 'the kind of\n'
- ' descriptor to a “data descriptor”. See Invoking '
- 'Descriptors for\n'
- ' more details.\n'
- '\n'
'object.__delete__(self, instance)\n'
'\n'
' Called to delete the attribute on an instance '
'*instance* of the\n'
' owner class.\n'
'\n'
- 'object.__set_name__(self, owner, name)\n'
- '\n'
- ' Called at the time the owning class *owner* is '
- 'created. The\n'
- ' descriptor has been assigned to *name*.\n'
- '\n'
- ' New in version 3.6.\n'
- '\n'
- 'The attribute "__objclass__" is interpreted by the '
- '"inspect" module as\n'
- 'specifying the class where this object was defined '
- '(setting this\n'
- 'appropriately can assist in runtime introspection of '
- 'dynamic class\n'
- 'attributes). For callables, it may indicate that an '
- 'instance of the\n'
- 'given type (or a subclass) is expected or required as '
- 'the first\n'
- 'positional argument (for example, CPython sets this '
- 'attribute for\n'
- 'unbound methods that are implemented in C).\n'
- '\n'
'\n'
'Invoking Descriptors\n'
'====================\n'
'\n'
'In general, a descriptor is an object attribute with '
- '“binding\n'
- 'behavior”, one whose attribute access has been '
+ '"binding\n'
+ 'behavior", one whose attribute access has been '
'overridden by methods\n'
'in the descriptor protocol: "__get__()", "__set__()", '
'and\n'
@@ -894,7 +549,7 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
'The default behavior for attribute access is to get, '
'set, or delete\n'
- 'the attribute from an object’s dictionary. For instance, '
+ "the attribute from an object's dictionary. For instance, "
'"a.x" has a\n'
'lookup chain starting with "a.__dict__[\'x\']", then\n'
'"type(a).__dict__[\'x\']", and continuing through the '
@@ -909,7 +564,10 @@ topics = {'assert': 'The "assert" statement\n'
'in the\n'
'precedence chain depends on which descriptor methods '
'were defined and\n'
- 'how they were called.\n'
+ 'how they were called. Note that descriptors are only '
+ 'invoked for new\n'
+ 'style objects or classes (ones that subclass "object()" '
+ 'or "type()").\n'
'\n'
'The starting point for descriptor invocation is a '
'binding, "a.x". How\n'
@@ -921,14 +579,15 @@ topics = {'assert': 'The "assert" statement\n'
' invokes a descriptor method: "x.__get__(a)".\n'
'\n'
'Instance Binding\n'
- ' If binding to an object instance, "a.x" is '
- 'transformed into the\n'
- ' call: "type(a).__dict__[\'x\'].__get__(a, type(a))".\n'
+ ' If binding to a new-style object instance, "a.x" is '
+ 'transformed\n'
+ ' into the call: "type(a).__dict__[\'x\'].__get__(a, '
+ 'type(a))".\n'
'\n'
'Class Binding\n'
- ' If binding to a class, "A.x" is transformed into the '
- 'call:\n'
- ' "A.__dict__[\'x\'].__get__(None, A)".\n'
+ ' If binding to a new-style class, "A.x" is transformed '
+ 'into the\n'
+ ' call: "A.__dict__[\'x\'].__get__(None, A)".\n'
'\n'
'Super Binding\n'
' If "a" is an instance of "super", then the binding '
@@ -949,7 +608,7 @@ topics = {'assert': 'The "assert" statement\n'
'does not define "__get__()", then accessing the '
'attribute will return\n'
'the descriptor object itself unless there is a value in '
- 'the object’s\n'
+ "the object's\n"
'instance dictionary. If the descriptor defines '
'"__set__()" and/or\n'
'"__delete__()", it is a data descriptor; if it defines '
@@ -958,13 +617,12 @@ topics = {'assert': 'The "assert" statement\n'
'define both\n'
'"__get__()" and "__set__()", while non-data descriptors '
'have just the\n'
- '"__get__()" method. Data descriptors with "__get__()" '
- 'and "__set__()"\n'
- '(and/or "__delete__()") defined always override a '
- 'redefinition in an\n'
- 'instance dictionary. In contrast, non-data descriptors '
- 'can be\n'
- 'overridden by instances.\n'
+ '"__get__()" method. Data descriptors with "__set__()" '
+ 'and "__get__()"\n'
+ 'defined always override a redefinition in an instance '
+ 'dictionary. In\n'
+ 'contrast, non-data descriptors can be overridden by '
+ 'instances.\n'
'\n'
'Python methods (including "staticmethod()" and '
'"classmethod()") are\n'
@@ -984,38 +642,45 @@ topics = {'assert': 'The "assert" statement\n'
'__slots__\n'
'=========\n'
'\n'
- '*__slots__* allow us to explicitly declare data members '
- '(like\n'
- 'properties) and deny the creation of *__dict__* and '
- '*__weakref__*\n'
- '(unless explicitly declared in *__slots__* or available '
- 'in a parent.)\n'
+ 'By default, instances of both old and new-style classes '
+ 'have a\n'
+ 'dictionary for attribute storage. This wastes space for '
+ 'objects\n'
+ 'having very few instance variables. The space '
+ 'consumption can become\n'
+ 'acute when creating large numbers of instances.\n'
'\n'
- 'The space saved over using *__dict__* can be '
- 'significant. Attribute\n'
- 'lookup speed can be significantly improved as well.\n'
+ 'The default can be overridden by defining *__slots__* in '
+ 'a new-style\n'
+ 'class definition. The *__slots__* declaration takes a '
+ 'sequence of\n'
+ 'instance variables and reserves just enough space in '
+ 'each instance to\n'
+ 'hold a value for each variable. Space is saved because '
+ '*__dict__* is\n'
+ 'not created for each instance.\n'
'\n'
- 'object.__slots__\n'
+ '__slots__\n'
'\n'
' This class variable can be assigned a string, '
'iterable, or sequence\n'
- ' of strings with variable names used by instances. '
- '*__slots__*\n'
- ' reserves space for the declared variables and '
- 'prevents the\n'
- ' automatic creation of *__dict__* and *__weakref__* '
- 'for each\n'
- ' instance.\n'
+ ' of strings with variable names used by instances. If '
+ 'defined in a\n'
+ ' new-style class, *__slots__* reserves space for the '
+ 'declared\n'
+ ' variables and prevents the automatic creation of '
+ '*__dict__* and\n'
+ ' *__weakref__* for each instance.\n'
'\n'
+ ' New in version 2.2.\n'
'\n'
'Notes on using *__slots__*\n'
- '--------------------------\n'
'\n'
'* When inheriting from a class without *__slots__*, the '
'*__dict__*\n'
- ' and *__weakref__* attribute of the instances will '
- 'always be\n'
- ' accessible.\n'
+ ' attribute of that class will always be accessible, so '
+ 'a *__slots__*\n'
+ ' definition in the subclass is meaningless.\n'
'\n'
'* Without a *__dict__* variable, instances cannot be '
'assigned new\n'
@@ -1029,6 +694,14 @@ topics = {'assert': 'The "assert" statement\n'
'*__slots__*\n'
' declaration.\n'
'\n'
+ ' Changed in version 2.3: Previously, adding '
+ '"\'__dict__\'" to the\n'
+ ' *__slots__* declaration would not enable the '
+ 'assignment of new\n'
+ ' attributes not specifically listed in the sequence of '
+ 'instance\n'
+ ' variable names.\n'
+ '\n'
'* Without a *__weakref__* variable for each instance, '
'classes\n'
' defining *__slots__* do not support weak references to '
@@ -1039,6 +712,12 @@ topics = {'assert': 'The "assert" statement\n'
'*__slots__*\n'
' declaration.\n'
'\n'
+ ' Changed in version 2.3: Previously, adding '
+ '"\'__weakref__\'" to the\n'
+ ' *__slots__* declaration would not enable support for '
+ 'weak\n'
+ ' references.\n'
+ '\n'
'* *__slots__* are implemented at the class level by '
'creating\n'
' descriptors (Implementing Descriptors) for each '
@@ -1049,16 +728,13 @@ topics = {'assert': 'The "assert" statement\n'
'the class\n'
' attribute would overwrite the descriptor assignment.\n'
'\n'
- '* The action of a *__slots__* declaration is not limited '
- 'to the\n'
- ' class where it is defined. *__slots__* declared in '
- 'parents are\n'
- ' available in child classes. However, child subclasses '
- 'will get a\n'
- ' *__dict__* and *__weakref__* unless they also define '
- '*__slots__*\n'
- ' (which should only contain names of any *additional* '
- 'slots).\n'
+ '* The action of a *__slots__* declaration is limited to '
+ 'the class\n'
+ ' where it is defined. As a result, subclasses will '
+ 'have a *__dict__*\n'
+ ' unless they also define *__slots__* (which must only '
+ 'contain names\n'
+ ' of any *additional* slots).\n'
'\n'
'* If a class defines a slot also defined in a base '
'class, the\n'
@@ -1072,8 +748,8 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
'* Nonempty *__slots__* does not work for classes derived '
'from\n'
- ' “variable-length” built-in types such as "int", '
- '"bytes" and "tuple".\n'
+ ' "variable-length" built-in types such as "long", "str" '
+ 'and "tuple".\n'
'\n'
'* Any non-string iterable may be assigned to '
'*__slots__*. Mappings\n'
@@ -1085,20 +761,11 @@ topics = {'assert': 'The "assert" statement\n'
'the same\n'
' *__slots__*.\n'
'\n'
- '* Multiple inheritance with multiple slotted parent '
- 'classes can be\n'
- ' used, but only one parent is allowed to have '
- 'attributes created by\n'
- ' slots (the other bases must have empty slot layouts) - '
- 'violations\n'
- ' raise "TypeError".\n'
- '\n'
- '* If an iterator is used for *__slots__* then a '
- 'descriptor is\n'
- ' created for each of the iterator’s values. However, '
- 'the *__slots__*\n'
- ' attribute will be an empty iterator.\n',
- 'attribute-references': 'Attribute references\n'
+ ' Changed in version 2.6: Previously, *__class__* '
+ 'assignment raised an\n'
+ ' error if either new or old class had *__slots__*.\n',
+ 'attribute-references': '\n'
+ 'Attribute references\n'
'********************\n'
'\n'
'An attribute reference is a primary followed by a '
@@ -1108,20 +775,20 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
'The primary must evaluate to an object of a type '
'that supports\n'
- 'attribute references, which most objects do. This '
- 'object is then\n'
- 'asked to produce the attribute whose name is the '
- 'identifier. This\n'
- 'production can be customized by overriding the '
- '"__getattr__()" method.\n'
- 'If this attribute is not available, the exception '
- '"AttributeError" is\n'
- 'raised. Otherwise, the type and value of the object '
- 'produced is\n'
- 'determined by the object. Multiple evaluations of '
- 'the same attribute\n'
- 'reference may yield different objects.\n',
- 'augassign': 'Augmented assignment statements\n'
+ 'attribute references, e.g., a module, list, or an '
+ 'instance. This\n'
+ 'object is then asked to produce the attribute whose '
+ 'name is the\n'
+ 'identifier. If this attribute is not available, the '
+ 'exception\n'
+ '"AttributeError" is raised. Otherwise, the type and '
+ 'value of the\n'
+ 'object produced is determined by the object. '
+ 'Multiple evaluations of\n'
+ 'the same attribute reference may yield different '
+ 'objects.\n',
+ 'augassign': '\n'
+ 'Augmented assignment statements\n'
'*******************************\n'
'\n'
'Augmented assignment is the combination, in a single statement, '
@@ -1132,11 +799,11 @@ topics = {'assert': 'The "assert" statement\n'
'(expression_list | yield_expression)\n'
' augtarget ::= identifier | attributeref | '
'subscription | slicing\n'
- ' augop ::= "+=" | "-=" | "*=" | "@=" | '
- '"/=" | "//=" | "%=" | "**="\n'
+ ' augop ::= "+=" | "-=" | "*=" | "/=" | '
+ '"//=" | "%=" | "**="\n'
' | ">>=" | "<<=" | "&=" | "^=" | "|="\n'
'\n'
- '(See section Primaries for the syntax definitions of the last '
+ '(See section Primaries for the syntax definitions for the last '
'three\n'
'symbols.)\n'
'\n'
@@ -1162,14 +829,6 @@ topics = {'assert': 'The "assert" statement\n'
'object\n'
'is modified instead.\n'
'\n'
- 'Unlike normal assignments, augmented assignments evaluate the '
- 'left-\n'
- 'hand side *before* evaluating the right-hand side. For '
- 'example, "a[i]\n'
- '+= f(x)" first looks-up "a[i]", then it evaluates "f(x)" and '
- 'performs\n'
- 'the addition, and lastly, it writes the result back to "a[i]".\n'
- '\n'
'With the exception of assigning to tuples and multiple targets '
'in a\n'
'single statement, the assignment done by augmented assignment\n'
@@ -1185,16 +844,8 @@ topics = {'assert': 'The "assert" statement\n'
'about\n'
'class and instance attributes applies as for regular '
'assignments.\n',
- 'await': 'Await expression\n'
- '****************\n'
- '\n'
- 'Suspend the execution of *coroutine* on an *awaitable* object. Can\n'
- 'only be used inside a *coroutine function*.\n'
- '\n'
- ' await_expr ::= "await" primary\n'
- '\n'
- 'New in version 3.5.\n',
- 'binary': 'Binary arithmetic operations\n'
+ 'binary': '\n'
+ 'Binary arithmetic operations\n'
'****************************\n'
'\n'
'The binary arithmetic operations have the conventional priority\n'
@@ -1204,35 +855,28 @@ topics = {'assert': 'The "assert" statement\n'
'levels, one for multiplicative operators and one for additive\n'
'operators:\n'
'\n'
- ' m_expr ::= u_expr | m_expr "*" u_expr | m_expr "@" m_expr |\n'
- ' m_expr "//" u_expr | m_expr "/" u_expr |\n'
- ' m_expr "%" u_expr\n'
+ ' m_expr ::= u_expr | m_expr "*" u_expr | m_expr "//" u_expr | '
+ 'm_expr "/" u_expr\n'
+ ' | m_expr "%" u_expr\n'
' a_expr ::= m_expr | a_expr "+" m_expr | a_expr "-" m_expr\n'
'\n'
'The "*" (multiplication) operator yields the product of its '
'arguments.\n'
'The arguments must either both be numbers, or one argument must be '
'an\n'
- 'integer and the other must be a sequence. In the former case, the\n'
- 'numbers are converted to a common type and then multiplied '
- 'together.\n'
- 'In the latter case, sequence repetition is performed; a negative\n'
- 'repetition factor yields an empty sequence.\n'
- '\n'
- 'The "@" (at) operator is intended to be used for matrix\n'
- 'multiplication. No builtin Python types implement this operator.\n'
- '\n'
- 'New in version 3.5.\n'
+ 'integer (plain or long) and the other must be a sequence. In the\n'
+ 'former case, the numbers are converted to a common type and then\n'
+ 'multiplied together. In the latter case, sequence repetition is\n'
+ 'performed; a negative repetition factor yields an empty sequence.\n'
'\n'
'The "/" (division) and "//" (floor division) operators yield the\n'
'quotient of their arguments. The numeric arguments are first\n'
- 'converted to a common type. Division of integers yields a float, '
- 'while\n'
- 'floor division of integers results in an integer; the result is '
- 'that\n'
- 'of mathematical division with the ‘floor’ function applied to the\n'
- 'result. Division by zero raises the "ZeroDivisionError" '
- 'exception.\n'
+ 'converted to a common type. Plain or long integer division yields '
+ 'an\n'
+ 'integer of the same type; the result is that of mathematical '
+ 'division\n'
+ "with the 'floor' function applied to the result. Division by zero\n"
+ 'raises the "ZeroDivisionError" exception.\n'
'\n'
'The "%" (modulo) operator yields the remainder from the division '
'of\n'
@@ -1248,41 +892,45 @@ topics = {'assert': 'The "assert" statement\n'
'as its second operand (or zero); the absolute value of the result '
'is\n'
'strictly smaller than the absolute value of the second operand '
- '[1].\n'
+ '[2].\n'
'\n'
- 'The floor division and modulo operators are connected by the '
- 'following\n'
- 'identity: "x == (x//y)*y + (x%y)". Floor division and modulo are '
- 'also\n'
- 'connected with the built-in function "divmod()": "divmod(x, y) ==\n'
- '(x//y, x%y)". [2].\n'
+ 'The integer division and modulo operators are connected by the\n'
+ 'following identity: "x == (x/y)*y + (x%y)". Integer division and\n'
+ 'modulo are also connected with the built-in function "divmod()":\n'
+ '"divmod(x, y) == (x/y, x%y)". These identities don\'t hold for\n'
+ 'floating point numbers; there similar identities hold '
+ 'approximately\n'
+ 'where "x/y" is replaced by "floor(x/y)" or "floor(x/y) - 1" [3].\n'
'\n'
'In addition to performing the modulo operation on numbers, the '
'"%"\n'
- 'operator is also overloaded by string objects to perform '
- 'old-style\n'
- 'string formatting (also known as interpolation). The syntax for\n'
- 'string formatting is described in the Python Library Reference,\n'
- 'section printf-style String Formatting.\n'
+ 'operator is also overloaded by string and unicode objects to '
+ 'perform\n'
+ 'string formatting (also known as interpolation). The syntax for '
+ 'string\n'
+ 'formatting is described in the Python Library Reference, section\n'
+ 'String Formatting Operations.\n'
'\n'
- 'The floor division operator, the modulo operator, and the '
- '"divmod()"\n'
- 'function are not defined for complex numbers. Instead, convert to '
- 'a\n'
- 'floating point number using the "abs()" function if appropriate.\n'
+ 'Deprecated since version 2.3: The floor division operator, the '
+ 'modulo\n'
+ 'operator, and the "divmod()" function are no longer defined for\n'
+ 'complex numbers. Instead, convert to a floating point number '
+ 'using\n'
+ 'the "abs()" function if appropriate.\n'
'\n'
- 'The "+" (addition) operator yields the sum of its arguments. The\n'
- 'arguments must either both be numbers or both be sequences of the '
+ 'The "+" (addition) operator yields the sum of its arguments. The\n'
+ 'arguments must either both be numbers or both sequences of the '
'same\n'
'type. In the former case, the numbers are converted to a common '
'type\n'
- 'and then added together. In the latter case, the sequences are\n'
+ 'and then added together. In the latter case, the sequences are\n'
'concatenated.\n'
'\n'
'The "-" (subtraction) operator yields the difference of its '
'arguments.\n'
'The numeric arguments are first converted to a common type.\n',
- 'bitwise': 'Binary bitwise operations\n'
+ 'bitwise': '\n'
+ 'Binary bitwise operations\n'
'*************************\n'
'\n'
'Each of the three bitwise operations has a different priority '
@@ -1294,74 +942,506 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
'The "&" operator yields the bitwise AND of its arguments, which '
'must\n'
- 'be integers.\n'
+ 'be plain or long integers. The arguments are converted to a '
+ 'common\n'
+ 'type.\n'
'\n'
'The "^" operator yields the bitwise XOR (exclusive OR) of its\n'
- 'arguments, which must be integers.\n'
+ 'arguments, which must be plain or long integers. The arguments '
+ 'are\n'
+ 'converted to a common type.\n'
'\n'
'The "|" operator yields the bitwise (inclusive) OR of its '
'arguments,\n'
- 'which must be integers.\n',
- 'bltin-code-objects': 'Code Objects\n'
+ 'which must be plain or long integers. The arguments are '
+ 'converted to\n'
+ 'a common type.\n',
+ 'bltin-code-objects': '\n'
+ 'Code Objects\n'
'************\n'
'\n'
'Code objects are used by the implementation to '
- 'represent “pseudo-\n'
- 'compiled” executable Python code such as a function '
+ 'represent "pseudo-\n'
+ 'compiled" executable Python code such as a function '
'body. They differ\n'
- 'from function objects because they don’t contain a '
+ "from function objects because they don't contain a "
'reference to their\n'
'global execution environment. Code objects are '
'returned by the built-\n'
'in "compile()" function and can be extracted from '
'function objects\n'
- 'through their "__code__" attribute. See also the '
+ 'through their "func_code" attribute. See also the '
'"code" module.\n'
'\n'
'A code object can be executed or evaluated by passing '
'it (instead of a\n'
- 'source string) to the "exec()" or "eval()" built-in '
- 'functions.\n'
+ 'source string) to the "exec" statement or the built-in '
+ '"eval()"\n'
+ 'function.\n'
'\n'
'See The standard type hierarchy for more '
'information.\n',
- 'bltin-ellipsis-object': 'The Ellipsis Object\n'
+ 'bltin-ellipsis-object': '\n'
+ 'The Ellipsis Object\n'
'*******************\n'
'\n'
- 'This object is commonly used by slicing (see '
- 'Slicings). It supports\n'
- 'no special operations. There is exactly one '
- 'ellipsis object, named\n'
- '"Ellipsis" (a built-in name). "type(Ellipsis)()" '
- 'produces the\n'
- '"Ellipsis" singleton.\n'
+ 'This object is used by extended slice notation (see '
+ 'Slicings). It\n'
+ 'supports no special operations. There is exactly '
+ 'one ellipsis object,\n'
+ 'named "Ellipsis" (a built-in name).\n'
'\n'
- 'It is written as "Ellipsis" or "...".\n',
- 'bltin-null-object': 'The Null Object\n'
+ 'It is written as "Ellipsis". When in a subscript, '
+ 'it can also be\n'
+ 'written as "...", for example "seq[...]".\n',
+ 'bltin-file-objects': '\n'
+ 'File Objects\n'
+ '************\n'
+ '\n'
+ 'File objects are implemented using C\'s "stdio" '
+ 'package and can be\n'
+ 'created with the built-in "open()" function. File '
+ 'objects are also\n'
+ 'returned by some other built-in functions and methods, '
+ 'such as\n'
+ '"os.popen()" and "os.fdopen()" and the "makefile()" '
+ 'method of socket\n'
+ 'objects. Temporary files can be created using the '
+ '"tempfile" module,\n'
+ 'and high-level file operations such as copying, '
+ 'moving, and deleting\n'
+ 'files and directories can be achieved with the '
+ '"shutil" module.\n'
+ '\n'
+ 'When a file operation fails for an I/O-related reason, '
+ 'the exception\n'
+ '"IOError" is raised. This includes situations where '
+ 'the operation is\n'
+ 'not defined for some reason, like "seek()" on a tty '
+ 'device or writing\n'
+ 'a file opened for reading.\n'
+ '\n'
+ 'Files have the following methods:\n'
+ '\n'
+ 'file.close()\n'
+ '\n'
+ ' Close the file. A closed file cannot be read or '
+ 'written any more.\n'
+ ' Any operation which requires that the file be open '
+ 'will raise a\n'
+ ' "ValueError" after the file has been closed. '
+ 'Calling "close()"\n'
+ ' more than once is allowed.\n'
+ '\n'
+ ' As of Python 2.5, you can avoid having to call this '
+ 'method\n'
+ ' explicitly if you use the "with" statement. For '
+ 'example, the\n'
+ ' following code will automatically close *f* when '
+ 'the "with" block\n'
+ ' is exited:\n'
+ '\n'
+ ' from __future__ import with_statement # This '
+ "isn't required in Python 2.6\n"
+ '\n'
+ ' with open("hello.txt") as f:\n'
+ ' for line in f:\n'
+ ' print line,\n'
+ '\n'
+ ' In older versions of Python, you would have needed '
+ 'to do this to\n'
+ ' get the same effect:\n'
+ '\n'
+ ' f = open("hello.txt")\n'
+ ' try:\n'
+ ' for line in f:\n'
+ ' print line,\n'
+ ' finally:\n'
+ ' f.close()\n'
+ '\n'
+ ' Note: Not all "file-like" types in Python support '
+ 'use as a\n'
+ ' context manager for the "with" statement. If '
+ 'your code is\n'
+ ' intended to work with any file-like object, you '
+ 'can use the\n'
+ ' function "contextlib.closing()" instead of using '
+ 'the object\n'
+ ' directly.\n'
+ '\n'
+ 'file.flush()\n'
+ '\n'
+ ' Flush the internal buffer, like "stdio"\'s '
+ '"fflush()". This may be\n'
+ ' a no-op on some file-like objects.\n'
+ '\n'
+ ' Note: "flush()" does not necessarily write the '
+ "file's data to\n"
+ ' disk. Use "flush()" followed by "os.fsync()" to '
+ 'ensure this\n'
+ ' behavior.\n'
+ '\n'
+ 'file.fileno()\n'
+ '\n'
+ ' Return the integer "file descriptor" that is used '
+ 'by the underlying\n'
+ ' implementation to request I/O operations from the '
+ 'operating system.\n'
+ ' This can be useful for other, lower level '
+ 'interfaces that use file\n'
+ ' descriptors, such as the "fcntl" module or '
+ '"os.read()" and friends.\n'
+ '\n'
+ ' Note: File-like objects which do not have a real '
+ 'file descriptor\n'
+ ' should *not* provide this method!\n'
+ '\n'
+ 'file.isatty()\n'
+ '\n'
+ ' Return "True" if the file is connected to a '
+ 'tty(-like) device, else\n'
+ ' "False".\n'
+ '\n'
+ ' Note: If a file-like object is not associated with '
+ 'a real file,\n'
+ ' this method should *not* be implemented.\n'
+ '\n'
+ 'file.next()\n'
+ '\n'
+ ' A file object is its own iterator, for example '
+ '"iter(f)" returns\n'
+ ' *f* (unless *f* is closed). When a file is used as '
+ 'an iterator,\n'
+ ' typically in a "for" loop (for example, "for line '
+ 'in f: print\n'
+ ' line.strip()"), the "next()" method is called '
+ 'repeatedly. This\n'
+ ' method returns the next input line, or raises '
+ '"StopIteration" when\n'
+ ' EOF is hit when the file is open for reading '
+ '(behavior is undefined\n'
+ ' when the file is open for writing). In order to '
+ 'make a "for" loop\n'
+ ' the most efficient way of looping over the lines of '
+ 'a file (a very\n'
+ ' common operation), the "next()" method uses a '
+ 'hidden read-ahead\n'
+ ' buffer. As a consequence of using a read-ahead '
+ 'buffer, combining\n'
+ ' "next()" with other file methods (like '
+ '"readline()") does not work\n'
+ ' right. However, using "seek()" to reposition the '
+ 'file to an\n'
+ ' absolute position will flush the read-ahead '
+ 'buffer.\n'
+ '\n'
+ ' New in version 2.3.\n'
+ '\n'
+ 'file.read([size])\n'
+ '\n'
+ ' Read at most *size* bytes from the file (less if '
+ 'the read hits EOF\n'
+ ' before obtaining *size* bytes). If the *size* '
+ 'argument is negative\n'
+ ' or omitted, read all data until EOF is reached. '
+ 'The bytes are\n'
+ ' returned as a string object. An empty string is '
+ 'returned when EOF\n'
+ ' is encountered immediately. (For certain files, '
+ 'like ttys, it\n'
+ ' makes sense to continue reading after an EOF is '
+ 'hit.) Note that\n'
+ ' this method may call the underlying C function '
+ '"fread()" more than\n'
+ ' once in an effort to acquire as close to *size* '
+ 'bytes as possible.\n'
+ ' Also note that when in non-blocking mode, less data '
+ 'than was\n'
+ ' requested may be returned, even if no *size* '
+ 'parameter was given.\n'
+ '\n'
+ ' Note: This function is simply a wrapper for the '
+ 'underlying\n'
+ ' "fread()" C function, and will behave the same in '
+ 'corner cases,\n'
+ ' such as whether the EOF value is cached.\n'
+ '\n'
+ 'file.readline([size])\n'
+ '\n'
+ ' Read one entire line from the file. A trailing '
+ 'newline character\n'
+ ' is kept in the string (but may be absent when a '
+ 'file ends with an\n'
+ ' incomplete line). [6] If the *size* argument is '
+ 'present and non-\n'
+ ' negative, it is a maximum byte count (including the '
+ 'trailing\n'
+ ' newline) and an incomplete line may be returned. '
+ 'When *size* is not\n'
+ ' 0, an empty string is returned *only* when EOF is '
+ 'encountered\n'
+ ' immediately.\n'
+ '\n'
+ ' Note: Unlike "stdio"\'s "fgets()", the returned '
+ 'string contains\n'
+ ' null characters ("\'\\0\'") if they occurred in '
+ 'the input.\n'
+ '\n'
+ 'file.readlines([sizehint])\n'
+ '\n'
+ ' Read until EOF using "readline()" and return a list '
+ 'containing the\n'
+ ' lines thus read. If the optional *sizehint* '
+ 'argument is present,\n'
+ ' instead of reading up to EOF, whole lines totalling '
+ 'approximately\n'
+ ' *sizehint* bytes (possibly after rounding up to an '
+ 'internal buffer\n'
+ ' size) are read. Objects implementing a file-like '
+ 'interface may\n'
+ ' choose to ignore *sizehint* if it cannot be '
+ 'implemented, or cannot\n'
+ ' be implemented efficiently.\n'
+ '\n'
+ 'file.xreadlines()\n'
+ '\n'
+ ' This method returns the same thing as "iter(f)".\n'
+ '\n'
+ ' New in version 2.1.\n'
+ '\n'
+ ' Deprecated since version 2.3: Use "for line in '
+ 'file" instead.\n'
+ '\n'
+ 'file.seek(offset[, whence])\n'
+ '\n'
+ ' Set the file\'s current position, like "stdio"\'s '
+ '"fseek()". The\n'
+ ' *whence* argument is optional and defaults to '
+ '"os.SEEK_SET" or "0"\n'
+ ' (absolute file positioning); other values are '
+ '"os.SEEK_CUR" or "1"\n'
+ ' (seek relative to the current position) and '
+ '"os.SEEK_END" or "2"\n'
+ " (seek relative to the file's end). There is no "
+ 'return value.\n'
+ '\n'
+ ' For example, "f.seek(2, os.SEEK_CUR)" advances the '
+ 'position by two\n'
+ ' and "f.seek(-3, os.SEEK_END)" sets the position to '
+ 'the third to\n'
+ ' last.\n'
+ '\n'
+ ' Note that if the file is opened for appending (mode '
+ '"\'a\'" or\n'
+ ' "\'a+\'"), any "seek()" operations will be undone '
+ 'at the next write.\n'
+ ' If the file is only opened for writing in append '
+ 'mode (mode "\'a\'"),\n'
+ ' this method is essentially a no-op, but it remains '
+ 'useful for files\n'
+ ' opened in append mode with reading enabled (mode '
+ '"\'a+\'"). If the\n'
+ ' file is opened in text mode (without "\'b\'"), only '
+ 'offsets returned\n'
+ ' by "tell()" are legal. Use of other offsets causes '
+ 'undefined\n'
+ ' behavior.\n'
+ '\n'
+ ' Note that not all file objects are seekable.\n'
+ '\n'
+ ' Changed in version 2.6: Passing float values as '
+ 'offset has been\n'
+ ' deprecated.\n'
+ '\n'
+ 'file.tell()\n'
+ '\n'
+ " Return the file's current position, like "
+ '"stdio"\'s "ftell()".\n'
+ '\n'
+ ' Note: On Windows, "tell()" can return illegal '
+ 'values (after an\n'
+ ' "fgets()") when reading files with Unix-style '
+ 'line-endings. Use\n'
+ ' binary mode ("\'rb\'") to circumvent this '
+ 'problem.\n'
+ '\n'
+ 'file.truncate([size])\n'
+ '\n'
+ " Truncate the file's size. If the optional *size* "
+ 'argument is\n'
+ ' present, the file is truncated to (at most) that '
+ 'size. The size\n'
+ ' defaults to the current position. The current file '
+ 'position is not\n'
+ ' changed. Note that if a specified size exceeds the '
+ "file's current\n"
+ ' size, the result is platform-dependent: '
+ 'possibilities include that\n'
+ ' the file may remain unchanged, increase to the '
+ 'specified size as if\n'
+ ' zero-filled, or increase to the specified size with '
+ 'undefined new\n'
+ ' content. Availability: Windows, many Unix '
+ 'variants.\n'
+ '\n'
+ 'file.write(str)\n'
+ '\n'
+ ' Write a string to the file. There is no return '
+ 'value. Due to\n'
+ ' buffering, the string may not actually show up in '
+ 'the file until\n'
+ ' the "flush()" or "close()" method is called.\n'
+ '\n'
+ 'file.writelines(sequence)\n'
+ '\n'
+ ' Write a sequence of strings to the file. The '
+ 'sequence can be any\n'
+ ' iterable object producing strings, typically a list '
+ 'of strings.\n'
+ ' There is no return value. (The name is intended to '
+ 'match\n'
+ ' "readlines()"; "writelines()" does not add line '
+ 'separators.)\n'
+ '\n'
+ 'Files support the iterator protocol. Each iteration '
+ 'returns the same\n'
+ 'result as "readline()", and iteration ends when the '
+ '"readline()"\n'
+ 'method returns an empty string.\n'
+ '\n'
+ 'File objects also offer a number of other interesting '
+ 'attributes.\n'
+ 'These are not required for file-like objects, but '
+ 'should be\n'
+ 'implemented if they make sense for the particular '
+ 'object.\n'
+ '\n'
+ 'file.closed\n'
+ '\n'
+ ' bool indicating the current state of the file '
+ 'object. This is a\n'
+ ' read-only attribute; the "close()" method changes '
+ 'the value. It may\n'
+ ' not be available on all file-like objects.\n'
+ '\n'
+ 'file.encoding\n'
+ '\n'
+ ' The encoding that this file uses. When Unicode '
+ 'strings are written\n'
+ ' to a file, they will be converted to byte strings '
+ 'using this\n'
+ ' encoding. In addition, when the file is connected '
+ 'to a terminal,\n'
+ ' the attribute gives the encoding that the terminal '
+ 'is likely to use\n'
+ ' (that information might be incorrect if the user '
+ 'has misconfigured\n'
+ ' the terminal). The attribute is read-only and may '
+ 'not be present\n'
+ ' on all file-like objects. It may also be "None", in '
+ 'which case the\n'
+ ' file uses the system default encoding for '
+ 'converting Unicode\n'
+ ' strings.\n'
+ '\n'
+ ' New in version 2.3.\n'
+ '\n'
+ 'file.errors\n'
+ '\n'
+ ' The Unicode error handler used along with the '
+ 'encoding.\n'
+ '\n'
+ ' New in version 2.6.\n'
+ '\n'
+ 'file.mode\n'
+ '\n'
+ ' The I/O mode for the file. If the file was created '
+ 'using the\n'
+ ' "open()" built-in function, this will be the value '
+ 'of the *mode*\n'
+ ' parameter. This is a read-only attribute and may '
+ 'not be present on\n'
+ ' all file-like objects.\n'
+ '\n'
+ 'file.name\n'
+ '\n'
+ ' If the file object was created using "open()", the '
+ 'name of the\n'
+ ' file. Otherwise, some string that indicates the '
+ 'source of the file\n'
+ ' object, of the form "<...>". This is a read-only '
+ 'attribute and may\n'
+ ' not be present on all file-like objects.\n'
+ '\n'
+ 'file.newlines\n'
+ '\n'
+ ' If Python was built with *universal newlines* '
+ 'enabled (the default)\n'
+ ' this read-only attribute exists, and for files '
+ 'opened in universal\n'
+ ' newline read mode it keeps track of the types of '
+ 'newlines\n'
+ ' encountered while reading the file. The values it '
+ 'can take are\n'
+ ' "\'\\r\'", "\'\\n\'", "\'\\r\\n\'", "None" '
+ '(unknown, no newlines read yet) or\n'
+ ' a tuple containing all the newline types seen, to '
+ 'indicate that\n'
+ ' multiple newline conventions were encountered. For '
+ 'files not opened\n'
+ ' in universal newlines read mode the value of this '
+ 'attribute will be\n'
+ ' "None".\n'
+ '\n'
+ 'file.softspace\n'
+ '\n'
+ ' Boolean that indicates whether a space character '
+ 'needs to be\n'
+ ' printed before another value when using the "print" '
+ 'statement.\n'
+ ' Classes that are trying to simulate a file object '
+ 'should also have\n'
+ ' a writable "softspace" attribute, which should be '
+ 'initialized to\n'
+ ' zero. This will be automatic for most classes '
+ 'implemented in\n'
+ ' Python (care may be needed for objects that '
+ 'override attribute\n'
+ ' access); types implemented in C will have to '
+ 'provide a writable\n'
+ ' "softspace" attribute.\n'
+ '\n'
+ ' Note: This attribute is not used to control the '
+ '"print"\n'
+ ' statement, but to allow the implementation of '
+ '"print" to keep\n'
+ ' track of its internal state.\n',
+ 'bltin-null-object': '\n'
+ 'The Null Object\n'
'***************\n'
'\n'
- 'This object is returned by functions that don’t '
+ "This object is returned by functions that don't "
'explicitly return a\n'
'value. It supports no special operations. There is '
'exactly one null\n'
- 'object, named "None" (a built-in name). "type(None)()" '
- 'produces the\n'
- 'same singleton.\n'
+ 'object, named "None" (a built-in name).\n'
'\n'
'It is written as "None".\n',
- 'bltin-type-objects': 'Type Objects\n'
+ 'bltin-type-objects': '\n'
+ 'Type Objects\n'
'************\n'
'\n'
'Type objects represent the various object types. An '
- 'object’s type is\n'
+ "object's type is\n"
'accessed by the built-in function "type()". There are '
'no special\n'
'operations on types. The standard module "types" '
'defines names for\n'
'all standard built-in types.\n'
'\n'
- 'Types are written like this: "<class \'int\'>".\n',
- 'booleans': 'Boolean operations\n'
+ 'Types are written like this: "<type \'int\'>".\n',
+ 'booleans': '\n'
+ 'Boolean operations\n'
'******************\n'
'\n'
' or_test ::= and_test | or_test "or" and_test\n'
@@ -1376,9 +1456,9 @@ topics = {'assert': 'The "assert" statement\n'
'strings and containers (including strings, tuples, lists,\n'
'dictionaries, sets and frozensets). All other values are '
'interpreted\n'
- 'as true. User-defined objects can customize their truth value '
- 'by\n'
- 'providing a "__bool__()" method.\n'
+ 'as true. (See the "__nonzero__()" special method for a way to '
+ 'change\n'
+ 'this.)\n'
'\n'
'The operator "not" yields "True" if its argument is false, '
'"False"\n'
@@ -1396,21 +1476,22 @@ topics = {'assert': 'The "assert" statement\n'
'is\n'
'returned.\n'
'\n'
- 'Note that neither "and" nor "or" restrict the value and type '
+ '(Note that neither "and" nor "or" restrict the value and type '
'they\n'
'return to "False" and "True", but rather return the last '
'evaluated\n'
- 'argument. This is sometimes useful, e.g., if "s" is a string '
+ 'argument. This is sometimes useful, e.g., if "s" is a string '
'that\n'
'should be replaced by a default value if it is empty, the '
'expression\n'
'"s or \'foo\'" yields the desired value. Because "not" has to '
- 'create a\n'
- 'new value, it returns a boolean value regardless of the type of '
- 'its\n'
- 'argument (for example, "not \'foo\'" produces "False" rather '
- 'than "\'\'".)\n',
- 'break': 'The "break" statement\n'
+ 'invent a\n'
+ 'value anyway, it does not bother to return a value of the same '
+ 'type as\n'
+ 'its argument, so e.g., "not \'foo\'" yields "False", not '
+ '"\'\'".)\n',
+ 'break': '\n'
+ 'The "break" statement\n'
'*********************\n'
'\n'
' break_stmt ::= "break"\n'
@@ -1431,49 +1512,52 @@ topics = {'assert': 'The "assert" statement\n'
'clause, that "finally" clause is executed before really leaving '
'the\n'
'loop.\n',
- 'callable-types': 'Emulating callable objects\n'
+ 'callable-types': '\n'
+ 'Emulating callable objects\n'
'**************************\n'
'\n'
'object.__call__(self[, args...])\n'
'\n'
- ' Called when the instance is “called” as a function; if '
+ ' Called when the instance is "called" as a function; if '
'this method\n'
' is defined, "x(arg1, arg2, ...)" is a shorthand for\n'
' "x.__call__(arg1, arg2, ...)".\n',
- 'calls': 'Calls\n'
+ 'calls': '\n'
+ 'Calls\n'
'*****\n'
'\n'
'A call calls a callable object (e.g., a *function*) with a '
'possibly\n'
'empty series of *arguments*:\n'
'\n'
- ' call ::= primary "(" [argument_list [","] | '
- 'comprehension] ")"\n'
+ ' call ::= primary "(" [argument_list [","]\n'
+ ' | expression genexpr_for] ")"\n'
' argument_list ::= positional_arguments ["," '
- 'starred_and_keywords]\n'
- ' ["," keywords_arguments]\n'
- ' | starred_and_keywords ["," '
- 'keywords_arguments]\n'
- ' | keywords_arguments\n'
- ' positional_arguments ::= ["*"] expression ("," ["*"] '
- 'expression)*\n'
- ' starred_and_keywords ::= ("*" expression | keyword_item)\n'
- ' ("," "*" expression | "," '
- 'keyword_item)*\n'
- ' keywords_arguments ::= (keyword_item | "**" expression)\n'
- ' ("," keyword_item | "," "**" '
- 'expression)*\n'
+ 'keyword_arguments]\n'
+ ' ["," "*" expression] ["," '
+ 'keyword_arguments]\n'
+ ' ["," "**" expression]\n'
+ ' | keyword_arguments ["," "*" expression]\n'
+ ' ["," "**" expression]\n'
+ ' | "*" expression ["," keyword_arguments] ["," '
+ '"**" expression]\n'
+ ' | "**" expression\n'
+ ' positional_arguments ::= expression ("," expression)*\n'
+ ' keyword_arguments ::= keyword_item ("," keyword_item)*\n'
' keyword_item ::= identifier "=" expression\n'
'\n'
- 'An optional trailing comma may be present after the positional and\n'
- 'keyword arguments but does not affect the semantics.\n'
+ 'A trailing comma may be present after the positional and keyword\n'
+ 'arguments but does not affect the semantics.\n'
'\n'
'The primary must evaluate to a callable object (user-defined\n'
'functions, built-in functions, methods of built-in objects, class\n'
- 'objects, methods of class instances, and all objects having a\n'
- '"__call__()" method are callable). All argument expressions are\n'
- 'evaluated before the call is attempted. Please refer to section\n'
- 'Function definitions for the syntax of formal *parameter* lists.\n'
+ 'objects, methods of class instances, and certain class instances\n'
+ 'themselves are callable; extensions may define additional callable\n'
+ 'object types). All argument expressions are evaluated before the '
+ 'call\n'
+ 'is attempted. Please refer to section Function definitions for '
+ 'the\n'
+ 'syntax of formal *parameter* lists.\n'
'\n'
'If keyword arguments are present, they are first converted to\n'
'positional arguments, as follows. First, a list of unfilled slots '
@@ -1496,7 +1580,7 @@ topics = {'assert': 'The "assert" statement\n'
'values are calculated, once, when the function is defined; thus, a\n'
'mutable object such as a list or dictionary used as default value '
'will\n'
- 'be shared by all calls that don’t specify an argument value for '
+ "be shared by all calls that don't specify an argument value for "
'the\n'
'corresponding slot; this should usually be avoided.) If there are '
'any\n'
@@ -1509,7 +1593,7 @@ topics = {'assert': 'The "assert" statement\n'
'**CPython implementation detail:** An implementation may provide\n'
'built-in functions whose positional parameters do not have names, '
'even\n'
- 'if they are ‘named’ for the purpose of documentation, and which\n'
+ "if they are 'named' for the purpose of documentation, and which\n"
'therefore cannot be supplied by keyword. In CPython, this is the '
'case\n'
'for functions implemented in C that use "PyArg_ParseTuple()" to '
@@ -1538,25 +1622,23 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
'If the syntax "*expression" appears in the function call, '
'"expression"\n'
- 'must evaluate to an *iterable*. Elements from these iterables are\n'
- 'treated as if they were additional positional arguments. For the '
- 'call\n'
- '"f(x1, x2, *y, x3, x4)", if *y* evaluates to a sequence *y1*, …, '
- '*yM*,\n'
- 'this is equivalent to a call with M+4 positional arguments *x1*, '
- '*x2*,\n'
- '*y1*, …, *yM*, *x3*, *x4*.\n'
+ 'must evaluate to an iterable. Elements from this iterable are '
+ 'treated\n'
+ 'as if they were additional positional arguments; if there are\n'
+ 'positional arguments *x1*, ..., *xN*, and "expression" evaluates to '
+ 'a\n'
+ 'sequence *y1*, ..., *yM*, this is equivalent to a call with M+N\n'
+ 'positional arguments *x1*, ..., *xN*, *y1*, ..., *yM*.\n'
'\n'
'A consequence of this is that although the "*expression" syntax '
'may\n'
- 'appear *after* explicit keyword arguments, it is processed '
- '*before*\n'
- 'the keyword arguments (and any "**expression" arguments – see '
- 'below).\n'
- 'So:\n'
+ 'appear *after* some keyword arguments, it is processed *before* '
+ 'the\n'
+ 'keyword arguments (and the "**expression" argument, if any -- see\n'
+ 'below). So:\n'
'\n'
' >>> def f(a, b):\n'
- ' ... print(a, b)\n'
+ ' ... print a, b\n'
' ...\n'
' >>> f(b=1, *(2,))\n'
' 2 1\n'
@@ -1574,31 +1656,28 @@ topics = {'assert': 'The "assert" statement\n'
'arise.\n'
'\n'
'If the syntax "**expression" appears in the function call,\n'
- '"expression" must evaluate to a *mapping*, the contents of which '
- 'are\n'
- 'treated as additional keyword arguments. If a keyword is already\n'
- 'present (as an explicit keyword argument, or from another '
- 'unpacking),\n'
- 'a "TypeError" exception is raised.\n'
+ '"expression" must evaluate to a mapping, the contents of which are\n'
+ 'treated as additional keyword arguments. In the case of a keyword\n'
+ 'appearing in both "expression" and as an explicit keyword argument, '
+ 'a\n'
+ '"TypeError" exception is raised.\n'
'\n'
'Formal parameters using the syntax "*identifier" or "**identifier"\n'
'cannot be used as positional argument slots or as keyword argument\n'
- 'names.\n'
- '\n'
- 'Changed in version 3.5: Function calls accept any number of "*" '
- 'and\n'
- '"**" unpackings, positional arguments may follow iterable '
- 'unpackings\n'
- '("*"), and keyword arguments may follow dictionary unpackings '
- '("**").\n'
- 'Originally proposed by **PEP 448**.\n'
+ 'names. Formal parameters using the syntax "(sublist)" cannot be '
+ 'used\n'
+ 'as keyword argument names; the outermost sublist corresponds to a\n'
+ 'single unnamed argument slot, and the argument value is assigned '
+ 'to\n'
+ 'the sublist using the usual tuple assignment rules after all other\n'
+ 'parameter processing is done.\n'
'\n'
'A call always returns some value, possibly "None", unless it raises '
'an\n'
'exception. How this value is computed depends on the type of the\n'
'callable object.\n'
'\n'
- 'If it is—\n'
+ 'If it is---\n'
'\n'
'a user-defined function:\n'
' The code block for the function is executed, passing it the\n'
@@ -1628,103 +1707,83 @@ topics = {'assert': 'The "assert" statement\n'
' The class must define a "__call__()" method; the effect is then '
'the\n'
' same as if that method was called.\n',
- 'class': 'Class definitions\n'
+ 'class': '\n'
+ 'Class definitions\n'
'*****************\n'
'\n'
'A class definition defines a class object (see section The '
'standard\n'
'type hierarchy):\n'
'\n'
- ' classdef ::= [decorators] "class" classname [inheritance] ":" '
- 'suite\n'
- ' inheritance ::= "(" [argument_list] ")"\n'
+ ' classdef ::= "class" classname [inheritance] ":" suite\n'
+ ' inheritance ::= "(" [expression_list] ")"\n'
' classname ::= identifier\n'
'\n'
- 'A class definition is an executable statement. The inheritance '
- 'list\n'
- 'usually gives a list of base classes (see Metaclasses for more\n'
- 'advanced uses), so each item in the list should evaluate to a '
- 'class\n'
- 'object which allows subclassing. Classes without an inheritance '
+ 'A class definition is an executable statement. It first evaluates '
+ 'the\n'
+ 'inheritance list, if present. Each item in the inheritance list\n'
+ 'should evaluate to a class object or class type which allows\n'
+ "subclassing. The class's suite is then executed in a new "
+ 'execution\n'
+ 'frame (see section Naming and binding), using a newly created '
+ 'local\n'
+ 'namespace and the original global namespace. (Usually, the suite\n'
+ "contains only function definitions.) When the class's suite "
+ 'finishes\n'
+ 'execution, its execution frame is discarded but its local namespace '
+ 'is\n'
+ 'saved. [4] A class object is then created using the inheritance '
'list\n'
- 'inherit, by default, from the base class "object"; hence,\n'
- '\n'
- ' class Foo:\n'
- ' pass\n'
- '\n'
- 'is equivalent to\n'
- '\n'
- ' class Foo(object):\n'
- ' pass\n'
- '\n'
- 'The class’s suite is then executed in a new execution frame (see\n'
- 'Naming and binding), using a newly created local namespace and the\n'
- 'original global namespace. (Usually, the suite contains mostly\n'
- 'function definitions.) When the class’s suite finishes execution, '
- 'its\n'
- 'execution frame is discarded but its local namespace is saved. [3] '
- 'A\n'
- 'class object is then created using the inheritance list for the '
- 'base\n'
- 'classes and the saved local namespace for the attribute '
- 'dictionary.\n'
- 'The class name is bound to this class object in the original local\n'
- 'namespace.\n'
- '\n'
- 'The order in which attributes are defined in the class body is\n'
- 'preserved in the new class’s "__dict__". Note that this is '
- 'reliable\n'
- 'only right after the class is created and only for classes that '
- 'were\n'
- 'defined using the definition syntax.\n'
- '\n'
- 'Class creation can be customized heavily using metaclasses.\n'
- '\n'
- 'Classes can also be decorated: just like when decorating '
- 'functions,\n'
- '\n'
- ' @f1(arg)\n'
- ' @f2\n'
- ' class Foo: pass\n'
- '\n'
- 'is roughly equivalent to\n'
+ 'for the base classes and the saved local namespace for the '
+ 'attribute\n'
+ 'dictionary. The class name is bound to this class object in the\n'
+ 'original local namespace.\n'
'\n'
- ' class Foo: pass\n'
- ' Foo = f1(arg)(f2(Foo))\n'
+ "**Programmer's note:** Variables defined in the class definition "
+ 'are\n'
+ 'class variables; they are shared by all instances. To create '
+ 'instance\n'
+ 'variables, they can be set in a method with "self.name = value". '
+ 'Both\n'
+ 'class and instance variables are accessible through the notation\n'
+ '""self.name"", and an instance variable hides a class variable '
+ 'with\n'
+ 'the same name when accessed in this way. Class variables can be '
+ 'used\n'
+ 'as defaults for instance variables, but using mutable values there '
+ 'can\n'
+ 'lead to unexpected results. For *new-style class*es, descriptors '
+ 'can\n'
+ 'be used to create instance variables with different implementation\n'
+ 'details.\n'
+ '\n'
+ 'Class definitions, like function definitions, may be wrapped by one '
+ 'or\n'
+ 'more *decorator* expressions. The evaluation rules for the '
+ 'decorator\n'
+ 'expressions are the same as for functions. The result must be a '
+ 'class\n'
+ 'object, which is then bound to the class name.\n'
'\n'
- 'The evaluation rules for the decorator expressions are the same as '
- 'for\n'
- 'function decorators. The result is then bound to the class name.\n'
+ '-[ Footnotes ]-\n'
'\n'
- '**Programmer’s note:** Variables defined in the class definition '
- 'are\n'
- 'class attributes; they are shared by instances. Instance '
- 'attributes\n'
- 'can be set in a method with "self.name = value". Both class and\n'
- 'instance attributes are accessible through the notation '
- '“"self.name"”,\n'
- 'and an instance attribute hides a class attribute with the same '
- 'name\n'
- 'when accessed in this way. Class attributes can be used as '
- 'defaults\n'
- 'for instance attributes, but using mutable values there can lead '
- 'to\n'
- 'unexpected results. Descriptors can be used to create instance\n'
- 'variables with different implementation details.\n'
+ '[1] The exception is propagated to the invocation stack unless\n'
+ ' there is a "finally" clause which happens to raise another\n'
+ ' exception. That new exception causes the old one to be lost.\n'
'\n'
- 'See also:\n'
+ '[2] Currently, control "flows off the end" except in the case of\n'
+ ' an exception or the execution of a "return", "continue", or\n'
+ ' "break" statement.\n'
'\n'
- ' **PEP 3115** - Metaclasses in Python 3000\n'
- ' The proposal that changed the declaration of metaclasses to '
- 'the\n'
- ' current syntax, and the semantics for how classes with\n'
- ' metaclasses are constructed.\n'
+ '[3] A string literal appearing as the first statement in the\n'
+ ' function body is transformed into the function\'s "__doc__"\n'
+ " attribute and therefore the function's *docstring*.\n"
'\n'
- ' **PEP 3129** - Class Decorators\n'
- ' The proposal that added class decorators. Function and '
- 'method\n'
- ' decorators were introduced in **PEP 318**.\n',
- 'comparisons': 'Comparisons\n'
+ '[4] A string literal appearing as the first statement in the class\n'
+ ' body is transformed into the namespace\'s "__doc__" item and\n'
+ " therefore the class's *docstring*.\n",
+ 'comparisons': '\n'
+ 'Comparisons\n'
'***********\n'
'\n'
'Unlike C, all comparison operations in Python have the same '
@@ -1735,8 +1794,9 @@ topics = {'assert': 'The "assert" statement\n'
'the\n'
'interpretation that is conventional in mathematics:\n'
'\n'
- ' comparison ::= or_expr (comp_operator or_expr)*\n'
- ' comp_operator ::= "<" | ">" | "==" | ">=" | "<=" | "!="\n'
+ ' comparison ::= or_expr ( comp_operator or_expr )*\n'
+ ' comp_operator ::= "<" | ">" | "==" | ">=" | "<=" | "<>" | '
+ '"!="\n'
' | "is" ["not"] | ["not"] "in"\n'
'\n'
'Comparisons yield boolean values: "True" or "False".\n'
@@ -1749,20 +1809,26 @@ topics = {'assert': 'The "assert" statement\n'
'y" is\n'
'found to be false).\n'
'\n'
- 'Formally, if *a*, *b*, *c*, …, *y*, *z* are expressions and '
+ 'Formally, if *a*, *b*, *c*, ..., *y*, *z* are expressions and '
'*op1*,\n'
- '*op2*, …, *opN* are comparison operators, then "a op1 b op2 c '
- '... y\n'
+ '*op2*, ..., *opN* are comparison operators, then "a op1 b op2 '
+ 'c ... y\n'
'opN z" is equivalent to "a op1 b and b op2 c and ... y opN '
'z", except\n'
'that each expression is evaluated at most once.\n'
'\n'
- 'Note that "a op1 b op2 c" doesn’t imply any kind of '
+ 'Note that "a op1 b op2 c" doesn\'t imply any kind of '
'comparison between\n'
'*a* and *c*, so that, e.g., "x < y > z" is perfectly legal '
'(though\n'
'perhaps not pretty).\n'
'\n'
+ 'The forms "<>" and "!=" are equivalent; for consistency with '
+ 'C, "!="\n'
+ 'is preferred; where "!=" is mentioned below "<>" is also '
+ 'accepted.\n'
+ 'The "<>" spelling is considered obsolescent.\n'
+ '\n'
'\n'
'Value comparisons\n'
'=================\n'
@@ -1778,7 +1844,7 @@ topics = {'assert': 'The "assert" statement\n'
'rather\n'
'abstract notion in Python: For example, there is no canonical '
'access\n'
- 'method for an object’s value. Also, there is no requirement '
+ "method for an object's value. Also, there is no requirement "
'that the\n'
'value of an object should be constructed in a particular way, '
'e.g.\n'
@@ -1790,13 +1856,11 @@ topics = {'assert': 'The "assert" statement\n'
'of their\n'
'comparison implementation.\n'
'\n'
- 'Because all types are (direct or indirect) subtypes of '
- '"object", they\n'
- 'inherit the default comparison behavior from "object". Types '
- 'can\n'
- 'customize their comparison behavior by implementing *rich '
- 'comparison\n'
- 'methods* like "__lt__()", described in Basic customization.\n'
+ 'Types can customize their comparison behavior by implementing '
+ 'a\n'
+ '"__cmp__()" method or *rich comparison methods* like '
+ '"__lt__()",\n'
+ 'described in Basic customization.\n'
'\n'
'The default behavior for equality comparison ("==" and "!=") '
'is based\n'
@@ -1810,11 +1874,17 @@ topics = {'assert': 'The "assert" statement\n'
'all objects should be reflexive (i.e. "x is y" implies "x == '
'y").\n'
'\n'
- 'A default order comparison ("<", ">", "<=", and ">=") is not '
- 'provided;\n'
- 'an attempt raises "TypeError". A motivation for this default '
- 'behavior\n'
- 'is the lack of a similar invariant as for equality.\n'
+ 'The default order comparison ("<", ">", "<=", and ">=") gives '
+ 'a\n'
+ 'consistent but arbitrary order.\n'
+ '\n'
+ '(This unusual definition of comparison was used to simplify '
+ 'the\n'
+ 'definition of operations like sorting and the "in" and "not '
+ 'in"\n'
+ 'operators. In the future, the comparison rules for objects '
+ 'of\n'
+ 'different types are likely to change.)\n'
'\n'
'The behavior of the default equality comparison, that '
'instances with\n'
@@ -1832,68 +1902,58 @@ topics = {'assert': 'The "assert" statement\n'
'most\n'
'important built-in types.\n'
'\n'
- '* Numbers of built-in numeric types (Numeric Types — int, '
+ '* Numbers of built-in numeric types (Numeric Types --- int, '
'float,\n'
- ' complex) and of the standard library types '
- '"fractions.Fraction" and\n'
- ' "decimal.Decimal" can be compared within and across their '
- 'types,\n'
- ' with the restriction that complex numbers do not support '
- 'order\n'
- ' comparison. Within the limits of the types involved, they '
- 'compare\n'
- ' mathematically (algorithmically) correct without loss of '
- 'precision.\n'
- '\n'
- ' The not-a-number values "float(\'NaN\')" and '
- '"decimal.Decimal(\'NaN\')"\n'
- ' are special. Any ordered comparison of a number to a '
- 'not-a-number\n'
- ' value is false. A counter-intuitive implication is that '
- 'not-a-number\n'
- ' values are not equal to themselves. For example, if "x =\n'
- ' float(\'NaN\')", "3 < x", "x < 3", "x == x", "x != x" are '
- 'all false.\n'
- ' This behavior is compliant with IEEE 754.\n'
- '\n'
- '* "None" and "NotImplemented" are singletons. **PEP 8** '
- 'advises\n'
- ' that comparisons for singletons should always be done with '
- '"is" or\n'
- ' "is not", never the equality operators.\n'
- '\n'
- '* Binary sequences (instances of "bytes" or "bytearray") can '
- 'be\n'
- ' compared within and across their types. They compare\n'
- ' lexicographically using the numeric values of their '
- 'elements.\n'
+ ' long, complex) and of the standard library types\n'
+ ' "fractions.Fraction" and "decimal.Decimal" can be compared '
+ 'within\n'
+ ' and across their types, with the restriction that complex '
+ 'numbers do\n'
+ ' not support order comparison. Within the limits of the '
+ 'types\n'
+ ' involved, they compare mathematically (algorithmically) '
+ 'correct\n'
+ ' without loss of precision.\n'
'\n'
- '* Strings (instances of "str") compare lexicographically '
- 'using the\n'
- ' numerical Unicode code points (the result of the built-in '
- 'function\n'
- ' "ord()") of their characters. [3]\n'
+ '* Strings (instances of "str" or "unicode") compare\n'
+ ' lexicographically using the numeric equivalents (the result '
+ 'of the\n'
+ ' built-in function "ord()") of their characters. [4] When '
+ 'comparing\n'
+ ' an 8-bit string and a Unicode string, the 8-bit string is '
+ 'converted\n'
+ ' to Unicode. If the conversion fails, the strings are '
+ 'considered\n'
+ ' unequal.\n'
'\n'
- ' Strings and binary sequences cannot be directly compared.\n'
+ '* Instances of "tuple" or "list" can be compared only within '
+ 'each of\n'
+ ' their types. Equality comparison across these types '
+ 'results in\n'
+ ' unequality, and ordering comparison across these types '
+ 'gives an\n'
+ ' arbitrary order.\n'
'\n'
- '* Sequences (instances of "tuple", "list", or "range") can '
- 'be\n'
- ' compared only within each of their types, with the '
- 'restriction that\n'
- ' ranges do not support order comparison. Equality '
- 'comparison across\n'
- ' these types results in inequality, and ordering comparison '
- 'across\n'
- ' these types raises "TypeError".\n'
+ ' These sequences compare lexicographically using comparison '
+ 'of\n'
+ ' corresponding elements, whereby reflexivity of the elements '
+ 'is\n'
+ ' enforced.\n'
'\n'
- ' Sequences compare lexicographically using comparison of\n'
- ' corresponding elements. The built-in containers typically '
- 'assume\n'
- ' identical objects are equal to themselves. That lets them '
- 'bypass\n'
- ' equality tests for identical objects to improve performance '
- 'and to\n'
- ' maintain their internal invariants.\n'
+ ' In enforcing reflexivity of elements, the comparison of '
+ 'collections\n'
+ ' assumes that for a collection element "x", "x == x" is '
+ 'always true.\n'
+ ' Based on that assumption, element identity is compared '
+ 'first, and\n'
+ ' element comparison is performed only for distinct '
+ 'elements. This\n'
+ ' approach yields the same result as a strict element '
+ 'comparison\n'
+ ' would, if the compared elements are reflexive. For '
+ 'non-reflexive\n'
+ ' elements, the result is different than for strict element\n'
+ ' comparison.\n'
'\n'
' Lexicographical comparison between built-in collections '
'works as\n'
@@ -1907,15 +1967,15 @@ topics = {'assert': 'The "assert" statement\n'
'(1,2)" is\n'
' false because the type is not the same).\n'
'\n'
- ' * Collections that support order comparison are ordered the '
- 'same\n'
- ' as their first unequal elements (for example, "[1,2,x] <= '
- '[1,2,y]"\n'
- ' has the same value as "x <= y"). If a corresponding '
- 'element does\n'
- ' not exist, the shorter collection is ordered first (for '
- 'example,\n'
- ' "[1,2] < [1,2,3]" is true).\n'
+ ' * Collections are ordered the same as their first unequal '
+ 'elements\n'
+ ' (for example, "cmp([1,2,x], [1,2,y])" returns the same '
+ 'as\n'
+ ' "cmp(x,y)"). If a corresponding element does not exist, '
+ 'the\n'
+ ' shorter collection is ordered first (for example, "[1,2] '
+ '<\n'
+ ' [1,2,3]" is true).\n'
'\n'
'* Mappings (instances of "dict") compare equal if and only if '
'they\n'
@@ -1923,32 +1983,16 @@ topics = {'assert': 'The "assert" statement\n'
'keys and\n'
' values enforces reflexivity.\n'
'\n'
- ' Order comparisons ("<", ">", "<=", and ">=") raise '
- '"TypeError".\n'
- '\n'
- '* Sets (instances of "set" or "frozenset") can be compared '
- 'within\n'
- ' and across their types.\n'
- '\n'
- ' They define order comparison operators to mean subset and '
- 'superset\n'
- ' tests. Those relations do not define total orderings (for '
- 'example,\n'
- ' the two sets "{1,2}" and "{2,3}" are not equal, nor subsets '
- 'of one\n'
- ' another, nor supersets of one another). Accordingly, sets '
+ ' Outcomes other than equality are resolved consistently, but '
'are not\n'
- ' appropriate arguments for functions which depend on total '
- 'ordering\n'
- ' (for example, "min()", "max()", and "sorted()" produce '
- 'undefined\n'
- ' results given a list of sets as inputs).\n'
- '\n'
- ' Comparison of sets enforces reflexivity of its elements.\n'
+ ' otherwise defined. [5]\n'
'\n'
- '* Most other built-in types have no comparison methods '
- 'implemented,\n'
- ' so they inherit the default comparison behavior.\n'
+ '* Most other objects of built-in types compare unequal unless '
+ 'they\n'
+ ' are the same object; the choice whether one object is '
+ 'considered\n'
+ ' smaller or larger than another one is made arbitrarily but\n'
+ ' consistently within one execution of a program.\n'
'\n'
'User-defined classes that customize their comparison behavior '
'should\n'
@@ -2002,10 +2046,7 @@ topics = {'assert': 'The "assert" statement\n'
'be marked\n'
' as unhashable.\n'
'\n'
- 'Python does not enforce these consistency rules. In fact, '
- 'the\n'
- 'not-a-number values are an example for not following these '
- 'rules.\n'
+ 'Python does not enforce these consistency rules.\n'
'\n'
'\n'
'Membership test operations\n'
@@ -2042,26 +2083,25 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
'For user-defined classes which do not define "__contains__()" '
'but do\n'
- 'define "__iter__()", "x in y" is "True" if some value "z", '
- 'for which\n'
- 'the expression "x is z or x == z" is true, is produced while '
- 'iterating\n'
- 'over "y". If an exception is raised during the iteration, it '
- 'is as if\n'
- '"in" raised that exception.\n'
+ 'define "__iter__()", "x in y" is "True" if some value "z" '
+ 'with "x ==\n'
+ 'z" is produced while iterating over "y". If an exception is '
+ 'raised\n'
+ 'during the iteration, it is as if "in" raised that '
+ 'exception.\n'
'\n'
'Lastly, the old-style iteration protocol is tried: if a class '
'defines\n'
'"__getitem__()", "x in y" is "True" if and only if there is a '
'non-\n'
- 'negative integer index *i* such that "x is y[i] or x == '
- 'y[i]", and no\n'
- 'lower integer index raises the "IndexError" exception. (If '
- 'any other\n'
+ 'negative integer index *i* such that "x == y[i]", and all '
+ 'lower\n'
+ 'integer indices do not raise "IndexError" exception. (If any '
+ 'other\n'
'exception is raised, it is as if "in" raised that '
'exception).\n'
'\n'
- 'The operator "not in" is defined to have the inverse truth '
+ 'The operator "not in" is defined to have the inverse true '
'value of\n'
'"in".\n'
'\n'
@@ -2069,14 +2109,13 @@ topics = {'assert': 'The "assert" statement\n'
'Identity comparisons\n'
'====================\n'
'\n'
- 'The operators "is" and "is not" test for an object’s '
- 'identity: "x is\n'
- 'y" is true if and only if *x* and *y* are the same object. '
- 'An\n'
- 'Object’s identity is determined using the "id()" function. '
- '"x is not\n'
- 'y" yields the inverse truth value. [4]\n',
- 'compound': 'Compound statements\n'
+ 'The operators "is" and "is not" test for object identity: "x '
+ 'is y" is\n'
+ 'true if and only if *x* and *y* are the same object. "x is '
+ 'not y"\n'
+ 'yields the inverse truth value. [6]\n',
+ 'compound': '\n'
+ 'Compound statements\n'
'*******************\n'
'\n'
'Compound statements contain (groups of) other statements; they '
@@ -2092,17 +2131,12 @@ topics = {'assert': 'The "assert" statement\n'
'control\n'
'flow constructs. "try" specifies exception handlers and/or '
'cleanup\n'
- 'code for a group of statements, while the "with" statement '
- 'allows the\n'
- 'execution of initialization and finalization code around a block '
- 'of\n'
- 'code. Function and class definitions are also syntactically '
- 'compound\n'
- 'statements.\n'
+ 'code for a group of statements. Function and class definitions '
+ 'are\n'
+ 'also syntactically compound statements.\n'
'\n'
- 'A compound statement consists of one or more ‘clauses.’ A '
- 'clause\n'
- 'consists of a header and a ‘suite.’ The clause headers of a\n'
+ "Compound statements consist of one or more 'clauses.' A clause\n"
+ "consists of a header and a 'suite.' The clause headers of a\n"
'particular compound statement are all at the same indentation '
'level.\n'
'Each clause header begins with a uniquely identifying keyword '
@@ -2110,25 +2144,25 @@ topics = {'assert': 'The "assert" statement\n'
'with a colon. A suite is a group of statements controlled by a\n'
'clause. A suite can be one or more semicolon-separated simple\n'
'statements on the same line as the header, following the '
- 'header’s\n'
+ "header's\n"
'colon, or it can be one or more indented statements on '
'subsequent\n'
- 'lines. Only the latter form of a suite can contain nested '
+ 'lines. Only the latter form of suite can contain nested '
'compound\n'
- 'statements; the following is illegal, mostly because it wouldn’t '
+ "statements; the following is illegal, mostly because it wouldn't "
'be\n'
'clear to which "if" clause a following "else" clause would '
'belong:\n'
'\n'
- ' if test1: if test2: print(x)\n'
+ ' if test1: if test2: print x\n'
'\n'
'Also note that the semicolon binds tighter than the colon in '
'this\n'
'context, so that in the following example, either all or none of '
'the\n'
- '"print()" calls are executed:\n'
+ '"print" statements are executed:\n'
'\n'
- ' if x < y < z: print(x); print(y); print(z)\n'
+ ' if x < y < z: print x; print y; print z\n'
'\n'
'Summarizing:\n'
'\n'
@@ -2139,9 +2173,7 @@ topics = {'assert': 'The "assert" statement\n'
' | with_stmt\n'
' | funcdef\n'
' | classdef\n'
- ' | async_with_stmt\n'
- ' | async_for_stmt\n'
- ' | async_funcdef\n'
+ ' | decorated\n'
' suite ::= stmt_list NEWLINE | NEWLINE INDENT '
'statement+ DEDENT\n'
' statement ::= stmt_list NEWLINE | compound_stmt\n'
@@ -2149,10 +2181,10 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
'Note that statements always end in a "NEWLINE" possibly followed '
'by a\n'
- '"DEDENT". Also note that optional continuation clauses always '
+ '"DEDENT". Also note that optional continuation clauses always '
'begin\n'
'with a keyword that cannot start a statement, thus there are no\n'
- 'ambiguities (the ‘dangling "else"’ problem is solved in Python '
+ 'ambiguities (the \'dangling "else"\' problem is solved in Python '
'by\n'
'requiring nested "if" statements to be indented).\n'
'\n'
@@ -2167,7 +2199,7 @@ topics = {'assert': 'The "assert" statement\n'
'The "if" statement is used for conditional execution:\n'
'\n'
' if_stmt ::= "if" expression ":" suite\n'
- ' ("elif" expression ":" suite)*\n'
+ ' ( "elif" expression ":" suite )*\n'
' ["else" ":" suite]\n'
'\n'
'It selects exactly one of the suites by evaluating the '
@@ -2203,7 +2235,7 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
'A "break" statement executed in the first suite terminates the '
'loop\n'
- 'without executing the "else" clause’s suite. A "continue" '
+ 'without executing the "else" clause\'s suite. A "continue" '
'statement\n'
'executed in the first suite skips the rest of the suite and goes '
'back\n'
@@ -2226,57 +2258,44 @@ topics = {'assert': 'The "assert" statement\n'
'object. An iterator is created for the result of the\n'
'"expression_list". The suite is then executed once for each '
'item\n'
- 'provided by the iterator, in the order returned by the '
- 'iterator. Each\n'
+ 'provided by the iterator, in the order of ascending indices. '
+ 'Each\n'
'item in turn is assigned to the target list using the standard '
'rules\n'
- 'for assignments (see Assignment statements), and then the suite '
- 'is\n'
- 'executed. When the items are exhausted (which is immediately '
- 'when the\n'
- 'sequence is empty or an iterator raises a "StopIteration" '
- 'exception),\n'
- 'the suite in the "else" clause, if present, is executed, and the '
- 'loop\n'
+ 'for assignments, and then the suite is executed. When the items '
+ 'are\n'
+ 'exhausted (which is immediately when the sequence is empty), the '
+ 'suite\n'
+ 'in the "else" clause, if present, is executed, and the loop\n'
'terminates.\n'
'\n'
'A "break" statement executed in the first suite terminates the '
'loop\n'
- 'without executing the "else" clause’s suite. A "continue" '
+ 'without executing the "else" clause\'s suite. A "continue" '
'statement\n'
'executed in the first suite skips the rest of the suite and '
'continues\n'
- 'with the next item, or with the "else" clause if there is no '
+ 'with the next item, or with the "else" clause if there was no '
'next\n'
'item.\n'
'\n'
- 'The for-loop makes assignments to the variables in the target '
- 'list.\n'
- 'This overwrites all previous assignments to those variables '
- 'including\n'
- 'those made in the suite of the for-loop:\n'
- '\n'
- ' for i in range(10):\n'
- ' print(i)\n'
- ' i = 5 # this will not affect the for-loop\n'
- ' # because i will be overwritten with '
- 'the next\n'
- ' # index in the range\n'
- '\n'
- 'Names in the target list are not deleted when the loop is '
- 'finished,\n'
- 'but if the sequence is empty, they will not have been assigned '
- 'to at\n'
- 'all by the loop. Hint: the built-in function "range()" returns '
- 'an\n'
- 'iterator of integers suitable to emulate the effect of Pascal’s '
- '"for i\n'
- ':= a to b do"; e.g., "list(range(3))" returns the list "[0, 1, '
- '2]".\n'
+ 'The suite may assign to the variable(s) in the target list; this '
+ 'does\n'
+ 'not affect the next item assigned to it.\n'
+ '\n'
+ 'The target list is not deleted when the loop is finished, but if '
+ 'the\n'
+ 'sequence is empty, it will not have been assigned to at all by '
+ 'the\n'
+ 'loop. Hint: the built-in function "range()" returns a sequence '
+ 'of\n'
+ 'integers suitable to emulate the effect of Pascal\'s "for i := a '
+ 'to b\n'
+ 'do"; e.g., "range(3)" returns the list "[0, 1, 2]".\n'
'\n'
'Note: There is a subtlety when the sequence is being modified by '
'the\n'
- ' loop (this can only occur for mutable sequences, e.g. lists). '
+ ' loop (this can only occur for mutable sequences, i.e. lists). '
'An\n'
' internal counter is used to keep track of which item is used '
'next,\n'
@@ -2310,13 +2329,18 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
' try_stmt ::= try1_stmt | try2_stmt\n'
' try1_stmt ::= "try" ":" suite\n'
- ' ("except" [expression ["as" identifier]] ":" '
- 'suite)+\n'
+ ' ("except" [expression [("as" | ",") '
+ 'identifier]] ":" suite)+\n'
' ["else" ":" suite]\n'
' ["finally" ":" suite]\n'
' try2_stmt ::= "try" ":" suite\n'
' "finally" ":" suite\n'
'\n'
+ 'Changed in version 2.5: In previous versions of Python,\n'
+ '"try"..."except"..."finally" did not work. "try"..."except" had '
+ 'to be\n'
+ 'nested in "try"..."finally".\n'
+ '\n'
'The "except" clause(s) specify one or more exception handlers. '
'When no\n'
'exception occurs in the "try" clause, no exception handler is\n'
@@ -2331,11 +2355,11 @@ topics = {'assert': 'The "assert" statement\n'
'expression\n'
'is evaluated, and the clause matches the exception if the '
'resulting\n'
- 'object is “compatible” with the exception. An object is '
+ 'object is "compatible" with the exception. An object is '
'compatible\n'
'with an exception if it is the class or a base class of the '
'exception\n'
- 'object or a tuple containing an item compatible with the '
+ 'object, or a tuple containing an item compatible with the '
'exception.\n'
'\n'
'If no except clause matches the exception, the search for an '
@@ -2356,83 +2380,59 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
'When a matching except clause is found, the exception is '
'assigned to\n'
- 'the target specified after the "as" keyword in that except '
- 'clause, if\n'
- 'present, and the except clause’s suite is executed. All except\n'
- 'clauses must have an executable block. When the end of this '
- 'block is\n'
- 'reached, execution continues normally after the entire try '
- 'statement.\n'
- '(This means that if two nested handlers exist for the same '
- 'exception,\n'
- 'and the exception occurs in the try clause of the inner handler, '
- 'the\n'
- 'outer handler will not handle the exception.)\n'
- '\n'
- 'When an exception has been assigned using "as target", it is '
- 'cleared\n'
- 'at the end of the except clause. This is as if\n'
- '\n'
- ' except E as N:\n'
- ' foo\n'
- '\n'
- 'was translated to\n'
- '\n'
- ' except E as N:\n'
- ' try:\n'
- ' foo\n'
- ' finally:\n'
- ' del N\n'
+ 'the target specified in that except clause, if present, and the '
+ 'except\n'
+ "clause's suite is executed. All except clauses must have an\n"
+ 'executable block. When the end of this block is reached, '
+ 'execution\n'
+ 'continues normally after the entire try statement. (This means '
+ 'that\n'
+ 'if two nested handlers exist for the same exception, and the '
+ 'exception\n'
+ 'occurs in the try clause of the inner handler, the outer handler '
+ 'will\n'
+ 'not handle the exception.)\n'
'\n'
- 'This means the exception must be assigned to a different name to '
- 'be\n'
- 'able to refer to it after the except clause. Exceptions are '
- 'cleared\n'
- 'because with the traceback attached to them, they form a '
- 'reference\n'
- 'cycle with the stack frame, keeping all locals in that frame '
- 'alive\n'
- 'until the next garbage collection occurs.\n'
- '\n'
- 'Before an except clause’s suite is executed, details about the\n'
- 'exception are stored in the "sys" module and can be accessed '
- 'via\n'
- '"sys.exc_info()". "sys.exc_info()" returns a 3-tuple consisting '
- 'of the\n'
- 'exception class, the exception instance and a traceback object '
- '(see\n'
- 'section The standard type hierarchy) identifying the point in '
+ "Before an except clause's suite is executed, details about the\n"
+ 'exception are assigned to three variables in the "sys" module:\n'
+ '"sys.exc_type" receives the object identifying the exception;\n'
+ '"sys.exc_value" receives the exception\'s parameter;\n'
+ '"sys.exc_traceback" receives a traceback object (see section '
+ 'The\n'
+ 'standard type hierarchy) identifying the point in the program '
+ 'where\n'
+ 'the exception occurred. These details are also available through '
'the\n'
- 'program where the exception occurred. "sys.exc_info()" values '
- 'are\n'
- 'restored to their previous values (before the call) when '
- 'returning\n'
- 'from a function that handled an exception.\n'
- '\n'
- 'The optional "else" clause is executed if the control flow '
- 'leaves the\n'
- '"try" suite, no exception was raised, and no "return", '
- '"continue", or\n'
- '"break" statement was executed. Exceptions in the "else" clause '
+ '"sys.exc_info()" function, which returns a tuple "(exc_type,\n'
+ 'exc_value, exc_traceback)". Use of the corresponding variables '
+ 'is\n'
+ 'deprecated in favor of this function, since their use is unsafe '
+ 'in a\n'
+ 'threaded program. As of Python 1.5, the variables are restored '
+ 'to\n'
+ 'their previous values (before the call) when returning from a '
+ 'function\n'
+ 'that handled an exception.\n'
+ '\n'
+ 'The optional "else" clause is executed if and when control flows '
+ 'off\n'
+ 'the end of the "try" clause. [2] Exceptions in the "else" clause '
'are\n'
'not handled by the preceding "except" clauses.\n'
'\n'
- 'If "finally" is present, it specifies a ‘cleanup’ handler. The '
- '"try"\n'
+ 'If "finally" is present, it specifies a \'cleanup\' handler. '
+ 'The "try"\n'
'clause is executed, including any "except" and "else" clauses. '
'If an\n'
'exception occurs in any of the clauses and is not handled, the\n'
'exception is temporarily saved. The "finally" clause is '
'executed. If\n'
- 'there is a saved exception it is re-raised at the end of the '
- '"finally"\n'
- 'clause. If the "finally" clause raises another exception, the '
- 'saved\n'
- 'exception is set as the context of the new exception. If the '
- '"finally"\n'
- 'clause executes a "return", "break" or "continue" statement, the '
- 'saved\n'
- 'exception is discarded:\n'
+ 'there is a saved exception, it is re-raised at the end of the\n'
+ '"finally" clause. If the "finally" clause raises another '
+ 'exception or\n'
+ 'executes a "return" or "break" statement, the saved exception '
+ 'is\n'
+ 'discarded:\n'
'\n'
' >>> def f():\n'
' ... try:\n'
@@ -2449,9 +2449,13 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
'When a "return", "break" or "continue" statement is executed in '
'the\n'
- '"try" suite of a "try"…"finally" statement, the "finally" clause '
- 'is\n'
- 'also executed ‘on the way out.’\n'
+ '"try" suite of a "try"..."finally" statement, the "finally" '
+ 'clause is\n'
+ 'also executed \'on the way out.\' A "continue" statement is '
+ 'illegal in\n'
+ 'the "finally" clause. (The reason is a problem with the current\n'
+ 'implementation --- this restriction may be lifted in the '
+ 'future).\n'
'\n'
'The return value of a function is determined by the last '
'"return"\n'
@@ -2475,27 +2479,24 @@ topics = {'assert': 'The "assert" statement\n'
'generate\n'
'exceptions may be found in section The raise statement.\n'
'\n'
- 'Changed in version 3.8: Prior to Python 3.8, a "continue" '
- 'statement\n'
- 'was illegal in the "finally" clause due to a problem with the\n'
- 'implementation.\n'
- '\n'
'\n'
'The "with" statement\n'
'====================\n'
'\n'
+ 'New in version 2.5.\n'
+ '\n'
'The "with" statement is used to wrap the execution of a block '
'with\n'
'methods defined by a context manager (see section With '
'Statement\n'
- 'Context Managers). This allows common "try"…"except"…"finally" '
- 'usage\n'
- 'patterns to be encapsulated for convenient reuse.\n'
+ 'Context Managers). This allows common '
+ '"try"..."except"..."finally"\n'
+ 'usage patterns to be encapsulated for convenient reuse.\n'
'\n'
' with_stmt ::= "with" with_item ("," with_item)* ":" suite\n'
' with_item ::= expression ["as" target]\n'
'\n'
- 'The execution of the "with" statement with one “item” proceeds '
+ 'The execution of the "with" statement with one "item" proceeds '
'as\n'
'follows:\n'
'\n'
@@ -2503,9 +2504,9 @@ topics = {'assert': 'The "assert" statement\n'
'"with_item")\n'
' is evaluated to obtain a context manager.\n'
'\n'
- '2. The context manager’s "__exit__()" is loaded for later use.\n'
+ '2. The context manager\'s "__exit__()" is loaded for later use.\n'
'\n'
- '3. The context manager’s "__enter__()" method is invoked.\n'
+ '3. The context manager\'s "__enter__()" method is invoked.\n'
'\n'
'4. If a target was included in the "with" statement, the return\n'
' value from "__enter__()" is assigned to it.\n'
@@ -2522,7 +2523,7 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
'5. The suite is executed.\n'
'\n'
- '6. The context manager’s "__exit__()" method is invoked. If an\n'
+ '6. The context manager\'s "__exit__()" method is invoked. If an\n'
' exception caused the suite to be exited, its type, value, '
'and\n'
' traceback are passed as arguments to "__exit__()". Otherwise, '
@@ -2557,12 +2558,18 @@ topics = {'assert': 'The "assert" statement\n'
' with B() as b:\n'
' suite\n'
'\n'
- 'Changed in version 3.1: Support for multiple context '
+ 'Note: In Python 2.5, the "with" statement is only allowed when '
+ 'the\n'
+ ' "with_statement" feature has been enabled. It is always '
+ 'enabled in\n'
+ ' Python 2.6.\n'
+ '\n'
+ 'Changed in version 2.7: Support for multiple context '
'expressions.\n'
'\n'
'See also:\n'
'\n'
- ' **PEP 343** - The “with” statement\n'
+ ' **PEP 343** - The "with" statement\n'
' The specification, background, and examples for the Python '
'"with"\n'
' statement.\n'
@@ -2575,25 +2582,21 @@ topics = {'assert': 'The "assert" statement\n'
'(see\n'
'section The standard type hierarchy):\n'
'\n'
- ' funcdef ::= [decorators] "def" funcname "(" '
- '[parameter_list] ")"\n'
- ' ["->" expression] ":" suite\n'
- ' decorators ::= decorator+\n'
- ' decorator ::= "@" dotted_name ["(" '
- '[argument_list [","]] ")"] NEWLINE\n'
- ' dotted_name ::= identifier ("." identifier)*\n'
- ' parameter_list ::= defparameter ("," '
- 'defparameter)* "," "/" ["," [parameter_list_no_posonly]]\n'
- ' | parameter_list_no_posonly\n'
- ' parameter_list_no_posonly ::= defparameter ("," '
- 'defparameter)* ["," [parameter_list_starargs]]\n'
- ' | parameter_list_starargs\n'
- ' parameter_list_starargs ::= "*" [parameter] ("," '
- 'defparameter)* ["," ["**" parameter [","]]]\n'
- ' | "**" parameter [","]\n'
- ' parameter ::= identifier [":" expression]\n'
- ' defparameter ::= parameter ["=" expression]\n'
- ' funcname ::= identifier\n'
+ ' decorated ::= decorators (classdef | funcdef)\n'
+ ' decorators ::= decorator+\n'
+ ' decorator ::= "@" dotted_name ["(" [argument_list [","]] '
+ '")"] NEWLINE\n'
+ ' funcdef ::= "def" funcname "(" [parameter_list] ")" '
+ '":" suite\n'
+ ' dotted_name ::= identifier ("." identifier)*\n'
+ ' parameter_list ::= (defparameter ",")*\n'
+ ' ( "*" identifier ["," "**" identifier]\n'
+ ' | "**" identifier\n'
+ ' | defparameter [","] )\n'
+ ' defparameter ::= parameter ["=" expression]\n'
+ ' sublist ::= parameter ("," parameter)* [","]\n'
+ ' parameter ::= identifier | "(" sublist ")"\n'
+ ' funcname ::= identifier\n'
'\n'
'A function definition is an executable statement. Its execution '
'binds\n'
@@ -2606,7 +2609,7 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
'The function definition does not execute the function body; this '
'gets\n'
- 'executed only when the function is called. [2]\n'
+ 'executed only when the function is called. [3]\n'
'\n'
'A function definition may be wrapped by one or more *decorator*\n'
'expressions. Decorator expressions are evaluated when the '
@@ -2619,52 +2622,47 @@ topics = {'assert': 'The "assert" statement\n'
'function name\n'
'instead of the function object. Multiple decorators are applied '
'in\n'
- 'nested fashion. For example, the following code\n'
+ 'nested fashion. For example, the following code:\n'
'\n'
' @f1(arg)\n'
' @f2\n'
' def func(): pass\n'
'\n'
- 'is roughly equivalent to\n'
+ 'is equivalent to:\n'
'\n'
' def func(): pass\n'
' func = f1(arg)(f2(func))\n'
'\n'
- 'except that the original function is not temporarily bound to '
- 'the name\n'
- '"func".\n'
- '\n'
- 'When one or more *parameters* have the form *parameter* "="\n'
- '*expression*, the function is said to have “default parameter '
- 'values.”\n'
+ 'When one or more top-level *parameters* have the form '
+ '*parameter* "="\n'
+ '*expression*, the function is said to have "default parameter '
+ 'values."\n'
'For a parameter with a default value, the corresponding '
'*argument* may\n'
- 'be omitted from a call, in which case the parameter’s default '
+ "be omitted from a call, in which case the parameter's default "
'value is\n'
'substituted. If a parameter has a default value, all following\n'
- 'parameters up until the “"*"” must also have a default value — '
- 'this is\n'
- 'a syntactic restriction that is not expressed by the grammar.\n'
- '\n'
- '**Default parameter values are evaluated from left to right when '
- 'the\n'
- 'function definition is executed.** This means that the '
- 'expression is\n'
- 'evaluated once, when the function is defined, and that the same '
- '“pre-\n'
- 'computed” value is used for each call. This is especially '
- 'important\n'
- 'to understand when a default parameter is a mutable object, such '
- 'as a\n'
- 'list or a dictionary: if the function modifies the object (e.g. '
- 'by\n'
- 'appending an item to a list), the default value is in effect '
- 'modified.\n'
- 'This is generally not what was intended. A way around this is '
- 'to use\n'
- '"None" as the default, and explicitly test for it in the body of '
- 'the\n'
- 'function, e.g.:\n'
+ 'parameters must also have a default value --- this is a '
+ 'syntactic\n'
+ 'restriction that is not expressed by the grammar.\n'
+ '\n'
+ '**Default parameter values are evaluated when the function '
+ 'definition\n'
+ 'is executed.** This means that the expression is evaluated '
+ 'once, when\n'
+ 'the function is defined, and that the same "pre-computed" value '
+ 'is\n'
+ 'used for each call. This is especially important to understand '
+ 'when a\n'
+ 'default parameter is a mutable object, such as a list or a '
+ 'dictionary:\n'
+ 'if the function modifies the object (e.g. by appending an item '
+ 'to a\n'
+ 'list), the default value is in effect modified. This is '
+ 'generally not\n'
+ 'what was intended. A way around this is to use "None" as the\n'
+ 'default, and explicitly test for it in the body of the function, '
+ 'e.g.:\n'
'\n'
' def whats_on_the_telly(penguin=None):\n'
' if penguin is None:\n'
@@ -2678,44 +2676,16 @@ topics = {'assert': 'The "assert" statement\n'
'mentioned in\n'
'the parameter list, either from position arguments, from '
'keyword\n'
- 'arguments, or from default values. If the form “"*identifier"” '
+ 'arguments, or from default values. If the form ""*identifier"" '
'is\n'
'present, it is initialized to a tuple receiving any excess '
'positional\n'
- 'parameters, defaulting to the empty tuple. If the form\n'
- '“"**identifier"” is present, it is initialized to a new ordered\n'
- 'mapping receiving any excess keyword arguments, defaulting to a '
- 'new\n'
- 'empty mapping of the same type. Parameters after “"*"” or\n'
- '“"*identifier"” are keyword-only parameters and may only be '
- 'passed\n'
- 'used keyword arguments.\n'
- '\n'
- 'Parameters may have an *annotation* of the form “": '
- 'expression"”\n'
- 'following the parameter name. Any parameter may have an '
- 'annotation,\n'
- 'even those of the form "*identifier" or "**identifier". '
- 'Functions may\n'
- 'have “return” annotation of the form “"-> expression"” after '
- 'the\n'
- 'parameter list. These annotations can be any valid Python '
- 'expression.\n'
- 'The presence of annotations does not change the semantics of a\n'
- 'function. The annotation values are available as values of a\n'
- 'dictionary keyed by the parameters’ names in the '
- '"__annotations__"\n'
- 'attribute of the function object. If the "annotations" import '
- 'from\n'
- '"__future__" is used, annotations are preserved as strings at '
- 'runtime\n'
- 'which enables postponed evaluation. Otherwise, they are '
- 'evaluated\n'
- 'when the function definition is executed. In this case '
- 'annotations\n'
- 'may be evaluated in a different order than they appear in the '
- 'source\n'
- 'code.\n'
+ 'parameters, defaulting to the empty tuple. If the form\n'
+ '""**identifier"" is present, it is initialized to a new '
+ 'dictionary\n'
+ 'receiving any excess keyword arguments, defaulting to a new '
+ 'empty\n'
+ 'dictionary.\n'
'\n'
'It is also possible to create anonymous functions (functions not '
'bound\n'
@@ -2724,44 +2694,24 @@ topics = {'assert': 'The "assert" statement\n'
'lambda\n'
'expression is merely a shorthand for a simplified function '
'definition;\n'
- 'a function defined in a “"def"” statement can be passed around '
+ 'a function defined in a ""def"" statement can be passed around '
'or\n'
'assigned to another name just like a function defined by a '
'lambda\n'
- 'expression. The “"def"” form is actually more powerful since '
+ 'expression. The ""def"" form is actually more powerful since '
'it\n'
- 'allows the execution of multiple statements and annotations.\n'
+ 'allows the execution of multiple statements.\n'
'\n'
- '**Programmer’s note:** Functions are first-class objects. A '
- '“"def"”\n'
- 'statement executed inside a function definition defines a local\n'
- 'function that can be returned or passed around. Free variables '
- 'used\n'
- 'in the nested function can access the local variables of the '
+ "**Programmer's note:** Functions are first-class objects. A "
+ '""def""\n'
+ 'form executed inside a function definition defines a local '
'function\n'
+ 'that can be returned or passed around. Free variables used in '
+ 'the\n'
+ 'nested function can access the local variables of the function\n'
'containing the def. See section Naming and binding for '
'details.\n'
'\n'
- 'See also:\n'
- '\n'
- ' **PEP 3107** - Function Annotations\n'
- ' The original specification for function annotations.\n'
- '\n'
- ' **PEP 484** - Type Hints\n'
- ' Definition of a standard meaning for annotations: type '
- 'hints.\n'
- '\n'
- ' **PEP 526** - Syntax for Variable Annotations\n'
- ' Ability to type hint variable declarations, including '
- 'class\n'
- ' variables and instance variables\n'
- '\n'
- ' **PEP 563** - Postponed Evaluation of Annotations\n'
- ' Support for forward references within annotations by '
- 'preserving\n'
- ' annotations in a string form at runtime instead of eager\n'
- ' evaluation.\n'
- '\n'
'\n'
'Class definitions\n'
'=================\n'
@@ -2770,222 +2720,60 @@ topics = {'assert': 'The "assert" statement\n'
'standard\n'
'type hierarchy):\n'
'\n'
- ' classdef ::= [decorators] "class" classname [inheritance] '
- '":" suite\n'
- ' inheritance ::= "(" [argument_list] ")"\n'
+ ' classdef ::= "class" classname [inheritance] ":" suite\n'
+ ' inheritance ::= "(" [expression_list] ")"\n'
' classname ::= identifier\n'
'\n'
- 'A class definition is an executable statement. The inheritance '
+ 'A class definition is an executable statement. It first '
+ 'evaluates the\n'
+ 'inheritance list, if present. Each item in the inheritance '
'list\n'
- 'usually gives a list of base classes (see Metaclasses for more\n'
- 'advanced uses), so each item in the list should evaluate to a '
- 'class\n'
- 'object which allows subclassing. Classes without an inheritance '
+ 'should evaluate to a class object or class type which allows\n'
+ "subclassing. The class's suite is then executed in a new "
+ 'execution\n'
+ 'frame (see section Naming and binding), using a newly created '
+ 'local\n'
+ 'namespace and the original global namespace. (Usually, the '
+ 'suite\n'
+ "contains only function definitions.) When the class's suite "
+ 'finishes\n'
+ 'execution, its execution frame is discarded but its local '
+ 'namespace is\n'
+ 'saved. [4] A class object is then created using the inheritance '
'list\n'
- 'inherit, by default, from the base class "object"; hence,\n'
- '\n'
- ' class Foo:\n'
- ' pass\n'
- '\n'
- 'is equivalent to\n'
- '\n'
- ' class Foo(object):\n'
- ' pass\n'
- '\n'
- 'The class’s suite is then executed in a new execution frame '
- '(see\n'
- 'Naming and binding), using a newly created local namespace and '
+ 'for the base classes and the saved local namespace for the '
+ 'attribute\n'
+ 'dictionary. The class name is bound to this class object in '
'the\n'
- 'original global namespace. (Usually, the suite contains mostly\n'
- 'function definitions.) When the class’s suite finishes '
- 'execution, its\n'
- 'execution frame is discarded but its local namespace is saved. '
- '[3] A\n'
- 'class object is then created using the inheritance list for the '
- 'base\n'
- 'classes and the saved local namespace for the attribute '
- 'dictionary.\n'
- 'The class name is bound to this class object in the original '
- 'local\n'
- 'namespace.\n'
- '\n'
- 'The order in which attributes are defined in the class body is\n'
- 'preserved in the new class’s "__dict__". Note that this is '
- 'reliable\n'
- 'only right after the class is created and only for classes that '
- 'were\n'
- 'defined using the definition syntax.\n'
- '\n'
- 'Class creation can be customized heavily using metaclasses.\n'
- '\n'
- 'Classes can also be decorated: just like when decorating '
- 'functions,\n'
- '\n'
- ' @f1(arg)\n'
- ' @f2\n'
- ' class Foo: pass\n'
- '\n'
- 'is roughly equivalent to\n'
- '\n'
- ' class Foo: pass\n'
- ' Foo = f1(arg)(f2(Foo))\n'
+ 'original local namespace.\n'
'\n'
- 'The evaluation rules for the decorator expressions are the same '
- 'as for\n'
- 'function decorators. The result is then bound to the class '
- 'name.\n'
- '\n'
- '**Programmer’s note:** Variables defined in the class definition '
+ "**Programmer's note:** Variables defined in the class definition "
'are\n'
- 'class attributes; they are shared by instances. Instance '
- 'attributes\n'
- 'can be set in a method with "self.name = value". Both class '
- 'and\n'
- 'instance attributes are accessible through the notation '
- '“"self.name"”,\n'
- 'and an instance attribute hides a class attribute with the same '
- 'name\n'
- 'when accessed in this way. Class attributes can be used as '
- 'defaults\n'
- 'for instance attributes, but using mutable values there can lead '
- 'to\n'
- 'unexpected results. Descriptors can be used to create instance\n'
- 'variables with different implementation details.\n'
- '\n'
- 'See also:\n'
- '\n'
- ' **PEP 3115** - Metaclasses in Python 3000\n'
- ' The proposal that changed the declaration of metaclasses to '
- 'the\n'
- ' current syntax, and the semantics for how classes with\n'
- ' metaclasses are constructed.\n'
- '\n'
- ' **PEP 3129** - Class Decorators\n'
- ' The proposal that added class decorators. Function and '
- 'method\n'
- ' decorators were introduced in **PEP 318**.\n'
- '\n'
- '\n'
- 'Coroutines\n'
- '==========\n'
- '\n'
- 'New in version 3.5.\n'
- '\n'
- '\n'
- 'Coroutine function definition\n'
- '-----------------------------\n'
- '\n'
- ' async_funcdef ::= [decorators] "async" "def" funcname "(" '
- '[parameter_list] ")"\n'
- ' ["->" expression] ":" suite\n'
- '\n'
- 'Execution of Python coroutines can be suspended and resumed at '
- 'many\n'
- 'points (see *coroutine*). Inside the body of a coroutine '
- 'function,\n'
- '"await" and "async" identifiers become reserved keywords; '
- '"await"\n'
- 'expressions, "async for" and "async with" can only be used in\n'
- 'coroutine function bodies.\n'
- '\n'
- 'Functions defined with "async def" syntax are always coroutine\n'
- 'functions, even if they do not contain "await" or "async" '
- 'keywords.\n'
- '\n'
- 'It is a "SyntaxError" to use a "yield from" expression inside '
- 'the body\n'
- 'of a coroutine function.\n'
- '\n'
- 'An example of a coroutine function:\n'
- '\n'
- ' async def func(param1, param2):\n'
- ' do_stuff()\n'
- ' await some_coroutine()\n'
- '\n'
- '\n'
- 'The "async for" statement\n'
- '-------------------------\n'
- '\n'
- ' async_for_stmt ::= "async" for_stmt\n'
- '\n'
- 'An *asynchronous iterable* is able to call asynchronous code in '
- 'its\n'
- '*iter* implementation, and *asynchronous iterator* can call\n'
- 'asynchronous code in its *next* method.\n'
- '\n'
- 'The "async for" statement allows convenient iteration over\n'
- 'asynchronous iterators.\n'
- '\n'
- 'The following code:\n'
- '\n'
- ' async for TARGET in ITER:\n'
- ' BLOCK\n'
- ' else:\n'
- ' BLOCK2\n'
- '\n'
- 'Is semantically equivalent to:\n'
- '\n'
- ' iter = (ITER)\n'
- ' iter = type(iter).__aiter__(iter)\n'
- ' running = True\n'
- ' while running:\n'
- ' try:\n'
- ' TARGET = await type(iter).__anext__(iter)\n'
- ' except StopAsyncIteration:\n'
- ' running = False\n'
- ' else:\n'
- ' BLOCK\n'
- ' else:\n'
- ' BLOCK2\n'
- '\n'
- 'See also "__aiter__()" and "__anext__()" for details.\n'
- '\n'
- 'It is a "SyntaxError" to use an "async for" statement outside '
- 'the body\n'
- 'of a coroutine function.\n'
- '\n'
- '\n'
- 'The "async with" statement\n'
- '--------------------------\n'
- '\n'
- ' async_with_stmt ::= "async" with_stmt\n'
- '\n'
- 'An *asynchronous context manager* is a *context manager* that is '
- 'able\n'
- 'to suspend execution in its *enter* and *exit* methods.\n'
- '\n'
- 'The following code:\n'
- '\n'
- ' async with EXPR as VAR:\n'
- ' BLOCK\n'
- '\n'
- 'Is semantically equivalent to:\n'
- '\n'
- ' mgr = (EXPR)\n'
- ' aexit = type(mgr).__aexit__\n'
- ' aenter = type(mgr).__aenter__(mgr)\n'
- '\n'
- ' VAR = await aenter\n'
- ' try:\n'
- ' BLOCK\n'
- ' except:\n'
- ' if not await aexit(mgr, *sys.exc_info()):\n'
- ' raise\n'
- ' else:\n'
- ' await aexit(mgr, None, None, None)\n'
- '\n'
- 'See also "__aenter__()" and "__aexit__()" for details.\n'
- '\n'
- 'It is a "SyntaxError" to use an "async with" statement outside '
- 'the\n'
- 'body of a coroutine function.\n'
- '\n'
- 'See also:\n'
+ 'class variables; they are shared by all instances. To create '
+ 'instance\n'
+ 'variables, they can be set in a method with "self.name = '
+ 'value". Both\n'
+ 'class and instance variables are accessible through the '
+ 'notation\n'
+ '""self.name"", and an instance variable hides a class variable '
+ 'with\n'
+ 'the same name when accessed in this way. Class variables can be '
+ 'used\n'
+ 'as defaults for instance variables, but using mutable values '
+ 'there can\n'
+ 'lead to unexpected results. For *new-style class*es, '
+ 'descriptors can\n'
+ 'be used to create instance variables with different '
+ 'implementation\n'
+ 'details.\n'
'\n'
- ' **PEP 492** - Coroutines with async and await syntax\n'
- ' The proposal that made coroutines a proper standalone '
- 'concept in\n'
- ' Python, and added supporting syntax.\n'
+ 'Class definitions, like function definitions, may be wrapped by '
+ 'one or\n'
+ 'more *decorator* expressions. The evaluation rules for the '
+ 'decorator\n'
+ 'expressions are the same as for functions. The result must be a '
+ 'class\n'
+ 'object, which is then bound to the class name.\n'
'\n'
'-[ Footnotes ]-\n'
'\n'
@@ -2994,17 +2782,26 @@ topics = {'assert': 'The "assert" statement\n'
' exception. That new exception causes the old one to be '
'lost.\n'
'\n'
- '[2] A string literal appearing as the first statement in the\n'
- ' function body is transformed into the function’s "__doc__"\n'
- ' attribute and therefore the function’s *docstring*.\n'
+ '[2] Currently, control "flows off the end" except in the case '
+ 'of\n'
+ ' an exception or the execution of a "return", "continue", or\n'
+ ' "break" statement.\n'
+ '\n'
+ '[3] A string literal appearing as the first statement in the\n'
+ ' function body is transformed into the function\'s "__doc__"\n'
+ " attribute and therefore the function's *docstring*.\n"
'\n'
- '[3] A string literal appearing as the first statement in the '
+ '[4] A string literal appearing as the first statement in the '
'class\n'
- ' body is transformed into the namespace’s "__doc__" item and\n'
- ' therefore the class’s *docstring*.\n',
- 'context-managers': 'With Statement Context Managers\n'
+ ' body is transformed into the namespace\'s "__doc__" item '
+ 'and\n'
+ " therefore the class's *docstring*.\n",
+ 'context-managers': '\n'
+ 'With Statement Context Managers\n'
'*******************************\n'
'\n'
+ 'New in version 2.5.\n'
+ '\n'
'A *context manager* is an object that defines the '
'runtime context to\n'
'be established when executing a "with" statement. The '
@@ -3031,7 +2828,7 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
' Enter the runtime context related to this object. The '
'"with"\n'
- ' statement will bind this method’s return value to the '
+ " statement will bind this method's return value to the "
'target(s)\n'
' specified in the "as" clause of the statement, if '
'any.\n'
@@ -3056,39 +2853,45 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
' Note that "__exit__()" methods should not reraise the '
'passed-in\n'
- ' exception; this is the caller’s responsibility.\n'
+ " exception; this is the caller's responsibility.\n"
'\n'
'See also:\n'
'\n'
- ' **PEP 343** - The “with” statement\n'
+ ' **PEP 343** - The "with" statement\n'
' The specification, background, and examples for the '
'Python "with"\n'
' statement.\n',
- 'continue': 'The "continue" statement\n'
+ 'continue': '\n'
+ 'The "continue" statement\n'
'************************\n'
'\n'
' continue_stmt ::= "continue"\n'
'\n'
'"continue" may only occur syntactically nested in a "for" or '
'"while"\n'
- 'loop, but not nested in a function or class definition within '
- 'that\n'
- 'loop. It continues with the next cycle of the nearest enclosing '
- 'loop.\n'
+ 'loop, but not nested in a function or class definition or '
+ '"finally"\n'
+ 'clause within that loop. It continues with the next cycle of '
+ 'the\n'
+ 'nearest enclosing loop.\n'
'\n'
'When "continue" passes control out of a "try" statement with a\n'
'"finally" clause, that "finally" clause is executed before '
'really\n'
'starting the next loop cycle.\n',
- 'conversions': 'Arithmetic conversions\n'
+ 'conversions': '\n'
+ 'Arithmetic conversions\n'
'**********************\n'
'\n'
'When a description of an arithmetic operator below uses the '
'phrase\n'
- '“the numeric arguments are converted to a common type,” this '
- 'means\n'
- 'that the operator implementation for built-in types works as '
- 'follows:\n'
+ '"the numeric arguments are converted to a common type," the '
+ 'arguments\n'
+ 'are coerced using the coercion rules listed at Coercion '
+ 'rules. If\n'
+ 'both arguments are standard numeric types, the following '
+ 'coercions are\n'
+ 'applied:\n'
'\n'
'* If either argument is a complex number, the other is '
'converted to\n'
@@ -3098,15 +2901,21 @@ topics = {'assert': 'The "assert" statement\n'
'the\n'
' other is converted to floating point;\n'
'\n'
- '* otherwise, both must be integers and no conversion is '
- 'necessary.\n'
+ '* otherwise, if either argument is a long integer, the other '
+ 'is\n'
+ ' converted to long integer;\n'
+ '\n'
+ '* otherwise, both must be plain integers and no conversion '
+ 'is\n'
+ ' necessary.\n'
'\n'
'Some additional rules apply for certain operators (e.g., a '
- 'string as a\n'
- 'left argument to the ‘%’ operator). Extensions must define '
- 'their own\n'
- 'conversion behavior.\n',
- 'customization': 'Basic customization\n'
+ 'string left\n'
+ "argument to the '%' operator). Extensions can define their "
+ 'own\n'
+ 'coercions.\n',
+ 'customization': '\n'
+ 'Basic customization\n'
'*******************\n'
'\n'
'object.__new__(cls[, ...])\n'
@@ -3127,26 +2936,24 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
' Typical implementations create a new instance of the '
'class by\n'
- ' invoking the superclass’s "__new__()" method using\n'
- ' "super().__new__(cls[, ...])" with appropriate arguments '
- 'and then\n'
- ' modifying the newly-created instance as necessary before '
- 'returning\n'
- ' it.\n'
- '\n'
- ' If "__new__()" is invoked during object construction and '
- 'it returns\n'
- ' an instance or subclass of *cls*, then the new '
- 'instance’s\n'
- ' "__init__()" method will be invoked like '
- '"__init__(self[, ...])",\n'
- ' where *self* is the new instance and the remaining '
- 'arguments are\n'
- ' the same as were passed to the object constructor.\n'
+ ' invoking the superclass\'s "__new__()" method using\n'
+ ' "super(currentclass, cls).__new__(cls[, ...])" with '
+ 'appropriate\n'
+ ' arguments and then modifying the newly-created instance '
+ 'as\n'
+ ' necessary before returning it.\n'
+ '\n'
+ ' If "__new__()" returns an instance of *cls*, then the '
+ 'new\n'
+ ' instance\'s "__init__()" method will be invoked like\n'
+ ' "__init__(self[, ...])", where *self* is the new '
+ 'instance and the\n'
+ ' remaining arguments are the same as were passed to '
+ '"__new__()".\n'
'\n'
' If "__new__()" does not return an instance of *cls*, '
'then the new\n'
- ' instance’s "__init__()" method will not be invoked.\n'
+ ' instance\'s "__init__()" method will not be invoked.\n'
'\n'
' "__new__()" is intended mainly to allow subclasses of '
'immutable\n'
@@ -3164,17 +2971,17 @@ topics = {'assert': 'The "assert" statement\n'
'those\n'
' passed to the class constructor expression. If a base '
'class has an\n'
- ' "__init__()" method, the derived class’s "__init__()" '
+ ' "__init__()" method, the derived class\'s "__init__()" '
'method, if\n'
' any, must explicitly call it to ensure proper '
'initialization of the\n'
' base class part of the instance; for example:\n'
- ' "super().__init__([args...])".\n'
+ ' "BaseClass.__init__(self, [args...])".\n'
'\n'
' Because "__new__()" and "__init__()" work together in '
'constructing\n'
' objects ("__new__()" to create it, and "__init__()" to '
- 'customize\n'
+ 'customise\n'
' it), no non-"None" value may be returned by '
'"__init__()"; doing so\n'
' will cause a "TypeError" to be raised at runtime.\n'
@@ -3183,52 +2990,65 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
' Called when the instance is about to be destroyed. This '
'is also\n'
- ' called a finalizer or (improperly) a destructor. If a '
- 'base class\n'
- ' has a "__del__()" method, the derived class’s '
- '"__del__()" method,\n'
- ' if any, must explicitly call it to ensure proper '
- 'deletion of the\n'
- ' base class part of the instance.\n'
- '\n'
- ' It is possible (though not recommended!) for the '
- '"__del__()" method\n'
- ' to postpone destruction of the instance by creating a '
- 'new reference\n'
- ' to it. This is called object *resurrection*. It is\n'
- ' implementation-dependent whether "__del__()" is called a '
- 'second\n'
- ' time when a resurrected object is about to be destroyed; '
+ ' called a destructor. If a base class has a "__del__()" '
+ 'method, the\n'
+ ' derived class\'s "__del__()" method, if any, must '
+ 'explicitly call it\n'
+ ' to ensure proper deletion of the base class part of the '
+ 'instance.\n'
+ ' Note that it is possible (though not recommended!) for '
'the\n'
- ' current *CPython* implementation only calls it once.\n'
- '\n'
- ' It is not guaranteed that "__del__()" methods are called '
- 'for\n'
- ' objects that still exist when the interpreter exits.\n'
- '\n'
- ' Note: "del x" doesn’t directly call "x.__del__()" — the '
- 'former\n'
+ ' "__del__()" method to postpone destruction of the '
+ 'instance by\n'
+ ' creating a new reference to it. It may then be called '
+ 'at a later\n'
+ ' time when this new reference is deleted. It is not '
+ 'guaranteed that\n'
+ ' "__del__()" methods are called for objects that still '
+ 'exist when\n'
+ ' the interpreter exits.\n'
+ '\n'
+ ' Note: "del x" doesn\'t directly call "x.__del__()" --- '
+ 'the former\n'
' decrements the reference count for "x" by one, and the '
'latter is\n'
- ' only called when "x"’s reference count reaches zero.\n'
- '\n'
- ' **CPython implementation detail:** It is possible for a '
+ ' only called when "x"\'s reference count reaches zero. '
+ 'Some common\n'
+ ' situations that may prevent the reference count of an '
+ 'object from\n'
+ ' going to zero include: circular references between '
+ 'objects (e.g.,\n'
+ ' a doubly-linked list or a tree data structure with '
+ 'parent and\n'
+ ' child pointers); a reference to the object on the '
+ 'stack frame of\n'
+ ' a function that caught an exception (the traceback '
+ 'stored in\n'
+ ' "sys.exc_traceback" keeps the stack frame alive); or a '
'reference\n'
- ' cycle to prevent the reference count of an object from '
- 'going to\n'
- ' zero. In this case, the cycle will be later detected '
- 'and deleted\n'
- ' by the *cyclic garbage collector*. A common cause of '
- 'reference\n'
- ' cycles is when an exception has been caught in a local '
- 'variable.\n'
- ' The frame’s locals then reference the exception, which '
+ ' to the object on the stack frame that raised an '
+ 'unhandled\n'
+ ' exception in interactive mode (the traceback stored '
+ 'in\n'
+ ' "sys.last_traceback" keeps the stack frame alive). '
+ 'The first\n'
+ ' situation can only be remedied by explicitly breaking '
+ 'the cycles;\n'
+ ' the latter two situations can be resolved by storing '
+ '"None" in\n'
+ ' "sys.exc_traceback" or "sys.last_traceback". Circular '
'references\n'
- ' its own traceback, which references the locals of all '
- 'frames caught\n'
- ' in the traceback.\n'
- '\n'
- ' See also: Documentation for the "gc" module.\n'
+ ' which are garbage are detected when the option cycle '
+ 'detector is\n'
+ " enabled (it's on by default), but can only be cleaned "
+ 'up if there\n'
+ ' are no Python-level "__del__()" methods involved. '
+ 'Refer to the\n'
+ ' documentation for the "gc" module for more information '
+ 'about how\n'
+ ' "__del__()" methods are handled by the cycle '
+ 'detector,\n'
+ ' particularly the description of the "garbage" value.\n'
'\n'
' Warning: Due to the precarious circumstances under '
'which\n'
@@ -3236,56 +3056,53 @@ topics = {'assert': 'The "assert" statement\n'
'during\n'
' their execution are ignored, and a warning is printed '
'to\n'
- ' "sys.stderr" instead. In particular:\n'
- '\n'
- ' * "__del__()" can be invoked when arbitrary code is '
- 'being\n'
- ' executed, including from any arbitrary thread. If '
+ ' "sys.stderr" instead. Also, when "__del__()" is '
+ 'invoked in\n'
+ ' response to a module being deleted (e.g., when '
+ 'execution of the\n'
+ ' program is done), other globals referenced by the '
'"__del__()"\n'
- ' needs to take a lock or invoke any other blocking '
- 'resource, it\n'
- ' may deadlock as the resource may already be taken by '
- 'the code\n'
- ' that gets interrupted to execute "__del__()".\n'
- '\n'
- ' * "__del__()" can be executed during interpreter '
- 'shutdown. As\n'
- ' a consequence, the global variables it needs to '
- 'access\n'
- ' (including other modules) may already have been '
- 'deleted or set\n'
- ' to "None". Python guarantees that globals whose name '
- 'begins\n'
- ' with a single underscore are deleted from their '
- 'module before\n'
- ' other globals are deleted; if no other references to '
- 'such\n'
- ' globals exist, this may help in assuring that '
- 'imported modules\n'
- ' are still available at the time when the "__del__()" '
- 'method is\n'
- ' called.\n'
+ ' method may already have been deleted or in the process '
+ 'of being\n'
+ ' torn down (e.g. the import machinery shutting down). '
+ 'For this\n'
+ ' reason, "__del__()" methods should do the absolute '
+ 'minimum needed\n'
+ ' to maintain external invariants. Starting with '
+ 'version 1.5,\n'
+ ' Python guarantees that globals whose name begins with '
+ 'a single\n'
+ ' underscore are deleted from their module before other '
+ 'globals are\n'
+ ' deleted; if no other references to such globals exist, '
+ 'this may\n'
+ ' help in assuring that imported modules are still '
+ 'available at the\n'
+ ' time when the "__del__()" method is called.\n'
+ '\n'
+ ' See also the "-R" command-line option.\n'
'\n'
'object.__repr__(self)\n'
'\n'
- ' Called by the "repr()" built-in function to compute the '
- '“official”\n'
- ' string representation of an object. If at all possible, '
- 'this\n'
- ' should look like a valid Python expression that could be '
- 'used to\n'
- ' recreate an object with the same value (given an '
- 'appropriate\n'
- ' environment). If this is not possible, a string of the '
- 'form\n'
- ' "<...some useful description...>" should be returned. '
- 'The return\n'
- ' value must be a string object. If a class defines '
- '"__repr__()" but\n'
- ' not "__str__()", then "__repr__()" is also used when an '
- '“informal”\n'
- ' string representation of instances of that class is '
- 'required.\n'
+ ' Called by the "repr()" built-in function and by string '
+ 'conversions\n'
+ ' (reverse quotes) to compute the "official" string '
+ 'representation of\n'
+ ' an object. If at all possible, this should look like a '
+ 'valid\n'
+ ' Python expression that could be used to recreate an '
+ 'object with the\n'
+ ' same value (given an appropriate environment). If this '
+ 'is not\n'
+ ' possible, a string of the form "<...some useful '
+ 'description...>"\n'
+ ' should be returned. The return value must be a string '
+ 'object. If a\n'
+ ' class defines "__repr__()" but not "__str__()", then '
+ '"__repr__()"\n'
+ ' is also used when an "informal" string representation of '
+ 'instances\n'
+ ' of that class is required.\n'
'\n'
' This is typically used for debugging, so it is important '
'that the\n'
@@ -3293,64 +3110,17 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
'object.__str__(self)\n'
'\n'
- ' Called by "str(object)" and the built-in functions '
- '"format()" and\n'
- ' "print()" to compute the “informal” or nicely printable '
- 'string\n'
- ' representation of an object. The return value must be a '
- 'string\n'
- ' object.\n'
- '\n'
- ' This method differs from "object.__repr__()" in that '
- 'there is no\n'
- ' expectation that "__str__()" return a valid Python '
- 'expression: a\n'
- ' more convenient or concise representation can be used.\n'
- '\n'
- ' The default implementation defined by the built-in type '
- '"object"\n'
- ' calls "object.__repr__()".\n'
- '\n'
- 'object.__bytes__(self)\n'
- '\n'
- ' Called by bytes to compute a byte-string representation '
- 'of an\n'
- ' object. This should return a "bytes" object.\n'
- '\n'
- 'object.__format__(self, format_spec)\n'
- '\n'
- ' Called by the "format()" built-in function, and by '
- 'extension,\n'
- ' evaluation of formatted string literals and the '
- '"str.format()"\n'
- ' method, to produce a “formatted” string representation '
- 'of an\n'
- ' object. The *format_spec* argument is a string that '
- 'contains a\n'
- ' description of the formatting options desired. The '
- 'interpretation\n'
- ' of the *format_spec* argument is up to the type '
- 'implementing\n'
- ' "__format__()", however most classes will either '
- 'delegate\n'
- ' formatting to one of the built-in types, or use a '
- 'similar\n'
- ' formatting option syntax.\n'
- '\n'
- ' See Format Specification Mini-Language for a description '
- 'of the\n'
- ' standard formatting syntax.\n'
- '\n'
- ' The return value must be a string object.\n'
- '\n'
- ' Changed in version 3.4: The __format__ method of '
- '"object" itself\n'
- ' raises a "TypeError" if passed any non-empty string.\n'
- '\n'
- ' Changed in version 3.7: "object.__format__(x, \'\')" is '
- 'now\n'
- ' equivalent to "str(x)" rather than "format(str(self), '
- '\'\')".\n'
+ ' Called by the "str()" built-in function and by the '
+ '"print"\n'
+ ' statement to compute the "informal" string '
+ 'representation of an\n'
+ ' object. This differs from "__repr__()" in that it does '
+ 'not have to\n'
+ ' be a valid Python expression: a more convenient or '
+ 'concise\n'
+ ' representation may be used instead. The return value '
+ 'must be a\n'
+ ' string object.\n'
'\n'
'object.__lt__(self, other)\n'
'object.__le__(self, other)\n'
@@ -3359,14 +3129,20 @@ topics = {'assert': 'The "assert" statement\n'
'object.__gt__(self, other)\n'
'object.__ge__(self, other)\n'
'\n'
- ' These are the so-called “rich comparison” methods. The\n'
+ ' New in version 2.1.\n'
+ '\n'
+ ' These are the so-called "rich comparison" methods, and '
+ 'are called\n'
+ ' for comparison operators in preference to "__cmp__()" '
+ 'below. The\n'
' correspondence between operator symbols and method names '
'is as\n'
' follows: "x<y" calls "x.__lt__(y)", "x<=y" calls '
'"x.__le__(y)",\n'
- ' "x==y" calls "x.__eq__(y)", "x!=y" calls "x.__ne__(y)", '
- '"x>y" calls\n'
- ' "x.__gt__(y)", and "x>=y" calls "x.__ge__(y)".\n'
+ ' "x==y" calls "x.__eq__(y)", "x!=y" and "x<>y" call '
+ '"x.__ne__(y)",\n'
+ ' "x>y" calls "x.__gt__(y)", and "x>=y" calls '
+ '"x.__ge__(y)".\n'
'\n'
' A rich comparison method may return the singleton '
'"NotImplemented"\n'
@@ -3383,43 +3159,61 @@ topics = {'assert': 'The "assert" statement\n'
' on the value to determine if the result is true or '
'false.\n'
'\n'
- ' By default, "__ne__()" delegates to "__eq__()" and '
- 'inverts the\n'
- ' result unless it is "NotImplemented". There are no '
- 'other implied\n'
- ' relationships among the comparison operators, for '
- 'example, the\n'
- ' truth of "(x<y or x==y)" does not imply "x<=y". To '
- 'automatically\n'
- ' generate ordering operations from a single root '
- 'operation, see\n'
- ' "functools.total_ordering()".\n'
- '\n'
- ' See the paragraph on "__hash__()" for some important '
- 'notes on\n'
- ' creating *hashable* objects which support custom '
- 'comparison\n'
- ' operations and are usable as dictionary keys.\n'
+ ' There are no implied relationships among the comparison '
+ 'operators.\n'
+ ' The truth of "x==y" does not imply that "x!=y" is '
+ 'false.\n'
+ ' Accordingly, when defining "__eq__()", one should also '
+ 'define\n'
+ ' "__ne__()" so that the operators will behave as '
+ 'expected. See the\n'
+ ' paragraph on "__hash__()" for some important notes on '
+ 'creating\n'
+ ' *hashable* objects which support custom comparison '
+ 'operations and\n'
+ ' are usable as dictionary keys.\n'
'\n'
' There are no swapped-argument versions of these methods '
'(to be used\n'
' when the left argument does not support the operation '
'but the right\n'
' argument does); rather, "__lt__()" and "__gt__()" are '
- 'each other’s\n'
- ' reflection, "__le__()" and "__ge__()" are each other’s '
+ "each other's\n"
+ ' reflection, "__le__()" and "__ge__()" are each other\'s '
'reflection,\n'
- ' and "__eq__()" and "__ne__()" are their own reflection. '
- 'If the\n'
- ' operands are of different types, and right operand’s '
- 'type is a\n'
- ' direct or indirect subclass of the left operand’s type, '
+ ' and "__eq__()" and "__ne__()" are their own reflection.\n'
+ '\n'
+ ' Arguments to rich comparison methods are never coerced.\n'
+ '\n'
+ ' To automatically generate ordering operations from a '
+ 'single root\n'
+ ' operation, see "functools.total_ordering()".\n'
+ '\n'
+ 'object.__cmp__(self, other)\n'
+ '\n'
+ ' Called by comparison operations if rich comparison (see '
+ 'above) is\n'
+ ' not defined. Should return a negative integer if "self '
+ '< other",\n'
+ ' zero if "self == other", a positive integer if "self > '
+ 'other". If\n'
+ ' no "__cmp__()", "__eq__()" or "__ne__()" operation is '
+ 'defined,\n'
+ ' class instances are compared by object identity '
+ '("address"). See\n'
+ ' also the description of "__hash__()" for some important '
+ 'notes on\n'
+ ' creating *hashable* objects which support custom '
+ 'comparison\n'
+ ' operations and are usable as dictionary keys. (Note: '
'the\n'
- ' reflected method of the right operand has priority, '
- 'otherwise the\n'
- ' left operand’s method has priority. Virtual subclassing '
- 'is not\n'
- ' considered.\n'
+ ' restriction that exceptions are not propagated by '
+ '"__cmp__()" has\n'
+ ' been removed since Python 1.5.)\n'
+ '\n'
+ 'object.__rcmp__(self, other)\n'
+ '\n'
+ ' Changed in version 2.1: No longer supported.\n'
'\n'
'object.__hash__(self)\n'
'\n'
@@ -3427,8 +3221,8 @@ topics = {'assert': 'The "assert" statement\n'
'on members\n'
' of hashed collections including "set", "frozenset", and '
'"dict".\n'
- ' "__hash__()" should return an integer. The only required '
- 'property\n'
+ ' "__hash__()" should return an integer. The only '
+ 'required property\n'
' is that objects which compare equal have the same hash '
'value; it is\n'
' advised to mix together the hash values of the '
@@ -3440,118 +3234,94 @@ topics = {'assert': 'The "assert" statement\n'
' def __hash__(self):\n'
' return hash((self.name, self.nick, self.color))\n'
'\n'
- ' Note: "hash()" truncates the value returned from an '
- 'object’s\n'
- ' custom "__hash__()" method to the size of a '
- '"Py_ssize_t". This\n'
- ' is typically 8 bytes on 64-bit builds and 4 bytes on '
- '32-bit\n'
- ' builds. If an object’s "__hash__()" must '
- 'interoperate on builds\n'
- ' of different bit sizes, be sure to check the width on '
- 'all\n'
- ' supported builds. An easy way to do this is with '
- '"python -c\n'
- ' "import sys; print(sys.hash_info.width)"".\n'
- '\n'
- ' If a class does not define an "__eq__()" method it '
- 'should not\n'
- ' define a "__hash__()" operation either; if it defines '
- '"__eq__()"\n'
- ' but not "__hash__()", its instances will not be usable '
- 'as items in\n'
- ' hashable collections. If a class defines mutable '
- 'objects and\n'
- ' implements an "__eq__()" method, it should not '
- 'implement\n'
- ' "__hash__()", since the implementation of hashable '
- 'collections\n'
- ' requires that a key’s hash value is immutable (if the '
- 'object’s hash\n'
- ' value changes, it will be in the wrong hash bucket).\n'
- '\n'
- ' User-defined classes have "__eq__()" and "__hash__()" '
+ ' If a class does not define a "__cmp__()" or "__eq__()" '
+ 'method it\n'
+ ' should not define a "__hash__()" operation either; if it '
+ 'defines\n'
+ ' "__cmp__()" or "__eq__()" but not "__hash__()", its '
+ 'instances will\n'
+ ' not be usable in hashed collections. If a class defines '
+ 'mutable\n'
+ ' objects and implements a "__cmp__()" or "__eq__()" '
+ 'method, it\n'
+ ' should not implement "__hash__()", since hashable '
+ 'collection\n'
+ " implementations require that an object's hash value is "
+ 'immutable\n'
+ " (if the object's hash value changes, it will be in the "
+ 'wrong hash\n'
+ ' bucket).\n'
+ '\n'
+ ' User-defined classes have "__cmp__()" and "__hash__()" '
'methods by\n'
' default; with them, all objects compare unequal (except '
'with\n'
- ' themselves) and "x.__hash__()" returns an appropriate '
- 'value such\n'
- ' that "x == y" implies both that "x is y" and "hash(x) == '
- 'hash(y)".\n'
- '\n'
- ' A class that overrides "__eq__()" and does not define '
- '"__hash__()"\n'
- ' will have its "__hash__()" implicitly set to "None". '
- 'When the\n'
- ' "__hash__()" method of a class is "None", instances of '
- 'the class\n'
- ' will raise an appropriate "TypeError" when a program '
- 'attempts to\n'
- ' retrieve their hash value, and will also be correctly '
- 'identified as\n'
- ' unhashable when checking "isinstance(obj,\n'
- ' collections.abc.Hashable)".\n'
- '\n'
- ' If a class that overrides "__eq__()" needs to retain '
- 'the\n'
- ' implementation of "__hash__()" from a parent class, the '
- 'interpreter\n'
- ' must be told this explicitly by setting "__hash__ =\n'
- ' <ParentClass>.__hash__".\n'
- '\n'
- ' If a class that does not override "__eq__()" wishes to '
- 'suppress\n'
- ' hash support, it should include "__hash__ = None" in the '
- 'class\n'
- ' definition. A class which defines its own "__hash__()" '
- 'that\n'
- ' explicitly raises a "TypeError" would be incorrectly '
- 'identified as\n'
- ' hashable by an "isinstance(obj, '
- 'collections.abc.Hashable)" call.\n'
- '\n'
- ' Note: By default, the "__hash__()" values of str and '
- 'bytes\n'
- ' objects are “salted” with an unpredictable random '
- 'value.\n'
- ' Although they remain constant within an individual '
- 'Python\n'
- ' process, they are not predictable between repeated '
- 'invocations of\n'
- ' Python.This is intended to provide protection against '
- 'a denial-\n'
- ' of-service caused by carefully-chosen inputs that '
- 'exploit the\n'
- ' worst case performance of a dict insertion, O(n^2) '
- 'complexity.\n'
- ' See '
- 'http://www.ocert.org/advisories/ocert-2011-003.html for\n'
- ' details.Changing hash values affects the iteration '
- 'order of sets.\n'
- ' Python has never made guarantees about this ordering '
- '(and it\n'
- ' typically varies between 32-bit and 64-bit builds).See '
- 'also\n'
- ' "PYTHONHASHSEED".\n'
- '\n'
- ' Changed in version 3.3: Hash randomization is enabled by '
- 'default.\n'
- '\n'
- 'object.__bool__(self)\n'
+ ' themselves) and "x.__hash__()" returns a result derived '
+ 'from\n'
+ ' "id(x)".\n'
+ '\n'
+ ' Classes which inherit a "__hash__()" method from a '
+ 'parent class but\n'
+ ' change the meaning of "__cmp__()" or "__eq__()" such '
+ 'that the hash\n'
+ ' value returned is no longer appropriate (e.g. by '
+ 'switching to a\n'
+ ' value-based concept of equality instead of the default '
+ 'identity\n'
+ ' based equality) can explicitly flag themselves as being '
+ 'unhashable\n'
+ ' by setting "__hash__ = None" in the class definition. '
+ 'Doing so\n'
+ ' means that not only will instances of the class raise '
+ 'an\n'
+ ' appropriate "TypeError" when a program attempts to '
+ 'retrieve their\n'
+ ' hash value, but they will also be correctly identified '
+ 'as\n'
+ ' unhashable when checking "isinstance(obj, '
+ 'collections.Hashable)"\n'
+ ' (unlike classes which define their own "__hash__()" to '
+ 'explicitly\n'
+ ' raise "TypeError").\n'
+ '\n'
+ ' Changed in version 2.5: "__hash__()" may now also return '
+ 'a long\n'
+ ' integer object; the 32-bit integer is then derived from '
+ 'the hash of\n'
+ ' that object.\n'
+ '\n'
+ ' Changed in version 2.6: "__hash__" may now be set to '
+ '"None" to\n'
+ ' explicitly flag instances of a class as unhashable.\n'
+ '\n'
+ 'object.__nonzero__(self)\n'
'\n'
' Called to implement truth value testing and the built-in '
'operation\n'
- ' "bool()"; should return "False" or "True". When this '
- 'method is not\n'
- ' defined, "__len__()" is called, if it is defined, and '
- 'the object is\n'
- ' considered true if its result is nonzero. If a class '
+ ' "bool()"; should return "False" or "True", or their '
+ 'integer\n'
+ ' equivalents "0" or "1". When this method is not '
+ 'defined,\n'
+ ' "__len__()" is called, if it is defined, and the object '
+ 'is\n'
+ ' considered true if its result is nonzero. If a class '
'defines\n'
- ' neither "__len__()" nor "__bool__()", all its instances '
- 'are\n'
- ' considered true.\n',
- 'debugger': '"pdb" — The Python Debugger\n'
- '***************************\n'
+ ' neither "__len__()" nor "__nonzero__()", all its '
+ 'instances are\n'
+ ' considered true.\n'
+ '\n'
+ 'object.__unicode__(self)\n'
+ '\n'
+ ' Called to implement "unicode()" built-in; should return '
+ 'a Unicode\n'
+ ' object. When this method is not defined, string '
+ 'conversion is\n'
+ ' attempted, and the result of string conversion is '
+ 'converted to\n'
+ ' Unicode using the system default encoding.\n',
+ 'debugger': '\n'
+ '"pdb" --- The Python Debugger\n'
+ '*****************************\n'
'\n'
'**Source code:** Lib/pdb.py\n'
'\n'
@@ -3569,15 +3339,15 @@ topics = {'assert': 'The "assert" statement\n'
'debugging\n'
'and can be called under program control.\n'
'\n'
- 'The debugger is extensible – it is actually defined as the '
+ 'The debugger is extensible --- it is actually defined as the '
'class\n'
'"Pdb". This is currently undocumented but easily understood by '
'reading\n'
'the source. The extension interface uses the modules "bdb" and '
'"cmd".\n'
'\n'
- 'The debugger’s prompt is "(Pdb)". Typical usage to run a program '
- 'under\n'
+ 'The debugger\'s prompt is "(Pdb)". Typical usage to run a '
+ 'program under\n'
'control of the debugger is:\n'
'\n'
' >>> import pdb\n'
@@ -3591,40 +3361,25 @@ topics = {'assert': 'The "assert" statement\n'
' > <string>(1)?()\n'
' (Pdb)\n'
'\n'
- 'Changed in version 3.3: Tab-completion via the "readline" module '
- 'is\n'
- 'available for commands and command arguments, e.g. the current '
- 'global\n'
- 'and local names are offered as arguments of the "p" command.\n'
- '\n'
'"pdb.py" can also be invoked as a script to debug other '
'scripts. For\n'
'example:\n'
'\n'
- ' python3 -m pdb myscript.py\n'
+ ' python -m pdb myscript.py\n'
'\n'
'When invoked as a script, pdb will automatically enter '
'post-mortem\n'
- 'debugging if the program being debugged exits abnormally. After '
+ 'debugging if the program being debugged exits abnormally. After '
'post-\n'
'mortem debugging (or after normal exit of the program), pdb '
'will\n'
- 'restart the program. Automatic restarting preserves pdb’s state '
+ "restart the program. Automatic restarting preserves pdb's state "
'(such\n'
'as breakpoints) and in most cases is more useful than quitting '
'the\n'
- 'debugger upon program’s exit.\n'
+ "debugger upon program's exit.\n"
'\n'
- 'New in version 3.2: "pdb.py" now accepts a "-c" option that '
- 'executes\n'
- 'commands as if given in a ".pdbrc" file, see Debugger Commands.\n'
- '\n'
- 'New in version 3.7: "pdb.py" now accepts a "-m" option that '
- 'execute\n'
- 'modules similar to the way "python3 -m" does. As with a script, '
- 'the\n'
- 'debugger will pause execution just before the first line of the\n'
- 'module.\n'
+ 'New in version 2.4: Restarting post-mortem behavior added.\n'
'\n'
'The typical usage to break into the debugger from a running '
'program is\n'
@@ -3636,11 +3391,7 @@ topics = {'assert': 'The "assert" statement\n'
'then\n'
'step through the code following this statement, and continue '
'running\n'
- 'without the debugger using the "continue" command.\n'
- '\n'
- 'New in version 3.7: The built-in "breakpoint()", when called '
- 'with\n'
- 'defaults, can be used instead of "import pdb; pdb.set_trace()".\n'
+ 'without the debugger using the "c" command.\n'
'\n'
'The typical usage to inspect a crashed program is:\n'
'\n'
@@ -3652,45 +3403,42 @@ topics = {'assert': 'The "assert" statement\n'
' File "./mymodule.py", line 4, in test\n'
' test2()\n'
' File "./mymodule.py", line 3, in test2\n'
- ' print(spam)\n'
+ ' print spam\n'
' NameError: spam\n'
' >>> pdb.pm()\n'
' > ./mymodule.py(3)test2()\n'
- ' -> print(spam)\n'
+ ' -> print spam\n'
' (Pdb)\n'
'\n'
'The module defines the following functions; each enters the '
'debugger\n'
'in a slightly different way:\n'
'\n'
- 'pdb.run(statement, globals=None, locals=None)\n'
+ 'pdb.run(statement[, globals[, locals]])\n'
'\n'
- ' Execute the *statement* (given as a string or a code object) '
- 'under\n'
- ' debugger control. The debugger prompt appears before any '
- 'code is\n'
- ' executed; you can set breakpoints and type "continue", or you '
+ ' Execute the *statement* (given as a string) under debugger '
+ 'control.\n'
+ ' The debugger prompt appears before any code is executed; you '
'can\n'
- ' step through the statement using "step" or "next" (all these\n'
- ' commands are explained below). The optional *globals* and '
- '*locals*\n'
- ' arguments specify the environment in which the code is '
- 'executed; by\n'
- ' default the dictionary of the module "__main__" is used. '
- '(See the\n'
- ' explanation of the built-in "exec()" or "eval()" functions.)\n'
- '\n'
- 'pdb.runeval(expression, globals=None, locals=None)\n'
- '\n'
- ' Evaluate the *expression* (given as a string or a code '
- 'object)\n'
- ' under debugger control. When "runeval()" returns, it returns '
+ ' set breakpoints and type "continue", or you can step through '
'the\n'
- ' value of the expression. Otherwise this function is similar '
- 'to\n'
- ' "run()".\n'
+ ' statement using "step" or "next" (all these commands are '
+ 'explained\n'
+ ' below). The optional *globals* and *locals* arguments '
+ 'specify the\n'
+ ' environment in which the code is executed; by default the\n'
+ ' dictionary of the module "__main__" is used. (See the '
+ 'explanation\n'
+ ' of the "exec" statement or the "eval()" built-in function.)\n'
+ '\n'
+ 'pdb.runeval(expression[, globals[, locals]])\n'
+ '\n'
+ ' Evaluate the *expression* (given as a string) under debugger\n'
+ ' control. When "runeval()" returns, it returns the value of '
+ 'the\n'
+ ' expression. Otherwise this function is similar to "run()".\n'
'\n'
- 'pdb.runcall(function, *args, **kwds)\n'
+ 'pdb.runcall(function[, argument, ...])\n'
'\n'
' Call the *function* (a function or method object, not a '
'string)\n'
@@ -3700,20 +3448,16 @@ topics = {'assert': 'The "assert" statement\n'
'appears\n'
' as soon as the function is entered.\n'
'\n'
- 'pdb.set_trace(*, header=None)\n'
+ 'pdb.set_trace()\n'
'\n'
' Enter the debugger at the calling stack frame. This is '
'useful to\n'
' hard-code a breakpoint at a given point in a program, even if '
'the\n'
' code is not otherwise being debugged (e.g. when an assertion\n'
- ' fails). If given, *header* is printed to the console just '
- 'before\n'
- ' debugging begins.\n'
+ ' fails).\n'
'\n'
- ' Changed in version 3.7: The keyword-only argument *header*.\n'
- '\n'
- 'pdb.post_mortem(traceback=None)\n'
+ 'pdb.post_mortem([traceback])\n'
'\n'
' Enter post-mortem debugging of the given *traceback* object. '
'If no\n'
@@ -3735,7 +3479,7 @@ topics = {'assert': 'The "assert" statement\n'
'to access further features, you have to do this yourself:\n'
'\n'
"class pdb.Pdb(completekey='tab', stdin=None, stdout=None, "
- 'skip=None, nosigint=False, readrc=True)\n'
+ 'skip=None)\n'
'\n'
' "Pdb" is the debugger class.\n'
'\n'
@@ -3750,486 +3494,20 @@ topics = {'assert': 'The "assert" statement\n'
' originate in a module that matches one of these patterns. '
'[1]\n'
'\n'
- ' By default, Pdb sets a handler for the SIGINT signal (which '
- 'is sent\n'
- ' when the user presses "Ctrl-C" on the console) when you give '
- 'a\n'
- ' "continue" command. This allows you to break into the '
- 'debugger\n'
- ' again by pressing "Ctrl-C". If you want Pdb not to touch '
- 'the\n'
- ' SIGINT handler, set *nosigint* to true.\n'
- '\n'
- ' The *readrc* argument defaults to true and controls whether '
- 'Pdb\n'
- ' will load .pdbrc files from the filesystem.\n'
- '\n'
' Example call to enable tracing with *skip*:\n'
'\n'
" import pdb; pdb.Pdb(skip=['django.*']).set_trace()\n"
'\n'
- ' Raises an auditing event "pdb.Pdb" with no arguments.\n'
+ ' New in version 2.7: The *skip* argument.\n'
'\n'
- ' New in version 3.1: The *skip* argument.\n'
- '\n'
- ' New in version 3.2: The *nosigint* argument. Previously, a '
- 'SIGINT\n'
- ' handler was never set by Pdb.\n'
- '\n'
- ' Changed in version 3.6: The *readrc* argument.\n'
- '\n'
- ' run(statement, globals=None, locals=None)\n'
- ' runeval(expression, globals=None, locals=None)\n'
- ' runcall(function, *args, **kwds)\n'
+ ' run(statement[, globals[, locals]])\n'
+ ' runeval(expression[, globals[, locals]])\n'
+ ' runcall(function[, argument, ...])\n'
' set_trace()\n'
'\n'
- ' See the documentation for the functions explained above.\n'
- '\n'
- '\n'
- 'Debugger Commands\n'
- '=================\n'
- '\n'
- 'The commands recognized by the debugger are listed below. Most\n'
- 'commands can be abbreviated to one or two letters as indicated; '
- 'e.g.\n'
- '"h(elp)" means that either "h" or "help" can be used to enter '
- 'the help\n'
- 'command (but not "he" or "hel", nor "H" or "Help" or "HELP").\n'
- 'Arguments to commands must be separated by whitespace (spaces '
- 'or\n'
- 'tabs). Optional arguments are enclosed in square brackets '
- '("[]") in\n'
- 'the command syntax; the square brackets must not be typed.\n'
- 'Alternatives in the command syntax are separated by a vertical '
- 'bar\n'
- '("|").\n'
- '\n'
- 'Entering a blank line repeats the last command entered. '
- 'Exception: if\n'
- 'the last command was a "list" command, the next 11 lines are '
- 'listed.\n'
- '\n'
- 'Commands that the debugger doesn’t recognize are assumed to be '
- 'Python\n'
- 'statements and are executed in the context of the program being\n'
- 'debugged. Python statements can also be prefixed with an '
- 'exclamation\n'
- 'point ("!"). This is a powerful way to inspect the program '
- 'being\n'
- 'debugged; it is even possible to change a variable or call a '
- 'function.\n'
- 'When an exception occurs in such a statement, the exception name '
- 'is\n'
- 'printed but the debugger’s state is not changed.\n'
- '\n'
- 'The debugger supports aliases. Aliases can have parameters '
- 'which\n'
- 'allows one a certain level of adaptability to the context under\n'
- 'examination.\n'
- '\n'
- 'Multiple commands may be entered on a single line, separated by '
- '";;".\n'
- '(A single ";" is not used as it is the separator for multiple '
- 'commands\n'
- 'in a line that is passed to the Python parser.) No intelligence '
- 'is\n'
- 'applied to separating the commands; the input is split at the '
- 'first\n'
- '";;" pair, even if it is in the middle of a quoted string.\n'
- '\n'
- 'If a file ".pdbrc" exists in the user’s home directory or in '
- 'the\n'
- 'current directory, it is read in and executed as if it had been '
- 'typed\n'
- 'at the debugger prompt. This is particularly useful for '
- 'aliases. If\n'
- 'both files exist, the one in the home directory is read first '
- 'and\n'
- 'aliases defined there can be overridden by the local file.\n'
- '\n'
- 'Changed in version 3.2: ".pdbrc" can now contain commands that\n'
- 'continue debugging, such as "continue" or "next". Previously, '
- 'these\n'
- 'commands had no effect.\n'
- '\n'
- 'h(elp) [command]\n'
- '\n'
- ' Without argument, print the list of available commands. With '
- 'a\n'
- ' *command* as argument, print help about that command. "help '
- 'pdb"\n'
- ' displays the full documentation (the docstring of the "pdb"\n'
- ' module). Since the *command* argument must be an identifier, '
- '"help\n'
- ' exec" must be entered to get help on the "!" command.\n'
- '\n'
- 'w(here)\n'
- '\n'
- ' Print a stack trace, with the most recent frame at the '
- 'bottom. An\n'
- ' arrow indicates the current frame, which determines the '
- 'context of\n'
- ' most commands.\n'
- '\n'
- 'd(own) [count]\n'
- '\n'
- ' Move the current frame *count* (default one) levels down in '
- 'the\n'
- ' stack trace (to a newer frame).\n'
- '\n'
- 'u(p) [count]\n'
- '\n'
- ' Move the current frame *count* (default one) levels up in the '
- 'stack\n'
- ' trace (to an older frame).\n'
- '\n'
- 'b(reak) [([filename:]lineno | function) [, condition]]\n'
- '\n'
- ' With a *lineno* argument, set a break there in the current '
- 'file.\n'
- ' With a *function* argument, set a break at the first '
- 'executable\n'
- ' statement within that function. The line number may be '
- 'prefixed\n'
- ' with a filename and a colon, to specify a breakpoint in '
- 'another\n'
- ' file (probably one that hasn’t been loaded yet). The file '
- 'is\n'
- ' searched on "sys.path". Note that each breakpoint is '
- 'assigned a\n'
- ' number to which all the other breakpoint commands refer.\n'
- '\n'
- ' If a second argument is present, it is an expression which '
- 'must\n'
- ' evaluate to true before the breakpoint is honored.\n'
- '\n'
- ' Without argument, list all breaks, including for each '
- 'breakpoint,\n'
- ' the number of times that breakpoint has been hit, the '
- 'current\n'
- ' ignore count, and the associated condition if any.\n'
- '\n'
- 'tbreak [([filename:]lineno | function) [, condition]]\n'
- '\n'
- ' Temporary breakpoint, which is removed automatically when it '
- 'is\n'
- ' first hit. The arguments are the same as for "break".\n'
- '\n'
- 'cl(ear) [filename:lineno | bpnumber ...]\n'
- '\n'
- ' With a *filename:lineno* argument, clear all the breakpoints '
- 'at\n'
- ' this line. With a space separated list of breakpoint numbers, '
- 'clear\n'
- ' those breakpoints. Without argument, clear all breaks (but '
- 'first\n'
- ' ask confirmation).\n'
- '\n'
- 'disable [bpnumber ...]\n'
- '\n'
- ' Disable the breakpoints given as a space separated list of\n'
- ' breakpoint numbers. Disabling a breakpoint means it cannot '
- 'cause\n'
- ' the program to stop execution, but unlike clearing a '
- 'breakpoint, it\n'
- ' remains in the list of breakpoints and can be (re-)enabled.\n'
- '\n'
- 'enable [bpnumber ...]\n'
- '\n'
- ' Enable the breakpoints specified.\n'
- '\n'
- 'ignore bpnumber [count]\n'
- '\n'
- ' Set the ignore count for the given breakpoint number. If '
- 'count is\n'
- ' omitted, the ignore count is set to 0. A breakpoint becomes '
- 'active\n'
- ' when the ignore count is zero. When non-zero, the count is\n'
- ' decremented each time the breakpoint is reached and the '
- 'breakpoint\n'
- ' is not disabled and any associated condition evaluates to '
- 'true.\n'
- '\n'
- 'condition bpnumber [condition]\n'
- '\n'
- ' Set a new *condition* for the breakpoint, an expression which '
- 'must\n'
- ' evaluate to true before the breakpoint is honored. If '
- '*condition*\n'
- ' is absent, any existing condition is removed; i.e., the '
- 'breakpoint\n'
- ' is made unconditional.\n'
- '\n'
- 'commands [bpnumber]\n'
- '\n'
- ' Specify a list of commands for breakpoint number *bpnumber*. '
- 'The\n'
- ' commands themselves appear on the following lines. Type a '
- 'line\n'
- ' containing just "end" to terminate the commands. An example:\n'
- '\n'
- ' (Pdb) commands 1\n'
- ' (com) p some_variable\n'
- ' (com) end\n'
- ' (Pdb)\n'
- '\n'
- ' To remove all commands from a breakpoint, type "commands" '
- 'and\n'
- ' follow it immediately with "end"; that is, give no commands.\n'
- '\n'
- ' With no *bpnumber* argument, "commands" refers to the last\n'
- ' breakpoint set.\n'
- '\n'
- ' You can use breakpoint commands to start your program up '
- 'again.\n'
- ' Simply use the "continue" command, or "step", or any other '
- 'command\n'
- ' that resumes execution.\n'
- '\n'
- ' Specifying any command resuming execution (currently '
- '"continue",\n'
- ' "step", "next", "return", "jump", "quit" and their '
- 'abbreviations)\n'
- ' terminates the command list (as if that command was '
- 'immediately\n'
- ' followed by end). This is because any time you resume '
- 'execution\n'
- ' (even with a simple next or step), you may encounter another\n'
- ' breakpoint—which could have its own command list, leading to\n'
- ' ambiguities about which list to execute.\n'
- '\n'
- ' If you use the ‘silent’ command in the command list, the '
- 'usual\n'
- ' message about stopping at a breakpoint is not printed. This '
- 'may be\n'
- ' desirable for breakpoints that are to print a specific '
- 'message and\n'
- ' then continue. If none of the other commands print anything, '
- 'you\n'
- ' see no sign that the breakpoint was reached.\n'
- '\n'
- 's(tep)\n'
- '\n'
- ' Execute the current line, stop at the first possible '
- 'occasion\n'
- ' (either in a function that is called or on the next line in '
- 'the\n'
- ' current function).\n'
- '\n'
- 'n(ext)\n'
- '\n'
- ' Continue execution until the next line in the current '
- 'function is\n'
- ' reached or it returns. (The difference between "next" and '
- '"step"\n'
- ' is that "step" stops inside a called function, while "next"\n'
- ' executes called functions at (nearly) full speed, only '
- 'stopping at\n'
- ' the next line in the current function.)\n'
- '\n'
- 'unt(il) [lineno]\n'
- '\n'
- ' Without argument, continue execution until the line with a '
- 'number\n'
- ' greater than the current one is reached.\n'
- '\n'
- ' With a line number, continue execution until a line with a '
- 'number\n'
- ' greater or equal to that is reached. In both cases, also '
- 'stop when\n'
- ' the current frame returns.\n'
- '\n'
- ' Changed in version 3.2: Allow giving an explicit line '
- 'number.\n'
- '\n'
- 'r(eturn)\n'
- '\n'
- ' Continue execution until the current function returns.\n'
- '\n'
- 'c(ont(inue))\n'
- '\n'
- ' Continue execution, only stop when a breakpoint is '
- 'encountered.\n'
- '\n'
- 'j(ump) lineno\n'
- '\n'
- ' Set the next line that will be executed. Only available in '
- 'the\n'
- ' bottom-most frame. This lets you jump back and execute code '
- 'again,\n'
- ' or jump forward to skip code that you don’t want to run.\n'
- '\n'
- ' It should be noted that not all jumps are allowed – for '
- 'instance it\n'
- ' is not possible to jump into the middle of a "for" loop or '
- 'out of a\n'
- ' "finally" clause.\n'
- '\n'
- 'l(ist) [first[, last]]\n'
- '\n'
- ' List source code for the current file. Without arguments, '
- 'list 11\n'
- ' lines around the current line or continue the previous '
- 'listing.\n'
- ' With "." as argument, list 11 lines around the current line. '
- 'With\n'
- ' one argument, list 11 lines around at that line. With two\n'
- ' arguments, list the given range; if the second argument is '
- 'less\n'
- ' than the first, it is interpreted as a count.\n'
- '\n'
- ' The current line in the current frame is indicated by "->". '
- 'If an\n'
- ' exception is being debugged, the line where the exception '
- 'was\n'
- ' originally raised or propagated is indicated by ">>", if it '
- 'differs\n'
- ' from the current line.\n'
- '\n'
- ' New in version 3.2: The ">>" marker.\n'
- '\n'
- 'll | longlist\n'
- '\n'
- ' List all source code for the current function or frame.\n'
- ' Interesting lines are marked as for "list".\n'
- '\n'
- ' New in version 3.2.\n'
- '\n'
- 'a(rgs)\n'
- '\n'
- ' Print the argument list of the current function.\n'
- '\n'
- 'p expression\n'
- '\n'
- ' Evaluate the *expression* in the current context and print '
- 'its\n'
- ' value.\n'
- '\n'
- ' Note: "print()" can also be used, but is not a debugger '
- 'command —\n'
- ' this executes the Python "print()" function.\n'
- '\n'
- 'pp expression\n'
- '\n'
- ' Like the "p" command, except the value of the expression is '
- 'pretty-\n'
- ' printed using the "pprint" module.\n'
- '\n'
- 'whatis expression\n'
- '\n'
- ' Print the type of the *expression*.\n'
- '\n'
- 'source expression\n'
- '\n'
- ' Try to get source code for the given object and display it.\n'
- '\n'
- ' New in version 3.2.\n'
- '\n'
- 'display [expression]\n'
- '\n'
- ' Display the value of the expression if it changed, each time\n'
- ' execution stops in the current frame.\n'
- '\n'
- ' Without expression, list all display expressions for the '
- 'current\n'
- ' frame.\n'
- '\n'
- ' New in version 3.2.\n'
- '\n'
- 'undisplay [expression]\n'
- '\n'
- ' Do not display the expression any more in the current frame.\n'
- ' Without expression, clear all display expressions for the '
- 'current\n'
- ' frame.\n'
- '\n'
- ' New in version 3.2.\n'
- '\n'
- 'interact\n'
- '\n'
- ' Start an interactive interpreter (using the "code" module) '
- 'whose\n'
- ' global namespace contains all the (global and local) names '
- 'found in\n'
- ' the current scope.\n'
- '\n'
- ' New in version 3.2.\n'
- '\n'
- 'alias [name [command]]\n'
- '\n'
- ' Create an alias called *name* that executes *command*. The '
- 'command\n'
- ' must *not* be enclosed in quotes. Replaceable parameters can '
- 'be\n'
- ' indicated by "%1", "%2", and so on, while "%*" is replaced by '
- 'all\n'
- ' the parameters. If no command is given, the current alias '
- 'for\n'
- ' *name* is shown. If no arguments are given, all aliases are '
- 'listed.\n'
- '\n'
- ' Aliases may be nested and can contain anything that can be '
- 'legally\n'
- ' typed at the pdb prompt. Note that internal pdb commands '
- '*can* be\n'
- ' overridden by aliases. Such a command is then hidden until '
- 'the\n'
- ' alias is removed. Aliasing is recursively applied to the '
- 'first\n'
- ' word of the command line; all other words in the line are '
- 'left\n'
- ' alone.\n'
- '\n'
- ' As an example, here are two useful aliases (especially when '
- 'placed\n'
- ' in the ".pdbrc" file):\n'
- '\n'
- ' # Print instance variables (usage "pi classInst")\n'
- ' alias pi for k in %1.__dict__.keys(): '
- 'print("%1.",k,"=",%1.__dict__[k])\n'
- ' # Print instance variables in self\n'
- ' alias ps pi self\n'
- '\n'
- 'unalias name\n'
- '\n'
- ' Delete the specified alias.\n'
- '\n'
- '! statement\n'
- '\n'
- ' Execute the (one-line) *statement* in the context of the '
- 'current\n'
- ' stack frame. The exclamation point can be omitted unless the '
- 'first\n'
- ' word of the statement resembles a debugger command. To set '
- 'a\n'
- ' global variable, you can prefix the assignment command with '
- 'a\n'
- ' "global" statement on the same line, e.g.:\n'
- '\n'
- " (Pdb) global list_options; list_options = ['-l']\n"
- ' (Pdb)\n'
- '\n'
- 'run [args ...]\n'
- 'restart [args ...]\n'
- '\n'
- ' Restart the debugged Python program. If an argument is '
- 'supplied,\n'
- ' it is split with "shlex" and the result is used as the new\n'
- ' "sys.argv". History, breakpoints, actions and debugger '
- 'options are\n'
- ' preserved. "restart" is an alias for "run".\n'
- '\n'
- 'q(uit)\n'
- '\n'
- ' Quit from the debugger. The program being executed is '
- 'aborted.\n'
- '\n'
- '-[ Footnotes ]-\n'
- '\n'
- '[1] Whether a frame is considered to originate in a certain '
- 'module\n'
- ' is determined by the "__name__" in the frame globals.\n',
- 'del': 'The "del" statement\n'
+ ' See the documentation for the functions explained above.\n',
+ 'del': '\n'
+ 'The "del" statement\n'
'*******************\n'
'\n'
' del_stmt ::= "del" target_list\n'
@@ -4242,23 +3520,23 @@ topics = {'assert': 'The "assert" statement\n'
'Deletion of a target list recursively deletes each target, from left\n'
'to right.\n'
'\n'
- 'Deletion of a name removes the binding of that name from the local '
+ 'Deletion of a name removes the binding of that name from the local '
'or\n'
'global namespace, depending on whether the name occurs in a "global"\n'
'statement in the same code block. If the name is unbound, a\n'
'"NameError" exception will be raised.\n'
'\n'
+ 'It is illegal to delete a name from the local namespace if it occurs\n'
+ 'as a free variable in a nested block.\n'
+ '\n'
'Deletion of attribute references, subscriptions and slicings is '
'passed\n'
'to the primary object involved; deletion of a slicing is in general\n'
'equivalent to assignment of an empty slice of the right type (but '
'even\n'
- 'this is determined by the sliced object).\n'
- '\n'
- 'Changed in version 3.2: Previously it was illegal to delete a name\n'
- 'from the local namespace if it occurs as a free variable in a nested\n'
- 'block.\n',
- 'dict': 'Dictionary displays\n'
+ 'this is determined by the sliced object).\n',
+ 'dict': '\n'
+ 'Dictionary displays\n'
'*******************\n'
'\n'
'A dictionary display is a possibly empty series of key/datum pairs\n'
@@ -4267,7 +3545,7 @@ topics = {'assert': 'The "assert" statement\n'
' dict_display ::= "{" [key_datum_list | dict_comprehension] '
'"}"\n'
' key_datum_list ::= key_datum ("," key_datum)* [","]\n'
- ' key_datum ::= expression ":" expression | "**" or_expr\n'
+ ' key_datum ::= expression ":" expression\n'
' dict_comprehension ::= expression ":" expression comp_for\n'
'\n'
'A dictionary display yields a new dictionary object.\n'
@@ -4277,21 +3555,13 @@ topics = {'assert': 'The "assert" statement\n'
'dictionary:\n'
'each key object is used as a key into the dictionary to store the\n'
'corresponding datum. This means that you can specify the same key\n'
- 'multiple times in the key/datum list, and the final dictionary’s '
+ "multiple times in the key/datum list, and the final dictionary's "
'value\n'
'for that key will be the last one given.\n'
'\n'
- 'A double asterisk "**" denotes *dictionary unpacking*. Its operand\n'
- 'must be a *mapping*. Each mapping item is added to the new\n'
- 'dictionary. Later values replace values already set by earlier\n'
- 'key/datum pairs and earlier dictionary unpackings.\n'
- '\n'
- 'New in version 3.5: Unpacking into dictionary displays, originally\n'
- 'proposed by **PEP 448**.\n'
- '\n'
'A dict comprehension, in contrast to list and set comprehensions,\n'
'needs two expressions separated with a colon followed by the usual\n'
- '“for” and “if” clauses. When the comprehension is run, the '
+ '"for" and "if" clauses. When the comprehension is run, the '
'resulting\n'
'key and value elements are inserted in the new dictionary in the '
'order\n'
@@ -4301,47 +3571,60 @@ topics = {'assert': 'The "assert" statement\n'
'section The standard type hierarchy. (To summarize, the key type\n'
'should be *hashable*, which excludes all mutable objects.) Clashes\n'
'between duplicate keys are not detected; the last datum (textually\n'
- 'rightmost in the display) stored for a given key value prevails.\n'
- '\n'
- 'Changed in version 3.8: Prior to Python 3.8, in dict '
- 'comprehensions,\n'
- 'the evaluation order of key and value was not well-defined. In\n'
- 'CPython, the value was evaluated before the key. Starting with '
- '3.8,\n'
- 'the key is evaluated before the value, as proposed by **PEP 572**.\n',
- 'dynamic-features': 'Interaction with dynamic features\n'
+ 'rightmost in the display) stored for a given key value prevails.\n',
+ 'dynamic-features': '\n'
+ 'Interaction with dynamic features\n'
'*********************************\n'
'\n'
- 'Name resolution of free variables occurs at runtime, not '
- 'at compile\n'
- 'time. This means that the following code will print 42:\n'
+ 'There are several cases where Python statements are '
+ 'illegal when used\n'
+ 'in conjunction with nested scopes that contain free '
+ 'variables.\n'
'\n'
- ' i = 10\n'
- ' def f():\n'
- ' print(i)\n'
- ' i = 42\n'
- ' f()\n'
+ 'If a variable is referenced in an enclosing scope, it is '
+ 'illegal to\n'
+ 'delete the name. An error will be reported at compile '
+ 'time.\n'
'\n'
- 'The "eval()" and "exec()" functions do not have access '
- 'to the full\n'
- 'environment for resolving names. Names may be resolved '
- 'in the local\n'
- 'and global namespaces of the caller. Free variables are '
- 'not resolved\n'
- 'in the nearest enclosing namespace, but in the global '
- 'namespace. [1]\n'
- 'The "exec()" and "eval()" functions have optional '
+ 'If the wild card form of import --- "import *" --- is '
+ 'used in a\n'
+ 'function and the function contains or is a nested block '
+ 'with free\n'
+ 'variables, the compiler will raise a "SyntaxError".\n'
+ '\n'
+ 'If "exec" is used in a function and the function '
+ 'contains or is a\n'
+ 'nested block with free variables, the compiler will '
+ 'raise a\n'
+ '"SyntaxError" unless the exec explicitly specifies the '
+ 'local namespace\n'
+ 'for the "exec". (In other words, "exec obj" would be '
+ 'illegal, but\n'
+ '"exec obj in ns" would be legal.)\n'
+ '\n'
+ 'The "eval()", "execfile()", and "input()" functions and '
+ 'the "exec"\n'
+ 'statement do not have access to the full environment for '
+ 'resolving\n'
+ 'names. Names may be resolved in the local and global '
+ 'namespaces of\n'
+ 'the caller. Free variables are not resolved in the '
+ 'nearest enclosing\n'
+ 'namespace, but in the global namespace. [1] The "exec" '
+ 'statement and\n'
+ 'the "eval()" and "execfile()" functions have optional '
'arguments to\n'
'override the global and local namespace. If only one '
'namespace is\n'
'specified, it is used for both.\n',
- 'else': 'The "if" statement\n'
+ 'else': '\n'
+ 'The "if" statement\n'
'******************\n'
'\n'
'The "if" statement is used for conditional execution:\n'
'\n'
' if_stmt ::= "if" expression ":" suite\n'
- ' ("elif" expression ":" suite)*\n'
+ ' ( "elif" expression ":" suite )*\n'
' ["else" ":" suite]\n'
'\n'
'It selects exactly one of the suites by evaluating the expressions '
@@ -4352,7 +3635,8 @@ topics = {'assert': 'The "assert" statement\n'
'(and no other part of the "if" statement is executed or evaluated).\n'
'If all expressions are false, the suite of the "else" clause, if\n'
'present, is executed.\n',
- 'exceptions': 'Exceptions\n'
+ 'exceptions': '\n'
+ 'Exceptions\n'
'**********\n'
'\n'
'Exceptions are a means of breaking out of the normal flow of '
@@ -4372,7 +3656,7 @@ topics = {'assert': 'The "assert" statement\n'
'error (such as division by zero). A Python program can also\n'
'explicitly raise an exception with the "raise" statement. '
'Exception\n'
- 'handlers are specified with the "try" … "except" statement. '
+ 'handlers are specified with the "try" ... "except" statement. '
'The\n'
'"finally" clause of such a statement can be used to specify '
'cleanup\n'
@@ -4380,7 +3664,7 @@ topics = {'assert': 'The "assert" statement\n'
'whether an\n'
'exception occurred or not in the preceding code.\n'
'\n'
- 'Python uses the “termination” model of error handling: an '
+ 'Python uses the "termination" model of error handling: an '
'exception\n'
'handler can find out what happened and continue execution at '
'an outer\n'
@@ -4394,7 +3678,7 @@ topics = {'assert': 'The "assert" statement\n'
'terminates\n'
'execution of the program, or returns to its interactive main '
'loop. In\n'
- 'either case, it prints a stack traceback, except when the '
+ 'either case, it prints a stack backtrace, except when the '
'exception is\n'
'"SystemExit".\n'
'\n'
@@ -4408,7 +3692,15 @@ topics = {'assert': 'The "assert" statement\n'
'about the\n'
'exceptional condition.\n'
'\n'
- 'Note: Exception messages are not part of the Python API. '
+ 'Exceptions can also be identified by strings, in which case '
+ 'the\n'
+ '"except" clause is selected by object identity. An arbitrary '
+ 'value\n'
+ 'can be raised along with the identifying string which can be '
+ 'passed to\n'
+ 'the handler.\n'
+ '\n'
+ 'Note: Messages to exceptions are not part of the Python API. '
'Their\n'
' contents may change from one version of Python to the next '
'without\n'
@@ -4428,54 +3720,171 @@ topics = {'assert': 'The "assert" statement\n'
' these operations is not available at the time the module '
'is\n'
' compiled.\n',
- 'execmodel': 'Execution model\n'
+ 'exec': '\n'
+ 'The "exec" statement\n'
+ '********************\n'
+ '\n'
+ ' exec_stmt ::= "exec" or_expr ["in" expression ["," expression]]\n'
+ '\n'
+ 'This statement supports dynamic execution of Python code. The '
+ 'first\n'
+ 'expression should evaluate to either a Unicode string, a *Latin-1*\n'
+ 'encoded string, an open file object, a code object, or a tuple. If '
+ 'it\n'
+ 'is a string, the string is parsed as a suite of Python statements\n'
+ 'which is then executed (unless a syntax error occurs). [1] If it is '
+ 'an\n'
+ 'open file, the file is parsed until EOF and executed. If it is a '
+ 'code\n'
+ 'object, it is simply executed. For the interpretation of a tuple, '
+ 'see\n'
+ "below. In all cases, the code that's executed is expected to be "
+ 'valid\n'
+ 'as file input (see section File input). Be aware that the "return"\n'
+ 'and "yield" statements may not be used outside of function '
+ 'definitions\n'
+ 'even within the context of code passed to the "exec" statement.\n'
+ '\n'
+ 'In all cases, if the optional parts are omitted, the code is '
+ 'executed\n'
+ 'in the current scope. If only the first expression after "in" is\n'
+ 'specified, it should be a dictionary, which will be used for both '
+ 'the\n'
+ 'global and the local variables. If two expressions are given, they\n'
+ 'are used for the global and local variables, respectively. If\n'
+ 'provided, *locals* can be any mapping object. Remember that at '
+ 'module\n'
+ 'level, globals and locals are the same dictionary. If two separate\n'
+ 'objects are given as *globals* and *locals*, the code will be '
+ 'executed\n'
+ 'as if it were embedded in a class definition.\n'
+ '\n'
+ 'The first expression may also be a tuple of length 2 or 3. In this\n'
+ 'case, the optional parts must be omitted. The form "exec(expr,\n'
+ 'globals)" is equivalent to "exec expr in globals", while the form\n'
+ '"exec(expr, globals, locals)" is equivalent to "exec expr in '
+ 'globals,\n'
+ 'locals". The tuple form of "exec" provides compatibility with '
+ 'Python\n'
+ '3, where "exec" is a function rather than a statement.\n'
+ '\n'
+ 'Changed in version 2.4: Formerly, *locals* was required to be a\n'
+ 'dictionary.\n'
+ '\n'
+ 'As a side effect, an implementation may insert additional keys into\n'
+ 'the dictionaries given besides those corresponding to variable '
+ 'names\n'
+ 'set by the executed code. For example, the current implementation '
+ 'may\n'
+ 'add a reference to the dictionary of the built-in module '
+ '"__builtin__"\n'
+ 'under the key "__builtins__" (!).\n'
+ '\n'
+ "**Programmer's hints:** dynamic evaluation of expressions is "
+ 'supported\n'
+ 'by the built-in function "eval()". The built-in functions '
+ '"globals()"\n'
+ 'and "locals()" return the current global and local dictionary,\n'
+ 'respectively, which may be useful to pass around for use by "exec".\n'
+ '\n'
+ '-[ Footnotes ]-\n'
+ '\n'
+ '[1] Note that the parser only accepts the Unix-style end of line\n'
+ ' convention. If you are reading the code from a file, make sure '
+ 'to\n'
+ ' use *universal newlines* mode to convert Windows or Mac-style\n'
+ ' newlines.\n',
+ 'execmodel': '\n'
+ 'Execution model\n'
'***************\n'
'\n'
'\n'
- 'Structure of a program\n'
- '======================\n'
+ 'Naming and binding\n'
+ '==================\n'
'\n'
- 'A Python program is constructed from code blocks. A *block* is '
- 'a piece\n'
- 'of Python program text that is executed as a unit. The '
- 'following are\n'
- 'blocks: a module, a function body, and a class definition. '
- 'Each\n'
- 'command typed interactively is a block. A script file (a file '
- 'given\n'
- 'as standard input to the interpreter or specified as a command '
- 'line\n'
- 'argument to the interpreter) is a code block. A script command '
- '(a\n'
- 'command specified on the interpreter command line with the '
- '"-c"\n'
- 'option) is a code block. A module run as a top level script (as '
- 'module\n'
- '"__main__") from the command line using a "-m" argument is also '
- 'a code\n'
- 'block. The string argument passed to the built-in functions '
- '"eval()"\n'
- 'and "exec()" is a code block.\n'
+ '*Names* refer to objects. Names are introduced by name '
+ 'binding\n'
+ 'operations. Each occurrence of a name in the program text '
+ 'refers to\n'
+ 'the *binding* of that name established in the innermost '
+ 'function block\n'
+ 'containing the use.\n'
+ '\n'
+ 'A *block* is a piece of Python program text that is executed as '
+ 'a\n'
+ 'unit. The following are blocks: a module, a function body, and '
+ 'a class\n'
+ 'definition. Each command typed interactively is a block. A '
+ 'script\n'
+ 'file (a file given as standard input to the interpreter or '
+ 'specified\n'
+ 'on the interpreter command line the first argument) is a code '
+ 'block.\n'
+ 'A script command (a command specified on the interpreter '
+ 'command line\n'
+ "with the '**-c**' option) is a code block. The file read by "
+ 'the\n'
+ 'built-in function "execfile()" is a code block. The string '
+ 'argument\n'
+ 'passed to the built-in function "eval()" and to the "exec" '
+ 'statement\n'
+ 'is a code block. The expression read and evaluated by the '
+ 'built-in\n'
+ 'function "input()" is a code block.\n'
'\n'
'A code block is executed in an *execution frame*. A frame '
'contains\n'
'some administrative information (used for debugging) and '
'determines\n'
- 'where and how execution continues after the code block’s '
+ "where and how execution continues after the code block's "
'execution has\n'
'completed.\n'
'\n'
+ 'A *scope* defines the visibility of a name within a block. If '
+ 'a local\n'
+ 'variable is defined in a block, its scope includes that block. '
+ 'If the\n'
+ 'definition occurs in a function block, the scope extends to any '
+ 'blocks\n'
+ 'contained within the defining one, unless a contained block '
+ 'introduces\n'
+ 'a different binding for the name. The scope of names defined '
+ 'in a\n'
+ 'class block is limited to the class block; it does not extend '
+ 'to the\n'
+ 'code blocks of methods -- this includes generator expressions '
+ 'since\n'
+ 'they are implemented using a function scope. This means that '
+ 'the\n'
+ 'following will fail:\n'
'\n'
- 'Naming and binding\n'
- '==================\n'
+ ' class A:\n'
+ ' a = 42\n'
+ ' b = list(a + i for i in range(10))\n'
'\n'
+ 'When a name is used in a code block, it is resolved using the '
+ 'nearest\n'
+ 'enclosing scope. The set of all such scopes visible to a code '
+ 'block\n'
+ "is called the block's *environment*.\n"
'\n'
- 'Binding of names\n'
- '----------------\n'
+ 'If a name is bound in a block, it is a local variable of that '
+ 'block.\n'
+ 'If a name is bound at the module level, it is a global '
+ 'variable. (The\n'
+ 'variables of the module code block are local and global.) If '
+ 'a\n'
+ 'variable is used in a code block but not defined there, it is a '
+ '*free\n'
+ 'variable*.\n'
'\n'
- '*Names* refer to objects. Names are introduced by name '
- 'binding\n'
- 'operations.\n'
+ 'When a name is not found at all, a "NameError" exception is '
+ 'raised.\n'
+ 'If the name refers to a local variable that has not been bound, '
+ 'a\n'
+ '"UnboundLocalError" exception is raised. "UnboundLocalError" '
+ 'is a\n'
+ 'subclass of "NameError".\n'
'\n'
'The following constructs bind names: formal parameters to '
'functions,\n'
@@ -4484,18 +3893,23 @@ topics = {'assert': 'The "assert" statement\n'
'class or function name in the defining block), and targets that '
'are\n'
'identifiers if occurring in an assignment, "for" loop header, '
- 'or after\n'
- '"as" in a "with" statement or "except" clause. The "import" '
- 'statement\n'
- 'of the form "from ... import *" binds all names defined in the\n'
- 'imported module, except those beginning with an underscore. '
- 'This form\n'
- 'may only be used at the module level.\n'
+ 'in the\n'
+ 'second position of an "except" clause header or after "as" in a '
+ '"with"\n'
+ 'statement. The "import" statement of the form "from ... import '
+ '*"\n'
+ 'binds all names defined in the imported module, except those '
+ 'beginning\n'
+ 'with an underscore. This form may only be used at the module '
+ 'level.\n'
'\n'
'A target occurring in a "del" statement is also considered '
'bound for\n'
'this purpose (though the actual semantics are to unbind the '
- 'name).\n'
+ 'name). It\n'
+ 'is illegal to unbind a name that is referenced by an enclosing '
+ 'scope;\n'
+ 'the compiler will report a "SyntaxError".\n'
'\n'
'Each assignment or import statement occurs within a block '
'defined by a\n'
@@ -4503,57 +3917,13 @@ topics = {'assert': 'The "assert" statement\n'
'top-level\n'
'code block).\n'
'\n'
- 'If a name is bound in a block, it is a local variable of that '
- 'block,\n'
- 'unless declared as "nonlocal" or "global". If a name is bound '
- 'at the\n'
- 'module level, it is a global variable. (The variables of the '
- 'module\n'
- 'code block are local and global.) If a variable is used in a '
- 'code\n'
- 'block but not defined there, it is a *free variable*.\n'
- '\n'
- 'Each occurrence of a name in the program text refers to the '
- '*binding*\n'
- 'of that name established by the following name resolution '
- 'rules.\n'
- '\n'
- '\n'
- 'Resolution of names\n'
- '-------------------\n'
- '\n'
- 'A *scope* defines the visibility of a name within a block. If '
- 'a local\n'
- 'variable is defined in a block, its scope includes that block. '
- 'If the\n'
- 'definition occurs in a function block, the scope extends to any '
- 'blocks\n'
- 'contained within the defining one, unless a contained block '
- 'introduces\n'
- 'a different binding for the name.\n'
- '\n'
- 'When a name is used in a code block, it is resolved using the '
- 'nearest\n'
- 'enclosing scope. The set of all such scopes visible to a code '
- 'block\n'
- 'is called the block’s *environment*.\n'
- '\n'
- 'When a name is not found at all, a "NameError" exception is '
- 'raised. If\n'
- 'the current scope is a function scope, and the name refers to a '
- 'local\n'
- 'variable that has not yet been bound to a value at the point '
- 'where the\n'
- 'name is used, an "UnboundLocalError" exception is raised.\n'
- '"UnboundLocalError" is a subclass of "NameError".\n'
- '\n'
'If a name binding operation occurs anywhere within a code '
'block, all\n'
'uses of the name within the block are treated as references to '
'the\n'
'current block. This can lead to errors when a name is used '
'within a\n'
- 'block before it is bound. This rule is subtle. Python lacks\n'
+ 'block before it is bound. This rule is subtle. Python lacks\n'
'declarations and allows name binding operations to occur '
'anywhere\n'
'within a code block. The local variables of a code block can '
@@ -4562,36 +3932,47 @@ topics = {'assert': 'The "assert" statement\n'
'binding\n'
'operations.\n'
'\n'
- 'If the "global" statement occurs within a block, all uses of '
- 'the name\n'
+ 'If the global statement occurs within a block, all uses of the '
+ 'name\n'
'specified in the statement refer to the binding of that name in '
'the\n'
- 'top-level namespace. Names are resolved in the top-level '
+ 'top-level namespace. Names are resolved in the top-level '
'namespace by\n'
'searching the global namespace, i.e. the namespace of the '
'module\n'
'containing the code block, and the builtins namespace, the '
'namespace\n'
- 'of the module "builtins". The global namespace is searched '
- 'first. If\n'
- 'the name is not found there, the builtins namespace is '
- 'searched. The\n'
- '"global" statement must precede all uses of the name.\n'
+ 'of the module "__builtin__". The global namespace is searched '
+ 'first.\n'
+ 'If the name is not found there, the builtins namespace is '
+ 'searched.\n'
+ 'The global statement must precede all uses of the name.\n'
'\n'
- 'The "global" statement has the same scope as a name binding '
- 'operation\n'
- 'in the same block. If the nearest enclosing scope for a free '
- 'variable\n'
- 'contains a global statement, the free variable is treated as a '
- 'global.\n'
+ 'The builtins namespace associated with the execution of a code '
+ 'block\n'
+ 'is actually found by looking up the name "__builtins__" in its '
+ 'global\n'
+ 'namespace; this should be a dictionary or a module (in the '
+ 'latter case\n'
+ "the module's dictionary is used). By default, when in the "
+ '"__main__"\n'
+ 'module, "__builtins__" is the built-in module "__builtin__" '
+ '(note: no\n'
+ '\'s\'); when in any other module, "__builtins__" is an alias '
+ 'for the\n'
+ 'dictionary of the "__builtin__" module itself. "__builtins__" '
+ 'can be\n'
+ 'set to a user-created dictionary to create a weak form of '
+ 'restricted\n'
+ 'execution.\n'
'\n'
- 'The "nonlocal" statement causes corresponding names to refer '
- 'to\n'
- 'previously bound variables in the nearest enclosing function '
- 'scope.\n'
- '"SyntaxError" is raised at compile time if the given name does '
- 'not\n'
- 'exist in any enclosing function scope.\n'
+ '**CPython implementation detail:** Users should not touch\n'
+ '"__builtins__"; it is strictly an implementation detail. '
+ 'Users\n'
+ 'wanting to override values in the builtins namespace should '
+ '"import"\n'
+ 'the "__builtin__" (no \'s\') module and modify its attributes\n'
+ 'appropriately.\n'
'\n'
'The namespace for a module is automatically created the first '
'time a\n'
@@ -4599,80 +3980,62 @@ topics = {'assert': 'The "assert" statement\n'
'called\n'
'"__main__".\n'
'\n'
- 'Class definition blocks and arguments to "exec()" and "eval()" '
- 'are\n'
- 'special in the context of name resolution. A class definition '
- 'is an\n'
- 'executable statement that may use and define names. These '
- 'references\n'
- 'follow the normal rules for name resolution with an exception '
- 'that\n'
- 'unbound local variables are looked up in the global namespace. '
- 'The\n'
- 'namespace of the class definition becomes the attribute '
- 'dictionary of\n'
- 'the class. The scope of names defined in a class block is '
- 'limited to\n'
- 'the class block; it does not extend to the code blocks of '
- 'methods –\n'
- 'this includes comprehensions and generator expressions since '
- 'they are\n'
- 'implemented using a function scope. This means that the '
- 'following\n'
- 'will fail:\n'
+ 'The "global" statement has the same scope as a name binding '
+ 'operation\n'
+ 'in the same block. If the nearest enclosing scope for a free '
+ 'variable\n'
+ 'contains a global statement, the free variable is treated as a '
+ 'global.\n'
'\n'
- ' class A:\n'
- ' a = 42\n'
- ' b = list(a + i for i in range(10))\n'
+ 'A class definition is an executable statement that may use and '
+ 'define\n'
+ 'names. These references follow the normal rules for name '
+ 'resolution.\n'
+ 'The namespace of the class definition becomes the attribute '
+ 'dictionary\n'
+ 'of the class. Names defined at the class scope are not visible '
+ 'in\n'
+ 'methods.\n'
'\n'
'\n'
- 'Builtins and restricted execution\n'
+ 'Interaction with dynamic features\n'
'---------------------------------\n'
'\n'
- '**CPython implementation detail:** Users should not touch\n'
- '"__builtins__"; it is strictly an implementation detail. '
- 'Users\n'
- 'wanting to override values in the builtins namespace should '
- '"import"\n'
- 'the "builtins" module and modify its attributes appropriately.\n'
- '\n'
- 'The builtins namespace associated with the execution of a code '
- 'block\n'
- 'is actually found by looking up the name "__builtins__" in its '
- 'global\n'
- 'namespace; this should be a dictionary or a module (in the '
- 'latter case\n'
- 'the module’s dictionary is used). By default, when in the '
- '"__main__"\n'
- 'module, "__builtins__" is the built-in module "builtins"; when '
- 'in any\n'
- 'other module, "__builtins__" is an alias for the dictionary of '
- 'the\n'
- '"builtins" module itself.\n'
- '\n'
+ 'There are several cases where Python statements are illegal '
+ 'when used\n'
+ 'in conjunction with nested scopes that contain free variables.\n'
'\n'
- 'Interaction with dynamic features\n'
- '---------------------------------\n'
+ 'If a variable is referenced in an enclosing scope, it is '
+ 'illegal to\n'
+ 'delete the name. An error will be reported at compile time.\n'
'\n'
- 'Name resolution of free variables occurs at runtime, not at '
- 'compile\n'
- 'time. This means that the following code will print 42:\n'
+ 'If the wild card form of import --- "import *" --- is used in '
+ 'a\n'
+ 'function and the function contains or is a nested block with '
+ 'free\n'
+ 'variables, the compiler will raise a "SyntaxError".\n'
'\n'
- ' i = 10\n'
- ' def f():\n'
- ' print(i)\n'
- ' i = 42\n'
- ' f()\n'
+ 'If "exec" is used in a function and the function contains or is '
+ 'a\n'
+ 'nested block with free variables, the compiler will raise a\n'
+ '"SyntaxError" unless the exec explicitly specifies the local '
+ 'namespace\n'
+ 'for the "exec". (In other words, "exec obj" would be illegal, '
+ 'but\n'
+ '"exec obj in ns" would be legal.)\n'
'\n'
- 'The "eval()" and "exec()" functions do not have access to the '
- 'full\n'
- 'environment for resolving names. Names may be resolved in the '
- 'local\n'
- 'and global namespaces of the caller. Free variables are not '
- 'resolved\n'
- 'in the nearest enclosing namespace, but in the global '
- 'namespace. [1]\n'
- 'The "exec()" and "eval()" functions have optional arguments to\n'
+ 'The "eval()", "execfile()", and "input()" functions and the '
+ '"exec"\n'
+ 'statement do not have access to the full environment for '
+ 'resolving\n'
+ 'names. Names may be resolved in the local and global '
+ 'namespaces of\n'
+ 'the caller. Free variables are not resolved in the nearest '
+ 'enclosing\n'
+ 'namespace, but in the global namespace. [1] The "exec" '
+ 'statement and\n'
+ 'the "eval()" and "execfile()" functions have optional arguments '
+ 'to\n'
'override the global and local namespace. If only one namespace '
'is\n'
'specified, it is used for both.\n'
@@ -4697,7 +4060,7 @@ topics = {'assert': 'The "assert" statement\n'
'error (such as division by zero). A Python program can also\n'
'explicitly raise an exception with the "raise" statement. '
'Exception\n'
- 'handlers are specified with the "try" … "except" statement. '
+ 'handlers are specified with the "try" ... "except" statement. '
'The\n'
'"finally" clause of such a statement can be used to specify '
'cleanup\n'
@@ -4705,7 +4068,7 @@ topics = {'assert': 'The "assert" statement\n'
'whether an\n'
'exception occurred or not in the preceding code.\n'
'\n'
- 'Python uses the “termination” model of error handling: an '
+ 'Python uses the "termination" model of error handling: an '
'exception\n'
'handler can find out what happened and continue execution at an '
'outer\n'
@@ -4719,7 +4082,7 @@ topics = {'assert': 'The "assert" statement\n'
'terminates\n'
'execution of the program, or returns to its interactive main '
'loop. In\n'
- 'either case, it prints a stack traceback, except when the '
+ 'either case, it prints a stack backtrace, except when the '
'exception is\n'
'"SystemExit".\n'
'\n'
@@ -4733,7 +4096,15 @@ topics = {'assert': 'The "assert" statement\n'
'about the\n'
'exceptional condition.\n'
'\n'
- 'Note: Exception messages are not part of the Python API. '
+ 'Exceptions can also be identified by strings, in which case '
+ 'the\n'
+ '"except" clause is selected by object identity. An arbitrary '
+ 'value\n'
+ 'can be raised along with the identifying string which can be '
+ 'passed to\n'
+ 'the handler.\n'
+ '\n'
+ 'Note: Messages to exceptions are not part of the Python API. '
'Their\n'
' contents may change from one version of Python to the next '
'without\n'
@@ -4753,74 +4124,59 @@ topics = {'assert': 'The "assert" statement\n'
' these operations is not available at the time the module '
'is\n'
' compiled.\n',
- 'exprlists': 'Expression lists\n'
+ 'exprlists': '\n'
+ 'Expression lists\n'
'****************\n'
'\n'
- ' expression_list ::= expression ("," expression)* [","]\n'
- ' starred_list ::= starred_item ("," starred_item)* '
- '[","]\n'
- ' starred_expression ::= expression | (starred_item ",")* '
- '[starred_item]\n'
- ' starred_item ::= expression | "*" or_expr\n'
- '\n'
- 'Except when part of a list or set display, an expression list\n'
- 'containing at least one comma yields a tuple. The length of '
- 'the tuple\n'
- 'is the number of expressions in the list. The expressions are\n'
- 'evaluated from left to right.\n'
+ ' expression_list ::= expression ( "," expression )* [","]\n'
'\n'
- 'An asterisk "*" denotes *iterable unpacking*. Its operand must '
- 'be an\n'
- '*iterable*. The iterable is expanded into a sequence of items, '
- 'which\n'
- 'are included in the new tuple, list, or set, at the site of '
- 'the\n'
- 'unpacking.\n'
- '\n'
- 'New in version 3.5: Iterable unpacking in expression lists, '
- 'originally\n'
- 'proposed by **PEP 448**.\n'
+ 'An expression list containing at least one comma yields a '
+ 'tuple. The\n'
+ 'length of the tuple is the number of expressions in the list. '
+ 'The\n'
+ 'expressions are evaluated from left to right.\n'
'\n'
'The trailing comma is required only to create a single tuple '
'(a.k.a. a\n'
'*singleton*); it is optional in all other cases. A single '
'expression\n'
- 'without a trailing comma doesn’t create a tuple, but rather '
+ "without a trailing comma doesn't create a tuple, but rather "
'yields the\n'
'value of that expression. (To create an empty tuple, use an '
'empty pair\n'
'of parentheses: "()".)\n',
- 'floating': 'Floating point literals\n'
+ 'floating': '\n'
+ 'Floating point literals\n'
'***********************\n'
'\n'
'Floating point literals are described by the following lexical\n'
'definitions:\n'
'\n'
' floatnumber ::= pointfloat | exponentfloat\n'
- ' pointfloat ::= [digitpart] fraction | digitpart "."\n'
- ' exponentfloat ::= (digitpart | pointfloat) exponent\n'
- ' digitpart ::= digit (["_"] digit)*\n'
- ' fraction ::= "." digitpart\n'
- ' exponent ::= ("e" | "E") ["+" | "-"] digitpart\n'
- '\n'
- 'Note that the integer and exponent parts are always interpreted '
- 'using\n'
- 'radix 10. For example, "077e010" is legal, and denotes the same '
- 'number\n'
- 'as "77e10". The allowed range of floating point literals is\n'
- 'implementation-dependent. As in integer literals, underscores '
- 'are\n'
- 'supported for digit grouping.\n'
- '\n'
- 'Some examples of floating point literals:\n'
- '\n'
- ' 3.14 10. .001 1e100 3.14e-10 0e0 '
- '3.14_15_93\n'
- '\n'
- 'Changed in version 3.6: Underscores are now allowed for '
- 'grouping\n'
- 'purposes in literals.\n',
- 'for': 'The "for" statement\n'
+ ' pointfloat ::= [intpart] fraction | intpart "."\n'
+ ' exponentfloat ::= (intpart | pointfloat) exponent\n'
+ ' intpart ::= digit+\n'
+ ' fraction ::= "." digit+\n'
+ ' exponent ::= ("e" | "E") ["+" | "-"] digit+\n'
+ '\n'
+ 'Note that the integer and exponent parts of floating point '
+ 'numbers can\n'
+ 'look like octal integers, but are interpreted using radix 10. '
+ 'For\n'
+ 'example, "077e010" is legal, and denotes the same number as '
+ '"77e10".\n'
+ 'The allowed range of floating point literals is implementation-\n'
+ 'dependent. Some examples of floating point literals:\n'
+ '\n'
+ ' 3.14 10. .001 1e100 3.14e-10 0e0\n'
+ '\n'
+ 'Note that numeric literals do not include a sign; a phrase like '
+ '"-1"\n'
+ 'is actually an expression composed of the unary operator "-" and '
+ 'the\n'
+ 'literal "1".\n',
+ 'for': '\n'
+ 'The "for" statement\n'
'*******************\n'
'\n'
'The "for" statement is used to iterate over the elements of a '
@@ -4833,46 +4189,35 @@ topics = {'assert': 'The "assert" statement\n'
'The expression list is evaluated once; it should yield an iterable\n'
'object. An iterator is created for the result of the\n'
'"expression_list". The suite is then executed once for each item\n'
- 'provided by the iterator, in the order returned by the iterator. '
- 'Each\n'
+ 'provided by the iterator, in the order of ascending indices. Each\n'
'item in turn is assigned to the target list using the standard rules\n'
- 'for assignments (see Assignment statements), and then the suite is\n'
- 'executed. When the items are exhausted (which is immediately when '
- 'the\n'
- 'sequence is empty or an iterator raises a "StopIteration" '
- 'exception),\n'
- 'the suite in the "else" clause, if present, is executed, and the '
- 'loop\n'
+ 'for assignments, and then the suite is executed. When the items are\n'
+ 'exhausted (which is immediately when the sequence is empty), the '
+ 'suite\n'
+ 'in the "else" clause, if present, is executed, and the loop\n'
'terminates.\n'
'\n'
'A "break" statement executed in the first suite terminates the loop\n'
- 'without executing the "else" clause’s suite. A "continue" statement\n'
+ 'without executing the "else" clause\'s suite. A "continue" '
+ 'statement\n'
'executed in the first suite skips the rest of the suite and '
'continues\n'
- 'with the next item, or with the "else" clause if there is no next\n'
+ 'with the next item, or with the "else" clause if there was no next\n'
'item.\n'
'\n'
- 'The for-loop makes assignments to the variables in the target list.\n'
- 'This overwrites all previous assignments to those variables '
- 'including\n'
- 'those made in the suite of the for-loop:\n'
- '\n'
- ' for i in range(10):\n'
- ' print(i)\n'
- ' i = 5 # this will not affect the for-loop\n'
- ' # because i will be overwritten with the '
- 'next\n'
- ' # index in the range\n'
+ 'The suite may assign to the variable(s) in the target list; this '
+ 'does\n'
+ 'not affect the next item assigned to it.\n'
'\n'
- 'Names in the target list are not deleted when the loop is finished,\n'
- 'but if the sequence is empty, they will not have been assigned to at\n'
- 'all by the loop. Hint: the built-in function "range()" returns an\n'
- 'iterator of integers suitable to emulate the effect of Pascal’s "for '
- 'i\n'
- ':= a to b do"; e.g., "list(range(3))" returns the list "[0, 1, 2]".\n'
+ 'The target list is not deleted when the loop is finished, but if the\n'
+ 'sequence is empty, it will not have been assigned to at all by the\n'
+ 'loop. Hint: the built-in function "range()" returns a sequence of\n'
+ 'integers suitable to emulate the effect of Pascal\'s "for i := a to '
+ 'b\n'
+ 'do"; e.g., "range(3)" returns the list "[0, 1, 2]".\n'
'\n'
'Note: There is a subtlety when the sequence is being modified by the\n'
- ' loop (this can only occur for mutable sequences, e.g. lists). An\n'
+ ' loop (this can only occur for mutable sequences, i.e. lists). An\n'
' internal counter is used to keep track of which item is used next,\n'
' and this is incremented on each iteration. When this counter has\n'
' reached the length of the sequence the loop terminates. This '
@@ -4890,20 +4235,17 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
' for x in a[:]:\n'
' if x < 0: a.remove(x)\n',
- 'formatstrings': 'Format String Syntax\n'
+ 'formatstrings': '\n'
+ 'Format String Syntax\n'
'********************\n'
'\n'
'The "str.format()" method and the "Formatter" class share '
'the same\n'
'syntax for format strings (although in the case of '
'"Formatter",\n'
- 'subclasses can define their own format string syntax). The '
- 'syntax is\n'
- 'related to that of formatted string literals, but there '
- 'are\n'
- 'differences.\n'
+ 'subclasses can define their own format string syntax).\n'
'\n'
- 'Format strings contain “replacement fields” surrounded by '
+ 'Format strings contain "replacement fields" surrounded by '
'curly braces\n'
'"{}". Anything that is not contained in braces is '
'considered literal\n'
@@ -4919,12 +4261,12 @@ topics = {'assert': 'The "assert" statement\n'
'conversion] [":" format_spec] "}"\n'
' field_name ::= arg_name ("." attribute_name | '
'"[" element_index "]")*\n'
- ' arg_name ::= [identifier | digit+]\n'
+ ' arg_name ::= [identifier | integer]\n'
' attribute_name ::= identifier\n'
- ' element_index ::= digit+ | index_string\n'
+ ' element_index ::= integer | index_string\n'
' index_string ::= <any source character except '
'"]"> +\n'
- ' conversion ::= "r" | "s" | "a"\n'
+ ' conversion ::= "r" | "s"\n'
' format_spec ::= <described in the next '
'section>\n'
'\n'
@@ -4946,37 +4288,33 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
'The *field_name* itself begins with an *arg_name* that is '
'either a\n'
- 'number or a keyword. If it’s a number, it refers to a '
+ "number or a keyword. If it's a number, it refers to a "
'positional\n'
- 'argument, and if it’s a keyword, it refers to a named '
+ "argument, and if it's a keyword, it refers to a named "
'keyword\n'
'argument. If the numerical arg_names in a format string '
'are 0, 1, 2,\n'
- '… in sequence, they can all be omitted (not just some) and '
- 'the numbers\n'
- '0, 1, 2, … will be automatically inserted in that order. '
- 'Because\n'
- '*arg_name* is not quote-delimited, it is not possible to '
- 'specify\n'
- 'arbitrary dictionary keys (e.g., the strings "\'10\'" or '
- '"\':-]\'") within\n'
- 'a format string. The *arg_name* can be followed by any '
- 'number of index\n'
- 'or attribute expressions. An expression of the form '
- '"\'.name\'" selects\n'
- 'the named attribute using "getattr()", while an expression '
- 'of the form\n'
- '"\'[index]\'" does an index lookup using "__getitem__()".\n'
- '\n'
- 'Changed in version 3.1: The positional argument specifiers '
- 'can be\n'
- 'omitted for "str.format()", so "\'{} {}\'.format(a, b)" is '
- 'equivalent to\n'
- '"\'{0} {1}\'.format(a, b)".\n'
+ '... in sequence, they can all be omitted (not just some) '
+ 'and the\n'
+ 'numbers 0, 1, 2, ... will be automatically inserted in that '
+ 'order.\n'
+ 'Because *arg_name* is not quote-delimited, it is not '
+ 'possible to\n'
+ 'specify arbitrary dictionary keys (e.g., the strings '
+ '"\'10\'" or\n'
+ '"\':-]\'") within a format string. The *arg_name* can be '
+ 'followed by any\n'
+ 'number of index or attribute expressions. An expression of '
+ 'the form\n'
+ '"\'.name\'" selects the named attribute using "getattr()", '
+ 'while an\n'
+ 'expression of the form "\'[index]\'" does an index lookup '
+ 'using\n'
+ '"__getitem__()".\n'
'\n'
- 'Changed in version 3.4: The positional argument specifiers '
+ 'Changed in version 2.7: The positional argument specifiers '
'can be\n'
- 'omitted for "Formatter".\n'
+ 'omitted, so "\'{} {}\'" is equivalent to "\'{0} {1}\'".\n'
'\n'
'Some simple format string examples:\n'
'\n'
@@ -5006,11 +4344,9 @@ topics = {'assert': 'The "assert" statement\n'
'calling "__format__()", the normal formatting logic is '
'bypassed.\n'
'\n'
- 'Three conversion flags are currently supported: "\'!s\'" '
+ 'Two conversion flags are currently supported: "\'!s\'" '
'which calls\n'
- '"str()" on the value, "\'!r\'" which calls "repr()" and '
- '"\'!a\'" which\n'
- 'calls "ascii()".\n'
+ '"str()" on the value, and "\'!r\'" which calls "repr()".\n'
'\n'
'Some examples:\n'
'\n'
@@ -5018,8 +4354,6 @@ topics = {'assert': 'The "assert" statement\n'
'argument first\n'
' "Bring out the holy {name!r}" # Calls repr() on the '
'argument first\n'
- ' "More {!a}" # Calls ascii() on the '
- 'argument first\n'
'\n'
'The *format_spec* field contains a specification of how the '
'value\n'
@@ -5027,7 +4361,7 @@ topics = {'assert': 'The "assert" statement\n'
'alignment,\n'
'padding, decimal precision and so on. Each value type can '
'define its\n'
- 'own “formatting mini-language” or interpretation of the '
+ 'own "formatting mini-language" or interpretation of the '
'*format_spec*.\n'
'\n'
'Most built-in types support a common formatting '
@@ -5053,17 +4387,15 @@ topics = {'assert': 'The "assert" statement\n'
'Format Specification Mini-Language\n'
'==================================\n'
'\n'
- '“Format specifications” are used within replacement fields '
+ '"Format specifications" are used within replacement fields '
'contained\n'
'within a format string to define how individual values are '
'presented\n'
- '(see Format String Syntax and Formatted string literals). '
- 'They can\n'
- 'also be passed directly to the built-in "format()" '
- 'function. Each\n'
- 'formattable type may define how the format specification is '
- 'to be\n'
- 'interpreted.\n'
+ '(see Format String Syntax). They can also be passed '
+ 'directly to the\n'
+ 'built-in "format()" function. Each formattable type may '
+ 'define how\n'
+ 'the format specification is to be interpreted.\n'
'\n'
'Most built-in types implement the following options for '
'format\n'
@@ -5079,30 +4411,29 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
'The general form of a *standard format specifier* is:\n'
'\n'
- ' format_spec ::= '
- '[[fill]align][sign][#][0][width][grouping_option][.precision][type]\n'
- ' fill ::= <any character>\n'
- ' align ::= "<" | ">" | "=" | "^"\n'
- ' sign ::= "+" | "-" | " "\n'
- ' width ::= digit+\n'
- ' grouping_option ::= "_" | ","\n'
- ' precision ::= digit+\n'
- ' type ::= "b" | "c" | "d" | "e" | "E" | "f" | '
- '"F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"\n'
+ ' format_spec ::= '
+ '[[fill]align][sign][#][0][width][,][.precision][type]\n'
+ ' fill ::= <any character>\n'
+ ' align ::= "<" | ">" | "=" | "^"\n'
+ ' sign ::= "+" | "-" | " "\n'
+ ' width ::= integer\n'
+ ' precision ::= integer\n'
+ ' type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" '
+ '| "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"\n'
'\n'
'If a valid *align* value is specified, it can be preceded '
'by a *fill*\n'
'character that can be any character and defaults to a space '
'if\n'
'omitted. It is not possible to use a literal curly brace '
- '(“"{"” or\n'
- '“"}"”) as the *fill* character in a formatted string '
- 'literal or when\n'
- 'using the "str.format()" method. However, it is possible '
- 'to insert a\n'
- 'curly brace with a nested replacement field. This '
- 'limitation doesn’t\n'
- 'affect the "format()" function.\n'
+ '(""{"" or\n'
+ '""}"") as the *fill* character when using the '
+ '"str.format()" method.\n'
+ 'However, it is possible to insert a curly brace with a '
+ 'nested\n'
+ "replacement field. This limitation doesn't affect the "
+ '"format()"\n'
+ 'function.\n'
'\n'
'The meaning of the various alignment options is as '
'follows:\n'
@@ -5113,7 +4444,7 @@ topics = {'assert': 'The "assert" statement\n'
'Meaning '
'|\n'
' '
- '|===========|============================================================|\n'
+ '+===========+============================================================+\n'
' | "\'<\'" | Forces the field to be left-aligned '
'within the available |\n'
' | | space (this is the default for most '
@@ -5130,10 +4461,10 @@ topics = {'assert': 'The "assert" statement\n'
'the sign (if any) |\n'
' | | but before the digits. This is used for '
'printing fields |\n'
- ' | | in the form ‘+000000120’. This alignment '
+ " | | in the form '+000000120'. This alignment "
'option is only |\n'
' | | valid for numeric types. It becomes the '
- 'default when ‘0’ |\n'
+ "default when '0' |\n"
' | | immediately precedes the field '
'width. |\n'
' '
@@ -5162,7 +4493,7 @@ topics = {'assert': 'The "assert" statement\n'
'Meaning '
'|\n'
' '
- '|===========|============================================================|\n'
+ '+===========+============================================================+\n'
' | "\'+\'" | indicates that a sign should be used for '
'both positive as |\n'
' | | well as negative '
@@ -5182,28 +4513,12 @@ topics = {'assert': 'The "assert" statement\n'
' '
'+-----------+------------------------------------------------------------+\n'
'\n'
- 'The "\'#\'" option causes the “alternate form” to be used '
- 'for the\n'
- 'conversion. The alternate form is defined differently for '
- 'different\n'
- 'types. This option is only valid for integer, float, '
- 'complex and\n'
- 'Decimal types. For integers, when binary, octal, or '
- 'hexadecimal output\n'
- 'is used, this option adds the prefix respective "\'0b\'", '
- '"\'0o\'", or\n'
- '"\'0x\'" to the output value. For floats, complex and '
- 'Decimal the\n'
- 'alternate form causes the result of the conversion to '
- 'always contain a\n'
- 'decimal-point character, even if no digits follow it. '
- 'Normally, a\n'
- 'decimal-point character appears in the result of these '
- 'conversions\n'
- 'only if a digit follows it. In addition, for "\'g\'" and '
- '"\'G\'"\n'
- 'conversions, trailing zeros are not removed from the '
- 'result.\n'
+ 'The "\'#\'" option is only valid for integers, and only for '
+ 'binary,\n'
+ 'octal, or hexadecimal output. If present, it specifies '
+ 'that the\n'
+ 'output will be prefixed by "\'0b\'", "\'0o\'", or "\'0x\'", '
+ 'respectively.\n'
'\n'
'The "\',\'" option signals the use of a comma for a '
'thousands separator.\n'
@@ -5211,23 +4526,9 @@ topics = {'assert': 'The "assert" statement\n'
'presentation type\n'
'instead.\n'
'\n'
- 'Changed in version 3.1: Added the "\',\'" option (see also '
+ 'Changed in version 2.7: Added the "\',\'" option (see also '
'**PEP 378**).\n'
'\n'
- 'The "\'_\'" option signals the use of an underscore for a '
- 'thousands\n'
- 'separator for floating point presentation types and for '
- 'integer\n'
- 'presentation type "\'d\'". For integer presentation types '
- '"\'b\'", "\'o\'",\n'
- '"\'x\'", and "\'X\'", underscores will be inserted every 4 '
- 'digits. For\n'
- 'other presentation types, specifying this option is an '
- 'error.\n'
- '\n'
- 'Changed in version 3.6: Added the "\'_\'" option (see also '
- '**PEP 515**).\n'
- '\n'
'*width* is a decimal integer defining the minimum field '
'width. If not\n'
'specified, then the field width will be determined by the '
@@ -5266,7 +4567,7 @@ topics = {'assert': 'The "assert" statement\n'
'Meaning '
'|\n'
' '
- '|===========|============================================================|\n'
+ '+===========+============================================================+\n'
' | "\'s\'" | String format. This is the default type '
'for strings and |\n'
' | | may be '
@@ -5286,7 +4587,7 @@ topics = {'assert': 'The "assert" statement\n'
'Meaning '
'|\n'
' '
- '|===========|============================================================|\n'
+ '+===========+============================================================+\n'
' | "\'b\'" | Binary format. Outputs the number in '
'base 2. |\n'
' '
@@ -5348,10 +4649,10 @@ topics = {'assert': 'The "assert" statement\n'
'Meaning '
'|\n'
' '
- '|===========|============================================================|\n'
+ '+===========+============================================================+\n'
' | "\'e\'" | Exponent notation. Prints the number in '
'scientific |\n'
- ' | | notation using the letter ‘e’ to indicate '
+ " | | notation using the letter 'e' to indicate "
'the exponent. |\n'
' | | The default precision is '
'"6". |\n'
@@ -5359,20 +4660,18 @@ topics = {'assert': 'The "assert" statement\n'
'+-----------+------------------------------------------------------------+\n'
' | "\'E\'" | Exponent notation. Same as "\'e\'" '
'except it uses an upper |\n'
- ' | | case ‘E’ as the separator '
+ " | | case 'E' as the separator "
'character. |\n'
' '
'+-----------+------------------------------------------------------------+\n'
- ' | "\'f\'" | Fixed-point notation. Displays the '
- 'number as a fixed-point |\n'
- ' | | number. The default precision is '
- '"6". |\n'
+ ' | "\'f\'" | Fixed point. Displays the number as a '
+ 'fixed-point number. |\n'
+ ' | | The default precision is '
+ '"6". |\n'
' '
'+-----------+------------------------------------------------------------+\n'
- ' | "\'F\'" | Fixed-point notation. Same as "\'f\'", '
- 'but converts "nan" to |\n'
- ' | | "NAN" and "inf" to '
- '"INF". |\n'
+ ' | "\'F\'" | Fixed point. Same as '
+ '"\'f\'". |\n'
' '
'+-----------+------------------------------------------------------------+\n'
' | "\'g\'" | General format. For a given precision '
@@ -5387,34 +4686,30 @@ topics = {'assert': 'The "assert" statement\n'
'the result |\n'
' | | formatted with presentation type "\'e\'" '
'and precision "p-1" |\n'
- ' | | would have exponent "exp". Then, if "m <= '
- 'exp < p", where |\n'
- ' | | "m" is -4 for floats and -6 for '
- '"Decimals", the number is |\n'
- ' | | formatted with presentation type "\'f\'" '
- 'and precision |\n'
- ' | | "p-1-exp". Otherwise, the number is '
- 'formatted with |\n'
- ' | | presentation type "\'e\'" and precision '
- '"p-1". In both cases |\n'
- ' | | insignificant trailing zeros are removed '
- 'from the |\n'
+ ' | | would have exponent "exp". Then if "-4 <= '
+ 'exp < p", the |\n'
+ ' | | number is formatted with presentation type '
+ '"\'f\'" and |\n'
+ ' | | precision "p-1-exp". Otherwise, the '
+ 'number is formatted |\n'
+ ' | | with presentation type "\'e\'" and '
+ 'precision "p-1". In both |\n'
+ ' | | cases insignificant trailing zeros are '
+ 'removed from the |\n'
' | | significand, and the decimal point is also '
'removed if |\n'
' | | there are no remaining digits following '
- 'it, unless the |\n'
- ' | | "\'#\'" option is used. Positive and '
- 'negative infinity, |\n'
- ' | | positive and negative zero, and nans, are '
- 'formatted as |\n'
- ' | | "inf", "-inf", "0", "-0" and "nan" '
- 'respectively, |\n'
- ' | | regardless of the precision. A precision '
- 'of "0" is |\n'
- ' | | treated as equivalent to a precision of '
- '"1". The default |\n'
- ' | | precision is '
- '"6". |\n'
+ 'it. Positive and |\n'
+ ' | | negative infinity, positive and negative '
+ 'zero, and nans, |\n'
+ ' | | are formatted as "inf", "-inf", "0", "-0" '
+ 'and "nan" |\n'
+ ' | | respectively, regardless of the '
+ 'precision. A precision of |\n'
+ ' | | "0" is treated as equivalent to a '
+ 'precision of "1". The |\n'
+ ' | | default precision is '
+ '"6". |\n'
' '
'+-----------+------------------------------------------------------------+\n'
' | "\'G\'" | General format. Same as "\'g\'" except '
@@ -5439,19 +4734,8 @@ topics = {'assert': 'The "assert" statement\n'
'percent sign. |\n'
' '
'+-----------+------------------------------------------------------------+\n'
- ' | None | Similar to "\'g\'", except that '
- 'fixed-point notation, when |\n'
- ' | | used, has at least one digit past the '
- 'decimal point. The |\n'
- ' | | default precision is as high as needed to '
- 'represent the |\n'
- ' | | particular value. The overall effect is to '
- 'match the |\n'
- ' | | output of "str()" as altered by the other '
- 'format |\n'
- ' | | '
- 'modifiers. '
- '|\n'
+ ' | None | The same as '
+ '"\'g\'". |\n'
' '
'+-----------+------------------------------------------------------------+\n'
'\n'
@@ -5471,13 +4755,13 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
'The new format syntax also supports new and different '
'options, shown\n'
- 'in the following examples.\n'
+ 'in the follow examples.\n'
'\n'
'Accessing arguments by position:\n'
'\n'
" >>> '{0}, {1}, {2}'.format('a', 'b', 'c')\n"
" 'a, b, c'\n"
- " >>> '{}, {}, {}'.format('a', 'b', 'c') # 3.1+ only\n"
+ " >>> '{}, {}, {}'.format('a', 'b', 'c') # 2.7+ only\n"
" 'a, b, c'\n"
" >>> '{2}, {1}, {0}'.format('a', 'b', 'c')\n"
" 'c, b, a'\n"
@@ -5500,7 +4784,7 @@ topics = {'assert': 'The "assert" statement\n'
"{longitude}'.format(**coord)\n"
" 'Coordinates: 37.24N, -115.81W'\n"
'\n'
- 'Accessing arguments’ attributes:\n'
+ "Accessing arguments' attributes:\n"
'\n'
' >>> c = 3-5j\n'
" >>> ('The complex number {0} is formed from the real "
@@ -5508,7 +4792,7 @@ topics = {'assert': 'The "assert" statement\n'
" ... 'and the imaginary part {0.imag}.').format(c)\n"
" 'The complex number (3-5j) is formed from the real part "
"3.0 and the imaginary part -5.0.'\n"
- ' >>> class Point:\n'
+ ' >>> class Point(object):\n'
' ... def __init__(self, x, y):\n'
' ... self.x, self.y = x, y\n'
' ... def __str__(self):\n'
@@ -5518,7 +4802,7 @@ topics = {'assert': 'The "assert" statement\n'
' >>> str(Point(4, 2))\n'
" 'Point(4, 2)'\n"
'\n'
- 'Accessing arguments’ items:\n'
+ "Accessing arguments' items:\n"
'\n'
' >>> coord = (3, 5)\n'
" >>> 'X: {0[0]}; Y: {0[1]}'.format(coord)\n"
@@ -5573,10 +4857,10 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
'Expressing a percentage:\n'
'\n'
- ' >>> points = 19\n'
+ ' >>> points = 19.5\n'
' >>> total = 22\n'
" >>> 'Correct answers: {:.2%}'.format(points/total)\n"
- " 'Correct answers: 86.36%'\n"
+ " 'Correct answers: 88.64%'\n"
'\n'
'Using type-specific formatting:\n'
'\n'
@@ -5603,11 +4887,11 @@ topics = {'assert': 'The "assert" statement\n'
' 3232235521\n'
' >>>\n'
' >>> width = 5\n'
- ' >>> for num in range(5,12): \n'
+ ' >>> for num in range(5,12):\n'
" ... for base in 'dXob':\n"
- " ... print('{0:{width}{base}}'.format(num, "
- "base=base, width=width), end=' ')\n"
- ' ... print()\n'
+ " ... print '{0:{width}{base}}'.format(num, "
+ 'base=base, width=width),\n'
+ ' ... print\n'
' ...\n'
' 5 5 5 101\n'
' 6 6 6 110\n'
@@ -5616,32 +4900,29 @@ topics = {'assert': 'The "assert" statement\n'
' 9 9 11 1001\n'
' 10 A 12 1010\n'
' 11 B 13 1011\n',
- 'function': 'Function definitions\n'
+ 'function': '\n'
+ 'Function definitions\n'
'********************\n'
'\n'
'A function definition defines a user-defined function object '
'(see\n'
'section The standard type hierarchy):\n'
'\n'
- ' funcdef ::= [decorators] "def" funcname "(" '
- '[parameter_list] ")"\n'
- ' ["->" expression] ":" suite\n'
- ' decorators ::= decorator+\n'
- ' decorator ::= "@" dotted_name ["(" '
- '[argument_list [","]] ")"] NEWLINE\n'
- ' dotted_name ::= identifier ("." identifier)*\n'
- ' parameter_list ::= defparameter ("," '
- 'defparameter)* "," "/" ["," [parameter_list_no_posonly]]\n'
- ' | parameter_list_no_posonly\n'
- ' parameter_list_no_posonly ::= defparameter ("," '
- 'defparameter)* ["," [parameter_list_starargs]]\n'
- ' | parameter_list_starargs\n'
- ' parameter_list_starargs ::= "*" [parameter] ("," '
- 'defparameter)* ["," ["**" parameter [","]]]\n'
- ' | "**" parameter [","]\n'
- ' parameter ::= identifier [":" expression]\n'
- ' defparameter ::= parameter ["=" expression]\n'
- ' funcname ::= identifier\n'
+ ' decorated ::= decorators (classdef | funcdef)\n'
+ ' decorators ::= decorator+\n'
+ ' decorator ::= "@" dotted_name ["(" [argument_list [","]] '
+ '")"] NEWLINE\n'
+ ' funcdef ::= "def" funcname "(" [parameter_list] ")" '
+ '":" suite\n'
+ ' dotted_name ::= identifier ("." identifier)*\n'
+ ' parameter_list ::= (defparameter ",")*\n'
+ ' ( "*" identifier ["," "**" identifier]\n'
+ ' | "**" identifier\n'
+ ' | defparameter [","] )\n'
+ ' defparameter ::= parameter ["=" expression]\n'
+ ' sublist ::= parameter ("," parameter)* [","]\n'
+ ' parameter ::= identifier | "(" sublist ")"\n'
+ ' funcname ::= identifier\n'
'\n'
'A function definition is an executable statement. Its execution '
'binds\n'
@@ -5654,7 +4935,7 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
'The function definition does not execute the function body; this '
'gets\n'
- 'executed only when the function is called. [2]\n'
+ 'executed only when the function is called. [3]\n'
'\n'
'A function definition may be wrapped by one or more *decorator*\n'
'expressions. Decorator expressions are evaluated when the '
@@ -5667,52 +4948,47 @@ topics = {'assert': 'The "assert" statement\n'
'function name\n'
'instead of the function object. Multiple decorators are applied '
'in\n'
- 'nested fashion. For example, the following code\n'
+ 'nested fashion. For example, the following code:\n'
'\n'
' @f1(arg)\n'
' @f2\n'
' def func(): pass\n'
'\n'
- 'is roughly equivalent to\n'
+ 'is equivalent to:\n'
'\n'
' def func(): pass\n'
' func = f1(arg)(f2(func))\n'
'\n'
- 'except that the original function is not temporarily bound to '
- 'the name\n'
- '"func".\n'
- '\n'
- 'When one or more *parameters* have the form *parameter* "="\n'
- '*expression*, the function is said to have “default parameter '
- 'values.”\n'
+ 'When one or more top-level *parameters* have the form '
+ '*parameter* "="\n'
+ '*expression*, the function is said to have "default parameter '
+ 'values."\n'
'For a parameter with a default value, the corresponding '
'*argument* may\n'
- 'be omitted from a call, in which case the parameter’s default '
+ "be omitted from a call, in which case the parameter's default "
'value is\n'
'substituted. If a parameter has a default value, all following\n'
- 'parameters up until the “"*"” must also have a default value — '
- 'this is\n'
- 'a syntactic restriction that is not expressed by the grammar.\n'
- '\n'
- '**Default parameter values are evaluated from left to right when '
- 'the\n'
- 'function definition is executed.** This means that the '
- 'expression is\n'
- 'evaluated once, when the function is defined, and that the same '
- '“pre-\n'
- 'computed” value is used for each call. This is especially '
- 'important\n'
- 'to understand when a default parameter is a mutable object, such '
- 'as a\n'
- 'list or a dictionary: if the function modifies the object (e.g. '
- 'by\n'
- 'appending an item to a list), the default value is in effect '
- 'modified.\n'
- 'This is generally not what was intended. A way around this is '
- 'to use\n'
- '"None" as the default, and explicitly test for it in the body of '
- 'the\n'
- 'function, e.g.:\n'
+ 'parameters must also have a default value --- this is a '
+ 'syntactic\n'
+ 'restriction that is not expressed by the grammar.\n'
+ '\n'
+ '**Default parameter values are evaluated when the function '
+ 'definition\n'
+ 'is executed.** This means that the expression is evaluated '
+ 'once, when\n'
+ 'the function is defined, and that the same "pre-computed" value '
+ 'is\n'
+ 'used for each call. This is especially important to understand '
+ 'when a\n'
+ 'default parameter is a mutable object, such as a list or a '
+ 'dictionary:\n'
+ 'if the function modifies the object (e.g. by appending an item '
+ 'to a\n'
+ 'list), the default value is in effect modified. This is '
+ 'generally not\n'
+ 'what was intended. A way around this is to use "None" as the\n'
+ 'default, and explicitly test for it in the body of the function, '
+ 'e.g.:\n'
'\n'
' def whats_on_the_telly(penguin=None):\n'
' if penguin is None:\n'
@@ -5726,44 +5002,16 @@ topics = {'assert': 'The "assert" statement\n'
'mentioned in\n'
'the parameter list, either from position arguments, from '
'keyword\n'
- 'arguments, or from default values. If the form “"*identifier"” '
+ 'arguments, or from default values. If the form ""*identifier"" '
'is\n'
'present, it is initialized to a tuple receiving any excess '
'positional\n'
- 'parameters, defaulting to the empty tuple. If the form\n'
- '“"**identifier"” is present, it is initialized to a new ordered\n'
- 'mapping receiving any excess keyword arguments, defaulting to a '
- 'new\n'
- 'empty mapping of the same type. Parameters after “"*"” or\n'
- '“"*identifier"” are keyword-only parameters and may only be '
- 'passed\n'
- 'used keyword arguments.\n'
- '\n'
- 'Parameters may have an *annotation* of the form “": '
- 'expression"”\n'
- 'following the parameter name. Any parameter may have an '
- 'annotation,\n'
- 'even those of the form "*identifier" or "**identifier". '
- 'Functions may\n'
- 'have “return” annotation of the form “"-> expression"” after '
- 'the\n'
- 'parameter list. These annotations can be any valid Python '
- 'expression.\n'
- 'The presence of annotations does not change the semantics of a\n'
- 'function. The annotation values are available as values of a\n'
- 'dictionary keyed by the parameters’ names in the '
- '"__annotations__"\n'
- 'attribute of the function object. If the "annotations" import '
- 'from\n'
- '"__future__" is used, annotations are preserved as strings at '
- 'runtime\n'
- 'which enables postponed evaluation. Otherwise, they are '
- 'evaluated\n'
- 'when the function definition is executed. In this case '
- 'annotations\n'
- 'may be evaluated in a different order than they appear in the '
- 'source\n'
- 'code.\n'
+ 'parameters, defaulting to the empty tuple. If the form\n'
+ '""**identifier"" is present, it is initialized to a new '
+ 'dictionary\n'
+ 'receiving any excess keyword arguments, defaulting to a new '
+ 'empty\n'
+ 'dictionary.\n'
'\n'
'It is also possible to create anonymous functions (functions not '
'bound\n'
@@ -5772,44 +5020,25 @@ topics = {'assert': 'The "assert" statement\n'
'lambda\n'
'expression is merely a shorthand for a simplified function '
'definition;\n'
- 'a function defined in a “"def"” statement can be passed around '
+ 'a function defined in a ""def"" statement can be passed around '
'or\n'
'assigned to another name just like a function defined by a '
'lambda\n'
- 'expression. The “"def"” form is actually more powerful since '
+ 'expression. The ""def"" form is actually more powerful since '
'it\n'
- 'allows the execution of multiple statements and annotations.\n'
+ 'allows the execution of multiple statements.\n'
'\n'
- '**Programmer’s note:** Functions are first-class objects. A '
- '“"def"”\n'
- 'statement executed inside a function definition defines a local\n'
- 'function that can be returned or passed around. Free variables '
- 'used\n'
- 'in the nested function can access the local variables of the '
+ "**Programmer's note:** Functions are first-class objects. A "
+ '""def""\n'
+ 'form executed inside a function definition defines a local '
'function\n'
+ 'that can be returned or passed around. Free variables used in '
+ 'the\n'
+ 'nested function can access the local variables of the function\n'
'containing the def. See section Naming and binding for '
- 'details.\n'
- '\n'
- 'See also:\n'
- '\n'
- ' **PEP 3107** - Function Annotations\n'
- ' The original specification for function annotations.\n'
- '\n'
- ' **PEP 484** - Type Hints\n'
- ' Definition of a standard meaning for annotations: type '
- 'hints.\n'
- '\n'
- ' **PEP 526** - Syntax for Variable Annotations\n'
- ' Ability to type hint variable declarations, including '
- 'class\n'
- ' variables and instance variables\n'
- '\n'
- ' **PEP 563** - Postponed Evaluation of Annotations\n'
- ' Support for forward references within annotations by '
- 'preserving\n'
- ' annotations in a string form at runtime instead of eager\n'
- ' evaluation.\n',
- 'global': 'The "global" statement\n'
+ 'details.\n',
+ 'global': '\n'
+ 'The "global" statement\n'
'**********************\n'
'\n'
' global_stmt ::= "global" identifier ("," identifier)*\n'
@@ -5830,29 +5059,30 @@ topics = {'assert': 'The "assert" statement\n'
'Names listed in a "global" statement must not be defined as '
'formal\n'
'parameters or in a "for" loop control target, "class" definition,\n'
- 'function definition, "import" statement, or variable annotation.\n'
+ 'function definition, or "import" statement.\n'
'\n'
'**CPython implementation detail:** The current implementation does '
'not\n'
- 'enforce some of these restrictions, but programs should not abuse '
- 'this\n'
- 'freedom, as future implementations may enforce them or silently '
- 'change\n'
- 'the meaning of the program.\n'
+ 'enforce the latter two restrictions, but programs should not '
+ 'abuse\n'
+ 'this freedom, as future implementations may enforce them or '
+ 'silently\n'
+ 'change the meaning of the program.\n'
'\n'
- '**Programmer’s note:** "global" is a directive to the parser. It\n'
+ '**Programmer\'s note:** "global" is a directive to the parser. '
+ 'It\n'
'applies only to code parsed at the same time as the "global"\n'
- 'statement. In particular, a "global" statement contained in a '
- 'string\n'
- 'or code object supplied to the built-in "exec()" function does '
- 'not\n'
- 'affect the code block *containing* the function call, and code\n'
- 'contained in such a string is unaffected by "global" statements in '
- 'the\n'
- 'code containing the function call. The same applies to the '
- '"eval()"\n'
- 'and "compile()" functions.\n',
- 'id-classes': 'Reserved classes of identifiers\n'
+ 'statement. In particular, a "global" statement contained in an '
+ '"exec"\n'
+ 'statement does not affect the code block *containing* the "exec"\n'
+ 'statement, and code contained in an "exec" statement is unaffected '
+ 'by\n'
+ '"global" statements in the code containing the "exec" statement. '
+ 'The\n'
+ 'same applies to the "eval()", "execfile()" and "compile()" '
+ 'functions.\n',
+ 'id-classes': '\n'
+ 'Reserved classes of identifiers\n'
'*******************************\n'
'\n'
'Certain classes of identifiers (besides keywords) have '
@@ -5866,11 +5096,11 @@ topics = {'assert': 'The "assert" statement\n'
'identifier "_"\n'
' is used in the interactive interpreter to store the result '
'of the\n'
- ' last evaluation; it is stored in the "builtins" module. '
- 'When not\n'
- ' in interactive mode, "_" has no special meaning and is not '
- 'defined.\n'
- ' See section The import statement.\n'
+ ' last evaluation; it is stored in the "__builtin__" module. '
+ 'When\n'
+ ' not in interactive mode, "_" has no special meaning and is '
+ 'not\n'
+ ' defined. See section The import statement.\n'
'\n'
' Note: The name "_" is often used in conjunction with\n'
' internationalization; refer to the documentation for the\n'
@@ -5897,89 +5127,25 @@ topics = {'assert': 'The "assert" statement\n'
'within the\n'
' context of a class definition, are re-written to use a '
'mangled form\n'
- ' to help avoid name clashes between “private” attributes of '
+ ' to help avoid name clashes between "private" attributes of '
'base and\n'
' derived classes. See section Identifiers (Names).\n',
- 'identifiers': 'Identifiers and keywords\n'
+ 'identifiers': '\n'
+ 'Identifiers and keywords\n'
'************************\n'
'\n'
'Identifiers (also referred to as *names*) are described by '
'the\n'
- 'following lexical definitions.\n'
- '\n'
- 'The syntax of identifiers in Python is based on the Unicode '
- 'standard\n'
- 'annex UAX-31, with elaboration and changes as defined below; '
- 'see also\n'
- '**PEP 3131** for further details.\n'
+ 'following lexical definitions:\n'
'\n'
- 'Within the ASCII range (U+0001..U+007F), the valid characters '
- 'for\n'
- 'identifiers are the same as in Python 2.x: the uppercase and '
- 'lowercase\n'
- 'letters "A" through "Z", the underscore "_" and, except for '
- 'the first\n'
- 'character, the digits "0" through "9".\n'
- '\n'
- 'Python 3.0 introduces additional characters from outside the '
- 'ASCII\n'
- 'range (see **PEP 3131**). For these characters, the '
- 'classification\n'
- 'uses the version of the Unicode Character Database as '
- 'included in the\n'
- '"unicodedata" module.\n'
+ ' identifier ::= (letter|"_") (letter | digit | "_")*\n'
+ ' letter ::= lowercase | uppercase\n'
+ ' lowercase ::= "a"..."z"\n'
+ ' uppercase ::= "A"..."Z"\n'
+ ' digit ::= "0"..."9"\n'
'\n'
'Identifiers are unlimited in length. Case is significant.\n'
'\n'
- ' identifier ::= xid_start xid_continue*\n'
- ' id_start ::= <all characters in general categories Lu, '
- 'Ll, Lt, Lm, Lo, Nl, the underscore, and characters with the '
- 'Other_ID_Start property>\n'
- ' id_continue ::= <all characters in id_start, plus '
- 'characters in the categories Mn, Mc, Nd, Pc and others with '
- 'the Other_ID_Continue property>\n'
- ' xid_start ::= <all characters in id_start whose NFKC '
- 'normalization is in "id_start xid_continue*">\n'
- ' xid_continue ::= <all characters in id_continue whose NFKC '
- 'normalization is in "id_continue*">\n'
- '\n'
- 'The Unicode category codes mentioned above stand for:\n'
- '\n'
- '* *Lu* - uppercase letters\n'
- '\n'
- '* *Ll* - lowercase letters\n'
- '\n'
- '* *Lt* - titlecase letters\n'
- '\n'
- '* *Lm* - modifier letters\n'
- '\n'
- '* *Lo* - other letters\n'
- '\n'
- '* *Nl* - letter numbers\n'
- '\n'
- '* *Mn* - nonspacing marks\n'
- '\n'
- '* *Mc* - spacing combining marks\n'
- '\n'
- '* *Nd* - decimal numbers\n'
- '\n'
- '* *Pc* - connector punctuations\n'
- '\n'
- '* *Other_ID_Start* - explicit list of characters in '
- 'PropList.txt to\n'
- ' support backwards compatibility\n'
- '\n'
- '* *Other_ID_Continue* - likewise\n'
- '\n'
- 'All identifiers are converted into the normal form NFKC while '
- 'parsing;\n'
- 'comparison of identifiers is based on NFKC.\n'
- '\n'
- 'A non-normative HTML file listing all valid identifier '
- 'characters for\n'
- 'Unicode 4.1 can be found at https://www.dcl.hpi.uni-\n'
- 'potsdam.de/home/loewis/table-3131.html.\n'
- '\n'
'\n'
'Keywords\n'
'========\n'
@@ -5990,13 +5156,28 @@ topics = {'assert': 'The "assert" statement\n'
'They must\n'
'be spelled exactly as written here:\n'
'\n'
- ' False await else import pass\n'
- ' None break except in raise\n'
- ' True class finally is return\n'
- ' and continue for lambda try\n'
- ' as def from nonlocal while\n'
- ' assert del global not with\n'
- ' async elif if or yield\n'
+ ' and del from not while\n'
+ ' as elif global or with\n'
+ ' assert else if pass yield\n'
+ ' break except import print\n'
+ ' class exec in raise\n'
+ ' continue finally is return\n'
+ ' def for lambda try\n'
+ '\n'
+ 'Changed in version 2.4: "None" became a constant and is now '
+ 'recognized\n'
+ 'by the compiler as a name for the built-in object "None". '
+ 'Although it\n'
+ 'is not a keyword, you cannot assign a different object to '
+ 'it.\n'
+ '\n'
+ 'Changed in version 2.5: Using "as" and "with" as identifiers '
+ 'triggers\n'
+ 'a warning. To use them as keywords, enable the '
+ '"with_statement"\n'
+ 'future feature .\n'
+ '\n'
+ 'Changed in version 2.6: "as" and "with" are full keywords.\n'
'\n'
'\n'
'Reserved classes of identifiers\n'
@@ -6013,11 +5194,11 @@ topics = {'assert': 'The "assert" statement\n'
'identifier "_"\n'
' is used in the interactive interpreter to store the result '
'of the\n'
- ' last evaluation; it is stored in the "builtins" module. '
- 'When not\n'
- ' in interactive mode, "_" has no special meaning and is not '
- 'defined.\n'
- ' See section The import statement.\n'
+ ' last evaluation; it is stored in the "__builtin__" '
+ 'module. When\n'
+ ' not in interactive mode, "_" has no special meaning and is '
+ 'not\n'
+ ' defined. See section The import statement.\n'
'\n'
' Note: The name "_" is often used in conjunction with\n'
' internationalization; refer to the documentation for '
@@ -6045,16 +5226,17 @@ topics = {'assert': 'The "assert" statement\n'
'within the\n'
' context of a class definition, are re-written to use a '
'mangled form\n'
- ' to help avoid name clashes between “private” attributes of '
+ ' to help avoid name clashes between "private" attributes of '
'base and\n'
' derived classes. See section Identifiers (Names).\n',
- 'if': 'The "if" statement\n'
+ 'if': '\n'
+ 'The "if" statement\n'
'******************\n'
'\n'
'The "if" statement is used for conditional execution:\n'
'\n'
' if_stmt ::= "if" expression ":" suite\n'
- ' ("elif" expression ":" suite)*\n'
+ ' ( "elif" expression ":" suite )*\n'
' ["else" ":" suite]\n'
'\n'
'It selects exactly one of the suites by evaluating the expressions '
@@ -6064,13 +5246,14 @@ topics = {'assert': 'The "assert" statement\n'
'(and no other part of the "if" statement is executed or evaluated).\n'
'If all expressions are false, the suite of the "else" clause, if\n'
'present, is executed.\n',
- 'imaginary': 'Imaginary literals\n'
+ 'imaginary': '\n'
+ 'Imaginary literals\n'
'******************\n'
'\n'
'Imaginary literals are described by the following lexical '
'definitions:\n'
'\n'
- ' imagnumber ::= (floatnumber | digitpart) ("j" | "J")\n'
+ ' imagnumber ::= (floatnumber | intpart) ("j" | "J")\n'
'\n'
'An imaginary literal yields a complex number with a real part '
'of 0.0.\n'
@@ -6082,114 +5265,191 @@ topics = {'assert': 'The "assert" statement\n'
'it,\n'
'e.g., "(3+4j)". Some examples of imaginary literals:\n'
'\n'
- ' 3.14j 10.j 10j .001j 1e100j 3.14e-10j '
- '3.14_15_93j\n',
- 'import': 'The "import" statement\n'
+ ' 3.14j 10.j 10j .001j 1e100j 3.14e-10j\n',
+ 'import': '\n'
+ 'The "import" statement\n'
'**********************\n'
'\n'
- ' import_stmt ::= "import" module ["as" identifier] ("," '
- 'module ["as" identifier])*\n'
+ ' import_stmt ::= "import" module ["as" name] ( "," module '
+ '["as" name] )*\n'
' | "from" relative_module "import" identifier '
- '["as" identifier]\n'
- ' ("," identifier ["as" identifier])*\n'
+ '["as" name]\n'
+ ' ( "," identifier ["as" name] )*\n'
' | "from" relative_module "import" "(" '
- 'identifier ["as" identifier]\n'
- ' ("," identifier ["as" identifier])* [","] ")"\n'
+ 'identifier ["as" name]\n'
+ ' ( "," identifier ["as" name] )* [","] ")"\n'
' | "from" module "import" "*"\n'
' module ::= (identifier ".")* identifier\n'
' relative_module ::= "."* module | "."+\n'
+ ' name ::= identifier\n'
'\n'
- 'The basic import statement (no "from" clause) is executed in two\n'
- 'steps:\n'
- '\n'
- '1. find a module, loading and initializing it if necessary\n'
- '\n'
- '2. define a name or names in the local namespace for the scope\n'
- ' where the "import" statement occurs.\n'
+ 'Import statements are executed in two steps: (1) find a module, '
+ 'and\n'
+ 'initialize it if necessary; (2) define a name or names in the '
+ 'local\n'
+ 'namespace (of the scope where the "import" statement occurs). The\n'
+ 'statement comes in two forms differing on whether it uses the '
+ '"from"\n'
+ 'keyword. The first form (without "from") repeats these steps for '
+ 'each\n'
+ 'identifier in the list. The form with "from" performs step (1) '
+ 'once,\n'
+ 'and then performs step (2) repeatedly.\n'
'\n'
- 'When the statement contains multiple clauses (separated by commas) '
- 'the\n'
- 'two steps are carried out separately for each clause, just as '
- 'though\n'
- 'the clauses had been separated out into individual import '
- 'statements.\n'
+ 'To understand how step (1) occurs, one must first understand how\n'
+ 'Python handles hierarchical naming of modules. To help organize\n'
+ 'modules and provide a hierarchy in naming, Python has a concept '
+ 'of\n'
+ 'packages. A package can contain other packages and modules while\n'
+ 'modules cannot contain other modules or packages. From a file '
+ 'system\n'
+ 'perspective, packages are directories and modules are files.\n'
'\n'
- 'The details of the first step, finding and loading modules are\n'
- 'described in greater detail in the section on the import system, '
- 'which\n'
- 'also describes the various types of packages and modules that can '
- 'be\n'
- 'imported, as well as all the hooks that can be used to customize '
+ 'Once the name of the module is known (unless otherwise specified, '
'the\n'
- 'import system. Note that failures in this step may indicate '
- 'either\n'
- 'that the module could not be located, *or* that an error occurred\n'
- 'while initializing the module, which includes execution of the\n'
- 'module’s code.\n'
- '\n'
- 'If the requested module is retrieved successfully, it will be '
- 'made\n'
- 'available in the local namespace in one of three ways:\n'
- '\n'
- '* If the module name is followed by "as", then the name following\n'
- ' "as" is bound directly to the imported module.\n'
- '\n'
- '* If no other name is specified, and the module being imported is '
- 'a\n'
- ' top level module, the module’s name is bound in the local '
- 'namespace\n'
- ' as a reference to the imported module\n'
+ 'term "module" will refer to both packages and modules), searching '
+ 'for\n'
+ 'the module or package can begin. The first place checked is\n'
+ '"sys.modules", the cache of all modules that have been imported\n'
+ 'previously. If the module is found there then it is used in step '
+ '(2)\n'
+ 'of import.\n'
'\n'
- '* If the module being imported is *not* a top level module, then '
- 'the\n'
- ' name of the top level package that contains the module is bound '
+ 'If the module is not found in the cache, then "sys.meta_path" is\n'
+ 'searched (the specification for "sys.meta_path" can be found in '
+ '**PEP\n'
+ '302**). The object is a list of *finder* objects which are queried '
'in\n'
- ' the local namespace as a reference to the top level package. '
- 'The\n'
- ' imported module must be accessed using its full qualified name\n'
- ' rather than directly\n'
- '\n'
- 'The "from" form uses a slightly more complex process:\n'
+ 'order as to whether they know how to load the module by calling '
+ 'their\n'
+ '"find_module()" method with the name of the module. If the module\n'
+ 'happens to be contained within a package (as denoted by the '
+ 'existence\n'
+ 'of a dot in the name), then a second argument to "find_module()" '
+ 'is\n'
+ 'given as the value of the "__path__" attribute from the parent '
+ 'package\n'
+ '(everything up to the last dot in the name of the module being\n'
+ 'imported). If a finder can find the module it returns a *loader*\n'
+ '(discussed later) or returns "None".\n'
'\n'
- '1. find the module specified in the "from" clause, loading and\n'
- ' initializing it if necessary;\n'
+ 'If none of the finders on "sys.meta_path" are able to find the '
+ 'module\n'
+ 'then some implicitly defined finders are queried. Implementations '
+ 'of\n'
+ 'Python vary in what implicit meta path finders are defined. The '
+ 'one\n'
+ 'they all do define, though, is one that handles "sys.path_hooks",\n'
+ '"sys.path_importer_cache", and "sys.path".\n'
'\n'
- '2. for each of the identifiers specified in the "import" clauses:\n'
+ 'The implicit finder searches for the requested module in the '
+ '"paths"\n'
+ 'specified in one of two places ("paths" do not have to be file '
+ 'system\n'
+ 'paths). If the module being imported is supposed to be contained\n'
+ 'within a package then the second argument passed to '
+ '"find_module()",\n'
+ '"__path__" on the parent package, is used as the source of paths. '
+ 'If\n'
+ 'the module is not contained in a package then "sys.path" is used '
+ 'as\n'
+ 'the source of paths.\n'
'\n'
- ' 1. check if the imported module has an attribute by that name\n'
+ 'Once the source of paths is chosen it is iterated over to find a\n'
+ 'finder that can handle that path. The dict at\n'
+ '"sys.path_importer_cache" caches finders for paths and is checked '
+ 'for\n'
+ 'a finder. If the path does not have a finder cached then\n'
+ '"sys.path_hooks" is searched by calling each object in the list '
+ 'with a\n'
+ 'single argument of the path, returning a finder or raises\n'
+ '"ImportError". If a finder is returned then it is cached in\n'
+ '"sys.path_importer_cache" and then used for that path entry. If '
+ 'no\n'
+ 'finder can be found but the path exists then a value of "None" is\n'
+ 'stored in "sys.path_importer_cache" to signify that an implicit, '
+ 'file-\n'
+ 'based finder that handles modules stored as individual files '
+ 'should be\n'
+ 'used for that path. If the path does not exist then a finder '
+ 'which\n'
+ 'always returns "None" is placed in the cache for the path.\n'
'\n'
- ' 2. if not, attempt to import a submodule with that name and '
- 'then\n'
- ' check the imported module again for that attribute\n'
+ 'If no finder can find the module then "ImportError" is raised.\n'
+ 'Otherwise some finder returned a loader whose "load_module()" '
+ 'method\n'
+ 'is called with the name of the module to load (see **PEP 302** for '
+ 'the\n'
+ 'original definition of loaders). A loader has several '
+ 'responsibilities\n'
+ 'to perform on a module it loads. First, if the module already '
+ 'exists\n'
+ 'in "sys.modules" (a possibility if the loader is called outside of '
+ 'the\n'
+ 'import machinery) then it is to use that module for initialization '
+ 'and\n'
+ 'not a new module. But if the module does not exist in '
+ '"sys.modules"\n'
+ 'then it is to be added to that dict before initialization begins. '
+ 'If\n'
+ 'an error occurs during loading of the module and it was added to\n'
+ '"sys.modules" it is to be removed from the dict. If an error '
+ 'occurs\n'
+ 'but the module was already in "sys.modules" it is left in the '
+ 'dict.\n'
'\n'
- ' 3. if the attribute is not found, "ImportError" is raised.\n'
+ 'The loader must set several attributes on the module. "__name__" '
+ 'is to\n'
+ 'be set to the name of the module. "__file__" is to be the "path" '
+ 'to\n'
+ 'the file unless the module is built-in (and thus listed in\n'
+ '"sys.builtin_module_names") in which case the attribute is not '
+ 'set. If\n'
+ 'what is being imported is a package then "__path__" is to be set '
+ 'to a\n'
+ 'list of paths to be searched when looking for modules and '
+ 'packages\n'
+ 'contained within the package being imported. "__package__" is '
+ 'optional\n'
+ 'but should be set to the name of package that contains the module '
+ 'or\n'
+ 'package (the empty string is used for module not contained in a\n'
+ 'package). "__loader__" is also optional but should be set to the\n'
+ 'loader object that is loading the module.\n'
'\n'
- ' 4. otherwise, a reference to that value is stored in the local\n'
- ' namespace, using the name in the "as" clause if it is '
- 'present,\n'
- ' otherwise using the attribute name\n'
+ 'If an error occurs during loading then the loader raises '
+ '"ImportError"\n'
+ 'if some other exception is not already being propagated. Otherwise '
+ 'the\n'
+ 'loader returns the module that was loaded and initialized.\n'
'\n'
- 'Examples:\n'
+ 'When step (1) finishes without raising an exception, step (2) can\n'
+ 'begin.\n'
'\n'
- ' import foo # foo imported and bound locally\n'
- ' import foo.bar.baz # foo.bar.baz imported, foo bound '
- 'locally\n'
- ' import foo.bar.baz as fbb # foo.bar.baz imported and bound as '
- 'fbb\n'
- ' from foo.bar import baz # foo.bar.baz imported and bound as '
- 'baz\n'
- ' from foo import attr # foo imported and foo.attr bound as '
- 'attr\n'
+ 'The first form of "import" statement binds the module name in the\n'
+ 'local namespace to the module object, and then goes on to import '
+ 'the\n'
+ 'next identifier, if any. If the module name is followed by "as", '
+ 'the\n'
+ 'name following "as" is used as the local name for the module.\n'
'\n'
- 'If the list of identifiers is replaced by a star ("\'*\'"), all '
- 'public\n'
- 'names defined in the module are bound in the local namespace for '
+ 'The "from" form does not bind the module name: it goes through '
'the\n'
- 'scope where the "import" statement occurs.\n'
+ 'list of identifiers, looks each one of them up in the module found '
+ 'in\n'
+ 'step (1), and binds the name in the local namespace to the object '
+ 'thus\n'
+ 'found. As with the first form of "import", an alternate local '
+ 'name\n'
+ 'can be supplied by specifying ""as" localname". If a name is not\n'
+ 'found, "ImportError" is raised. If the list of identifiers is\n'
+ 'replaced by a star ("\'*\'"), all public names defined in the '
+ 'module are\n'
+ 'bound in the local namespace of the "import" statement..\n'
'\n'
'The *public names* defined by a module are determined by checking '
'the\n'
- 'module’s namespace for a variable named "__all__"; if defined, it '
+ 'module\'s namespace for a variable named "__all__"; if defined, it '
'must\n'
'be a sequence of strings which are names defined or imported by '
'that\n'
@@ -6197,9 +5457,9 @@ topics = {'assert': 'The "assert" statement\n'
'and\n'
'are required to exist. If "__all__" is not defined, the set of '
'public\n'
- 'names includes all names found in the module’s namespace which do '
+ "names includes all names found in the module's namespace which do "
'not\n'
- 'begin with an underscore character ("\'_\'"). "__all__" should '
+ 'begin with an underscore character ("\'_\'"). "__all__" should '
'contain\n'
'the entire public API. It is intended to avoid accidentally '
'exporting\n'
@@ -6207,9 +5467,13 @@ topics = {'assert': 'The "assert" statement\n'
'were\n'
'imported and used within the module).\n'
'\n'
- 'The wild card form of import — "from module import *" — is only\n'
- 'allowed at the module level. Attempting to use it in class or\n'
- 'function definitions will raise a "SyntaxError".\n'
+ 'The "from" form with "*" may only occur in a module scope. If '
+ 'the\n'
+ 'wild card form of import --- "import *" --- is used in a function '
+ 'and\n'
+ 'the function contains or is a nested block with free variables, '
+ 'the\n'
+ 'compiler will raise a "SyntaxError".\n'
'\n'
'When specifying what module to import you do not have to specify '
'the\n'
@@ -6232,16 +5496,12 @@ topics = {'assert': 'The "assert" statement\n'
'end up importing "pkg.mod". If you execute "from ..subpkg2 import '
'mod"\n'
'from within "pkg.subpkg1" you will import "pkg.subpkg2.mod". The\n'
- 'specification for relative imports is contained in the Package\n'
- 'Relative Imports section.\n'
+ 'specification for relative imports is contained within **PEP '
+ '328**.\n'
'\n'
'"importlib.import_module()" is provided to support applications '
'that\n'
- 'determine dynamically the modules to be loaded.\n'
- '\n'
- 'Raises an auditing event "import" with arguments "module", '
- '"filename",\n'
- '"sys.path", "sys.meta_path", "sys.path_hooks".\n'
+ 'determine which modules need to be loaded dynamically.\n'
'\n'
'\n'
'Future statements\n'
@@ -6250,24 +5510,23 @@ topics = {'assert': 'The "assert" statement\n'
'A *future statement* is a directive to the compiler that a '
'particular\n'
'module should be compiled using syntax or semantics that will be\n'
- 'available in a specified future release of Python where the '
- 'feature\n'
- 'becomes standard.\n'
- '\n'
- 'The future statement is intended to ease migration to future '
- 'versions\n'
- 'of Python that introduce incompatible changes to the language. '
- 'It\n'
- 'allows use of the new features on a per-module basis before the\n'
- 'release in which the feature becomes standard.\n'
+ 'available in a specified future release of Python. The future\n'
+ 'statement is intended to ease migration to future versions of '
+ 'Python\n'
+ 'that introduce incompatible changes to the language. It allows '
+ 'use of\n'
+ 'the new features on a per-module basis before the release in which '
+ 'the\n'
+ 'feature becomes standard.\n'
'\n'
- ' future_stmt ::= "from" "__future__" "import" feature ["as" '
- 'identifier]\n'
- ' ("," feature ["as" identifier])*\n'
- ' | "from" "__future__" "import" "(" feature '
- '["as" identifier]\n'
- ' ("," feature ["as" identifier])* [","] ")"\n'
- ' feature ::= identifier\n'
+ ' future_statement ::= "from" "__future__" "import" feature ["as" '
+ 'name]\n'
+ ' ("," feature ["as" name])*\n'
+ ' | "from" "__future__" "import" "(" feature '
+ '["as" name]\n'
+ ' ("," feature ["as" name])* [","] ")"\n'
+ ' feature ::= identifier\n'
+ ' name ::= identifier\n'
'\n'
'A future statement must appear near the top of the module. The '
'only\n'
@@ -6281,17 +5540,13 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
'* other future statements.\n'
'\n'
- 'The only feature in Python 3.7 that requires using the future\n'
- 'statement is "annotations".\n'
- '\n'
- 'All historical features enabled by the future statement are still\n'
- 'recognized by Python 3. The list includes "absolute_import",\n'
- '"division", "generators", "generator_stop", "unicode_literals",\n'
- '"print_function", "nested_scopes" and "with_statement". They are '
- 'all\n'
- 'redundant because they are always enabled, and only kept for '
- 'backwards\n'
- 'compatibility.\n'
+ 'The features recognized by Python 2.6 are "unicode_literals",\n'
+ '"print_function", "absolute_import", "division", "generators",\n'
+ '"nested_scopes" and "with_statement". "generators", '
+ '"with_statement",\n'
+ '"nested_scopes" are redundant in Python version 2.6 and above '
+ 'because\n'
+ 'they are always enabled.\n'
'\n'
'A future statement is recognized and treated specially at compile\n'
'time: Changes to the semantics of core constructs are often\n'
@@ -6323,18 +5578,19 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
' import __future__ [as name]\n'
'\n'
- 'That is not a future statement; it’s an ordinary import statement '
+ "That is not a future statement; it's an ordinary import statement "
'with\n'
'no special semantics or syntax restrictions.\n'
'\n'
- 'Code compiled by calls to the built-in functions "exec()" and\n'
- '"compile()" that occur in a module "M" containing a future '
- 'statement\n'
- 'will, by default, use the new syntax or semantics associated with '
- 'the\n'
- 'future statement. This can be controlled by optional arguments '
- 'to\n'
- '"compile()" — see the documentation of that function for details.\n'
+ 'Code compiled by an "exec" statement or calls to the built-in\n'
+ 'functions "compile()" and "execfile()" that occur in a module "M"\n'
+ 'containing a future statement will, by default, use the new '
+ 'syntax or\n'
+ 'semantics associated with the future statement. This can, '
+ 'starting\n'
+ 'with Python 2.2 be controlled by optional arguments to "compile()" '
+ '---\n'
+ 'see the documentation of that function for details.\n'
'\n'
'A future statement typed at an interactive interpreter prompt '
'will\n'
@@ -6350,7 +5606,8 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
' **PEP 236** - Back to the __future__\n'
' The original proposal for the __future__ mechanism.\n',
- 'in': 'Membership test operations\n'
+ 'in': '\n'
+ 'Membership test operations\n'
'**************************\n'
'\n'
'The operators "in" and "not in" test for membership. "x in s"\n'
@@ -6374,160 +5631,161 @@ topics = {'assert': 'The "assert" statement\n'
'"False" otherwise.\n'
'\n'
'For user-defined classes which do not define "__contains__()" but do\n'
- 'define "__iter__()", "x in y" is "True" if some value "z", for which\n'
- 'the expression "x is z or x == z" is true, is produced while '
- 'iterating\n'
- 'over "y". If an exception is raised during the iteration, it is as if\n'
- '"in" raised that exception.\n'
+ 'define "__iter__()", "x in y" is "True" if some value "z" with "x ==\n'
+ 'z" is produced while iterating over "y". If an exception is raised\n'
+ 'during the iteration, it is as if "in" raised that exception.\n'
'\n'
'Lastly, the old-style iteration protocol is tried: if a class defines\n'
'"__getitem__()", "x in y" is "True" if and only if there is a non-\n'
- 'negative integer index *i* such that "x is y[i] or x == y[i]", and no\n'
- 'lower integer index raises the "IndexError" exception. (If any other\n'
+ 'negative integer index *i* such that "x == y[i]", and all lower\n'
+ 'integer indices do not raise "IndexError" exception. (If any other\n'
'exception is raised, it is as if "in" raised that exception).\n'
'\n'
- 'The operator "not in" is defined to have the inverse truth value of\n'
+ 'The operator "not in" is defined to have the inverse true value of\n'
'"in".\n',
- 'integers': 'Integer literals\n'
- '****************\n'
- '\n'
- 'Integer literals are described by the following lexical '
- 'definitions:\n'
- '\n'
- ' integer ::= decinteger | bininteger | octinteger | '
- 'hexinteger\n'
- ' decinteger ::= nonzerodigit (["_"] digit)* | "0"+ (["_"] '
- '"0")*\n'
- ' bininteger ::= "0" ("b" | "B") (["_"] bindigit)+\n'
- ' octinteger ::= "0" ("o" | "O") (["_"] octdigit)+\n'
- ' hexinteger ::= "0" ("x" | "X") (["_"] hexdigit)+\n'
- ' nonzerodigit ::= "1"..."9"\n'
- ' digit ::= "0"..."9"\n'
- ' bindigit ::= "0" | "1"\n'
- ' octdigit ::= "0"..."7"\n'
- ' hexdigit ::= digit | "a"..."f" | "A"..."F"\n'
- '\n'
- 'There is no limit for the length of integer literals apart from '
- 'what\n'
- 'can be stored in available memory.\n'
- '\n'
- 'Underscores are ignored for determining the numeric value of '
- 'the\n'
- 'literal. They can be used to group digits for enhanced '
- 'readability.\n'
- 'One underscore can occur between digits, and after base '
- 'specifiers\n'
- 'like "0x".\n'
- '\n'
- 'Note that leading zeros in a non-zero decimal number are not '
- 'allowed.\n'
- 'This is for disambiguation with C-style octal literals, which '
- 'Python\n'
- 'used before version 3.0.\n'
- '\n'
- 'Some examples of integer literals:\n'
- '\n'
- ' 7 2147483647 0o177 0b100110111\n'
- ' 3 79228162514264337593543950336 0o377 0xdeadbeef\n'
- ' 100_000_000_000 0b_1110_0101\n'
- '\n'
- 'Changed in version 3.6: Underscores are now allowed for '
- 'grouping\n'
- 'purposes in literals.\n',
- 'lambda': 'Lambdas\n'
+ 'integers': '\n'
+ 'Integer and long integer literals\n'
+ '*********************************\n'
+ '\n'
+ 'Integer and long integer literals are described by the '
+ 'following\n'
+ 'lexical definitions:\n'
+ '\n'
+ ' longinteger ::= integer ("l" | "L")\n'
+ ' integer ::= decimalinteger | octinteger | hexinteger | '
+ 'bininteger\n'
+ ' decimalinteger ::= nonzerodigit digit* | "0"\n'
+ ' octinteger ::= "0" ("o" | "O") octdigit+ | "0" octdigit+\n'
+ ' hexinteger ::= "0" ("x" | "X") hexdigit+\n'
+ ' bininteger ::= "0" ("b" | "B") bindigit+\n'
+ ' nonzerodigit ::= "1"..."9"\n'
+ ' octdigit ::= "0"..."7"\n'
+ ' bindigit ::= "0" | "1"\n'
+ ' hexdigit ::= digit | "a"..."f" | "A"..."F"\n'
+ '\n'
+ 'Although both lower case "\'l\'" and upper case "\'L\'" are '
+ 'allowed as\n'
+ 'suffix for long integers, it is strongly recommended to always '
+ 'use\n'
+ '"\'L\'", since the letter "\'l\'" looks too much like the digit '
+ '"\'1\'".\n'
+ '\n'
+ 'Plain integer literals that are above the largest representable '
+ 'plain\n'
+ 'integer (e.g., 2147483647 when using 32-bit arithmetic) are '
+ 'accepted\n'
+ 'as if they were long integers instead. [1] There is no limit '
+ 'for long\n'
+ 'integer literals apart from what can be stored in available '
+ 'memory.\n'
+ '\n'
+ 'Some examples of plain integer literals (first row) and long '
+ 'integer\n'
+ 'literals (second and third rows):\n'
+ '\n'
+ ' 7 2147483647 0177\n'
+ ' 3L 79228162514264337593543950336L 0377L 0x100000000L\n'
+ ' 79228162514264337593543950336 0xdeadbeef\n',
+ 'lambda': '\n'
+ 'Lambdas\n'
'*******\n'
'\n'
- ' lambda_expr ::= "lambda" [parameter_list] ":" '
- 'expression\n'
- ' lambda_expr_nocond ::= "lambda" [parameter_list] ":" '
- 'expression_nocond\n'
+ ' lambda_expr ::= "lambda" [parameter_list]: expression\n'
+ ' old_lambda_expr ::= "lambda" [parameter_list]: old_expression\n'
'\n'
- 'Lambda expressions (sometimes called lambda forms) are used to '
+ 'Lambda expressions (sometimes called lambda forms) have the same\n'
+ 'syntactic position as expressions. They are a shorthand to '
'create\n'
- 'anonymous functions. The expression "lambda parameters: '
+ 'anonymous functions; the expression "lambda arguments: '
'expression"\n'
'yields a function object. The unnamed object behaves like a '
'function\n'
- 'object defined with:\n'
+ 'object defined with\n'
'\n'
- ' def <lambda>(parameters):\n'
+ ' def name(arguments):\n'
' return expression\n'
'\n'
'See section Function definitions for the syntax of parameter '
'lists.\n'
'Note that functions created with lambda expressions cannot '
'contain\n'
- 'statements or annotations.\n',
- 'lists': 'List displays\n'
+ 'statements.\n',
+ 'lists': '\n'
+ 'List displays\n'
'*************\n'
'\n'
'A list display is a possibly empty series of expressions enclosed '
'in\n'
'square brackets:\n'
'\n'
- ' list_display ::= "[" [starred_list | comprehension] "]"\n'
- '\n'
- 'A list display yields a new list object, the contents being '
+ ' list_display ::= "[" [expression_list | '
+ 'list_comprehension] "]"\n'
+ ' list_comprehension ::= expression list_for\n'
+ ' list_for ::= "for" target_list "in" '
+ 'old_expression_list [list_iter]\n'
+ ' old_expression_list ::= old_expression [("," old_expression)+ '
+ '[","]]\n'
+ ' old_expression ::= or_test | old_lambda_expr\n'
+ ' list_iter ::= list_for | list_if\n'
+ ' list_if ::= "if" old_expression [list_iter]\n'
+ '\n'
+ 'A list display yields a new list object. Its contents are '
'specified\n'
- 'by either a list of expressions or a comprehension. When a comma-\n'
- 'separated list of expressions is supplied, its elements are '
- 'evaluated\n'
- 'from left to right and placed into the list object in that order.\n'
- 'When a comprehension is supplied, the list is constructed from the\n'
- 'elements resulting from the comprehension.\n',
- 'naming': 'Naming and binding\n'
+ 'by providing either a list of expressions or a list comprehension.\n'
+ 'When a comma-separated list of expressions is supplied, its '
+ 'elements\n'
+ 'are evaluated from left to right and placed into the list object '
+ 'in\n'
+ 'that order. When a list comprehension is supplied, it consists of '
+ 'a\n'
+ 'single expression followed by at least one "for" clause and zero '
+ 'or\n'
+ 'more "for" or "if" clauses. In this case, the elements of the new\n'
+ 'list are those that would be produced by considering each of the '
+ '"for"\n'
+ 'or "if" clauses a block, nesting from left to right, and '
+ 'evaluating\n'
+ 'the expression to produce a list element each time the innermost '
+ 'block\n'
+ 'is reached [1].\n',
+ 'naming': '\n'
+ 'Naming and binding\n'
'******************\n'
'\n'
- '\n'
- 'Binding of names\n'
- '================\n'
- '\n'
'*Names* refer to objects. Names are introduced by name binding\n'
- 'operations.\n'
+ 'operations. Each occurrence of a name in the program text refers '
+ 'to\n'
+ 'the *binding* of that name established in the innermost function '
+ 'block\n'
+ 'containing the use.\n'
'\n'
- 'The following constructs bind names: formal parameters to '
- 'functions,\n'
- '"import" statements, class and function definitions (these bind '
- 'the\n'
- 'class or function name in the defining block), and targets that '
- 'are\n'
- 'identifiers if occurring in an assignment, "for" loop header, or '
- 'after\n'
- '"as" in a "with" statement or "except" clause. The "import" '
+ 'A *block* is a piece of Python program text that is executed as a\n'
+ 'unit. The following are blocks: a module, a function body, and a '
+ 'class\n'
+ 'definition. Each command typed interactively is a block. A '
+ 'script\n'
+ 'file (a file given as standard input to the interpreter or '
+ 'specified\n'
+ 'on the interpreter command line the first argument) is a code '
+ 'block.\n'
+ 'A script command (a command specified on the interpreter command '
+ 'line\n'
+ "with the '**-c**' option) is a code block. The file read by the\n"
+ 'built-in function "execfile()" is a code block. The string '
+ 'argument\n'
+ 'passed to the built-in function "eval()" and to the "exec" '
'statement\n'
- 'of the form "from ... import *" binds all names defined in the\n'
- 'imported module, except those beginning with an underscore. This '
- 'form\n'
- 'may only be used at the module level.\n'
- '\n'
- 'A target occurring in a "del" statement is also considered bound '
- 'for\n'
- 'this purpose (though the actual semantics are to unbind the '
- 'name).\n'
- '\n'
- 'Each assignment or import statement occurs within a block defined '
- 'by a\n'
- 'class or function definition or at the module level (the '
- 'top-level\n'
- 'code block).\n'
- '\n'
- 'If a name is bound in a block, it is a local variable of that '
- 'block,\n'
- 'unless declared as "nonlocal" or "global". If a name is bound at '
- 'the\n'
- 'module level, it is a global variable. (The variables of the '
- 'module\n'
- 'code block are local and global.) If a variable is used in a '
- 'code\n'
- 'block but not defined there, it is a *free variable*.\n'
- '\n'
- 'Each occurrence of a name in the program text refers to the '
- '*binding*\n'
- 'of that name established by the following name resolution rules.\n'
- '\n'
+ 'is a code block. The expression read and evaluated by the '
+ 'built-in\n'
+ 'function "input()" is a code block.\n'
'\n'
- 'Resolution of names\n'
- '===================\n'
+ 'A code block is executed in an *execution frame*. A frame '
+ 'contains\n'
+ 'some administrative information (used for debugging) and '
+ 'determines\n'
+ "where and how execution continues after the code block's execution "
+ 'has\n'
+ 'completed.\n'
'\n'
'A *scope* defines the visibility of a name within a block. If a '
'local\n'
@@ -6537,22 +5795,71 @@ topics = {'assert': 'The "assert" statement\n'
'blocks\n'
'contained within the defining one, unless a contained block '
'introduces\n'
- 'a different binding for the name.\n'
+ 'a different binding for the name. The scope of names defined in '
+ 'a\n'
+ 'class block is limited to the class block; it does not extend to '
+ 'the\n'
+ 'code blocks of methods -- this includes generator expressions '
+ 'since\n'
+ 'they are implemented using a function scope. This means that the\n'
+ 'following will fail:\n'
+ '\n'
+ ' class A:\n'
+ ' a = 42\n'
+ ' b = list(a + i for i in range(10))\n'
'\n'
'When a name is used in a code block, it is resolved using the '
'nearest\n'
'enclosing scope. The set of all such scopes visible to a code '
'block\n'
- 'is called the block’s *environment*.\n'
+ "is called the block's *environment*.\n"
+ '\n'
+ 'If a name is bound in a block, it is a local variable of that '
+ 'block.\n'
+ 'If a name is bound at the module level, it is a global variable. '
+ '(The\n'
+ 'variables of the module code block are local and global.) If a\n'
+ 'variable is used in a code block but not defined there, it is a '
+ '*free\n'
+ 'variable*.\n'
'\n'
'When a name is not found at all, a "NameError" exception is '
- 'raised. If\n'
- 'the current scope is a function scope, and the name refers to a '
- 'local\n'
- 'variable that has not yet been bound to a value at the point where '
+ 'raised.\n'
+ 'If the name refers to a local variable that has not been bound, a\n'
+ '"UnboundLocalError" exception is raised. "UnboundLocalError" is '
+ 'a\n'
+ 'subclass of "NameError".\n'
+ '\n'
+ 'The following constructs bind names: formal parameters to '
+ 'functions,\n'
+ '"import" statements, class and function definitions (these bind '
'the\n'
- 'name is used, an "UnboundLocalError" exception is raised.\n'
- '"UnboundLocalError" is a subclass of "NameError".\n'
+ 'class or function name in the defining block), and targets that '
+ 'are\n'
+ 'identifiers if occurring in an assignment, "for" loop header, in '
+ 'the\n'
+ 'second position of an "except" clause header or after "as" in a '
+ '"with"\n'
+ 'statement. The "import" statement of the form "from ... import '
+ '*"\n'
+ 'binds all names defined in the imported module, except those '
+ 'beginning\n'
+ 'with an underscore. This form may only be used at the module '
+ 'level.\n'
+ '\n'
+ 'A target occurring in a "del" statement is also considered bound '
+ 'for\n'
+ 'this purpose (though the actual semantics are to unbind the '
+ 'name). It\n'
+ 'is illegal to unbind a name that is referenced by an enclosing '
+ 'scope;\n'
+ 'the compiler will report a "SyntaxError".\n'
+ '\n'
+ 'Each assignment or import statement occurs within a block defined '
+ 'by a\n'
+ 'class or function definition or at the module level (the '
+ 'top-level\n'
+ 'code block).\n'
'\n'
'If a name binding operation occurs anywhere within a code block, '
'all\n'
@@ -6560,41 +5867,52 @@ topics = {'assert': 'The "assert" statement\n'
'the\n'
'current block. This can lead to errors when a name is used within '
'a\n'
- 'block before it is bound. This rule is subtle. Python lacks\n'
+ 'block before it is bound. This rule is subtle. Python lacks\n'
'declarations and allows name binding operations to occur anywhere\n'
'within a code block. The local variables of a code block can be\n'
'determined by scanning the entire text of the block for name '
'binding\n'
'operations.\n'
'\n'
- 'If the "global" statement occurs within a block, all uses of the '
+ 'If the global statement occurs within a block, all uses of the '
'name\n'
'specified in the statement refer to the binding of that name in '
'the\n'
- 'top-level namespace. Names are resolved in the top-level '
- 'namespace by\n'
+ 'top-level namespace. Names are resolved in the top-level namespace '
+ 'by\n'
'searching the global namespace, i.e. the namespace of the module\n'
'containing the code block, and the builtins namespace, the '
'namespace\n'
- 'of the module "builtins". The global namespace is searched '
- 'first. If\n'
- 'the name is not found there, the builtins namespace is searched. '
- 'The\n'
- '"global" statement must precede all uses of the name.\n'
+ 'of the module "__builtin__". The global namespace is searched '
+ 'first.\n'
+ 'If the name is not found there, the builtins namespace is '
+ 'searched.\n'
+ 'The global statement must precede all uses of the name.\n'
'\n'
- 'The "global" statement has the same scope as a name binding '
- 'operation\n'
- 'in the same block. If the nearest enclosing scope for a free '
- 'variable\n'
- 'contains a global statement, the free variable is treated as a '
- 'global.\n'
+ 'The builtins namespace associated with the execution of a code '
+ 'block\n'
+ 'is actually found by looking up the name "__builtins__" in its '
+ 'global\n'
+ 'namespace; this should be a dictionary or a module (in the latter '
+ 'case\n'
+ "the module's dictionary is used). By default, when in the "
+ '"__main__"\n'
+ 'module, "__builtins__" is the built-in module "__builtin__" (note: '
+ 'no\n'
+ '\'s\'); when in any other module, "__builtins__" is an alias for '
+ 'the\n'
+ 'dictionary of the "__builtin__" module itself. "__builtins__" can '
+ 'be\n'
+ 'set to a user-created dictionary to create a weak form of '
+ 'restricted\n'
+ 'execution.\n'
'\n'
- 'The "nonlocal" statement causes corresponding names to refer to\n'
- 'previously bound variables in the nearest enclosing function '
- 'scope.\n'
- '"SyntaxError" is raised at compile time if the given name does '
- 'not\n'
- 'exist in any enclosing function scope.\n'
+ '**CPython implementation detail:** Users should not touch\n'
+ '"__builtins__"; it is strictly an implementation detail. Users\n'
+ 'wanting to override values in the builtins namespace should '
+ '"import"\n'
+ 'the "__builtin__" (no \'s\') module and modify its attributes\n'
+ 'appropriately.\n'
'\n'
'The namespace for a module is automatically created the first time '
'a\n'
@@ -6602,128 +5920,79 @@ topics = {'assert': 'The "assert" statement\n'
'called\n'
'"__main__".\n'
'\n'
- 'Class definition blocks and arguments to "exec()" and "eval()" '
- 'are\n'
- 'special in the context of name resolution. A class definition is '
- 'an\n'
- 'executable statement that may use and define names. These '
- 'references\n'
- 'follow the normal rules for name resolution with an exception '
- 'that\n'
- 'unbound local variables are looked up in the global namespace. '
- 'The\n'
- 'namespace of the class definition becomes the attribute dictionary '
- 'of\n'
- 'the class. The scope of names defined in a class block is limited '
- 'to\n'
- 'the class block; it does not extend to the code blocks of methods '
- '–\n'
- 'this includes comprehensions and generator expressions since they '
- 'are\n'
- 'implemented using a function scope. This means that the '
- 'following\n'
- 'will fail:\n'
+ 'The "global" statement has the same scope as a name binding '
+ 'operation\n'
+ 'in the same block. If the nearest enclosing scope for a free '
+ 'variable\n'
+ 'contains a global statement, the free variable is treated as a '
+ 'global.\n'
'\n'
- ' class A:\n'
- ' a = 42\n'
- ' b = list(a + i for i in range(10))\n'
+ 'A class definition is an executable statement that may use and '
+ 'define\n'
+ 'names. These references follow the normal rules for name '
+ 'resolution.\n'
+ 'The namespace of the class definition becomes the attribute '
+ 'dictionary\n'
+ 'of the class. Names defined at the class scope are not visible '
+ 'in\n'
+ 'methods.\n'
'\n'
'\n'
- 'Builtins and restricted execution\n'
+ 'Interaction with dynamic features\n'
'=================================\n'
'\n'
- '**CPython implementation detail:** Users should not touch\n'
- '"__builtins__"; it is strictly an implementation detail. Users\n'
- 'wanting to override values in the builtins namespace should '
- '"import"\n'
- 'the "builtins" module and modify its attributes appropriately.\n'
- '\n'
- 'The builtins namespace associated with the execution of a code '
- 'block\n'
- 'is actually found by looking up the name "__builtins__" in its '
- 'global\n'
- 'namespace; this should be a dictionary or a module (in the latter '
- 'case\n'
- 'the module’s dictionary is used). By default, when in the '
- '"__main__"\n'
- 'module, "__builtins__" is the built-in module "builtins"; when in '
- 'any\n'
- 'other module, "__builtins__" is an alias for the dictionary of '
- 'the\n'
- '"builtins" module itself.\n'
+ 'There are several cases where Python statements are illegal when '
+ 'used\n'
+ 'in conjunction with nested scopes that contain free variables.\n'
'\n'
+ 'If a variable is referenced in an enclosing scope, it is illegal '
+ 'to\n'
+ 'delete the name. An error will be reported at compile time.\n'
'\n'
- 'Interaction with dynamic features\n'
- '=================================\n'
- '\n'
- 'Name resolution of free variables occurs at runtime, not at '
- 'compile\n'
- 'time. This means that the following code will print 42:\n'
+ 'If the wild card form of import --- "import *" --- is used in a\n'
+ 'function and the function contains or is a nested block with free\n'
+ 'variables, the compiler will raise a "SyntaxError".\n'
'\n'
- ' i = 10\n'
- ' def f():\n'
- ' print(i)\n'
- ' i = 42\n'
- ' f()\n'
+ 'If "exec" is used in a function and the function contains or is a\n'
+ 'nested block with free variables, the compiler will raise a\n'
+ '"SyntaxError" unless the exec explicitly specifies the local '
+ 'namespace\n'
+ 'for the "exec". (In other words, "exec obj" would be illegal, '
+ 'but\n'
+ '"exec obj in ns" would be legal.)\n'
'\n'
- 'The "eval()" and "exec()" functions do not have access to the '
- 'full\n'
- 'environment for resolving names. Names may be resolved in the '
- 'local\n'
- 'and global namespaces of the caller. Free variables are not '
- 'resolved\n'
- 'in the nearest enclosing namespace, but in the global namespace. '
- '[1]\n'
- 'The "exec()" and "eval()" functions have optional arguments to\n'
+ 'The "eval()", "execfile()", and "input()" functions and the '
+ '"exec"\n'
+ 'statement do not have access to the full environment for '
+ 'resolving\n'
+ 'names. Names may be resolved in the local and global namespaces '
+ 'of\n'
+ 'the caller. Free variables are not resolved in the nearest '
+ 'enclosing\n'
+ 'namespace, but in the global namespace. [1] The "exec" statement '
+ 'and\n'
+ 'the "eval()" and "execfile()" functions have optional arguments '
+ 'to\n'
'override the global and local namespace. If only one namespace '
'is\n'
'specified, it is used for both.\n',
- 'nonlocal': 'The "nonlocal" statement\n'
- '************************\n'
- '\n'
- ' nonlocal_stmt ::= "nonlocal" identifier ("," identifier)*\n'
- '\n'
- 'The "nonlocal" statement causes the listed identifiers to refer '
- 'to\n'
- 'previously bound variables in the nearest enclosing scope '
- 'excluding\n'
- 'globals. This is important because the default behavior for '
- 'binding is\n'
- 'to search the local namespace first. The statement allows\n'
- 'encapsulated code to rebind variables outside of the local '
- 'scope\n'
- 'besides the global (module) scope.\n'
- '\n'
- 'Names listed in a "nonlocal" statement, unlike those listed in '
- 'a\n'
- '"global" statement, must refer to pre-existing bindings in an\n'
- 'enclosing scope (the scope in which a new binding should be '
- 'created\n'
- 'cannot be determined unambiguously).\n'
- '\n'
- 'Names listed in a "nonlocal" statement must not collide with '
- 'pre-\n'
- 'existing bindings in the local scope.\n'
- '\n'
- 'See also:\n'
- '\n'
- ' **PEP 3104** - Access to Names in Outer Scopes\n'
- ' The specification for the "nonlocal" statement.\n',
- 'numbers': 'Numeric literals\n'
+ 'numbers': '\n'
+ 'Numeric literals\n'
'****************\n'
'\n'
- 'There are three types of numeric literals: integers, floating '
- 'point\n'
- 'numbers, and imaginary numbers. There are no complex literals\n'
- '(complex numbers can be formed by adding a real number and an\n'
- 'imaginary number).\n'
+ 'There are four types of numeric literals: plain integers, long\n'
+ 'integers, floating point numbers, and imaginary numbers. There '
+ 'are no\n'
+ 'complex literals (complex numbers can be formed by adding a real\n'
+ 'number and an imaginary number).\n'
'\n'
'Note that numeric literals do not include a sign; a phrase like '
'"-1"\n'
- 'is actually an expression composed of the unary operator ‘"-"‘ '
+ 'is actually an expression composed of the unary operator \'"-"\' '
'and the\n'
'literal "1".\n',
- 'numeric-types': 'Emulating numeric types\n'
+ 'numeric-types': '\n'
+ 'Emulating numeric types\n'
'***********************\n'
'\n'
'The following methods can be defined to emulate numeric '
@@ -6737,8 +6006,6 @@ topics = {'assert': 'The "assert" statement\n'
'object.__add__(self, other)\n'
'object.__sub__(self, other)\n'
'object.__mul__(self, other)\n'
- 'object.__matmul__(self, other)\n'
- 'object.__truediv__(self, other)\n'
'object.__floordiv__(self, other)\n'
'object.__mod__(self, other)\n'
'object.__divmod__(self, other)\n'
@@ -6751,21 +6018,21 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
' These methods are called to implement the binary '
'arithmetic\n'
- ' operations ("+", "-", "*", "@", "/", "//", "%", '
- '"divmod()",\n'
- ' "pow()", "**", "<<", ">>", "&", "^", "|"). For '
- 'instance, to\n'
- ' evaluate the expression "x + y", where *x* is an '
- 'instance of a\n'
- ' class that has an "__add__()" method, "x.__add__(y)" is '
- 'called.\n'
- ' The "__divmod__()" method should be the equivalent to '
- 'using\n'
- ' "__floordiv__()" and "__mod__()"; it should not be '
- 'related to\n'
- ' "__truediv__()". Note that "__pow__()" should be '
- 'defined to accept\n'
- ' an optional third argument if the ternary version of the '
+ ' operations ("+", "-", "*", "//", "%", "divmod()", '
+ '"pow()", "**",\n'
+ ' "<<", ">>", "&", "^", "|"). For instance, to evaluate '
+ 'the\n'
+ ' expression "x + y", where *x* is an instance of a class '
+ 'that has an\n'
+ ' "__add__()" method, "x.__add__(y)" is called. The '
+ '"__divmod__()"\n'
+ ' method should be the equivalent to using '
+ '"__floordiv__()" and\n'
+ ' "__mod__()"; it should not be related to "__truediv__()" '
+ '(described\n'
+ ' below). Note that "__pow__()" should be defined to '
+ 'accept an\n'
+ ' optional third argument if the ternary version of the '
'built-in\n'
' "pow()" function is to be supported.\n'
'\n'
@@ -6773,10 +6040,23 @@ topics = {'assert': 'The "assert" statement\n'
'with the\n'
' supplied arguments, it should return "NotImplemented".\n'
'\n'
+ 'object.__div__(self, other)\n'
+ 'object.__truediv__(self, other)\n'
+ '\n'
+ ' The division operator ("/") is implemented by these '
+ 'methods. The\n'
+ ' "__truediv__()" method is used when '
+ '"__future__.division" is in\n'
+ ' effect, otherwise "__div__()" is used. If only one of '
+ 'these two\n'
+ ' methods is defined, the object will not support division '
+ 'in the\n'
+ ' alternate context; "TypeError" will be raised instead.\n'
+ '\n'
'object.__radd__(self, other)\n'
'object.__rsub__(self, other)\n'
'object.__rmul__(self, other)\n'
- 'object.__rmatmul__(self, other)\n'
+ 'object.__rdiv__(self, other)\n'
'object.__rtruediv__(self, other)\n'
'object.__rfloordiv__(self, other)\n'
'object.__rmod__(self, other)\n'
@@ -6790,15 +6070,15 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
' These methods are called to implement the binary '
'arithmetic\n'
- ' operations ("+", "-", "*", "@", "/", "//", "%", '
- '"divmod()",\n'
- ' "pow()", "**", "<<", ">>", "&", "^", "|") with reflected '
- '(swapped)\n'
- ' operands. These functions are only called if the left '
- 'operand does\n'
- ' not support the corresponding operation [3] and the '
- 'operands are of\n'
- ' different types. [4] For instance, to evaluate the '
+ ' operations ("+", "-", "*", "/", "%", "divmod()", '
+ '"pow()", "**",\n'
+ ' "<<", ">>", "&", "^", "|") with reflected (swapped) '
+ 'operands.\n'
+ ' These functions are only called if the left operand does '
+ 'not\n'
+ ' support the corresponding operation and the operands are '
+ 'of\n'
+ ' different types. [2] For instance, to evaluate the '
'expression "x -\n'
' y", where *y* is an instance of a class that has an '
'"__rsub__()"\n'
@@ -6810,20 +6090,20 @@ topics = {'assert': 'The "assert" statement\n'
'"__rpow__()" (the\n'
' coercion rules would become too complicated).\n'
'\n'
- ' Note: If the right operand’s type is a subclass of the '
+ " Note: If the right operand's type is a subclass of the "
'left\n'
- ' operand’s type and that subclass provides the '
+ " operand's type and that subclass provides the "
'reflected method\n'
' for the operation, this method will be called before '
'the left\n'
- ' operand’s non-reflected method. This behavior allows '
+ " operand's non-reflected method. This behavior allows "
'subclasses\n'
- ' to override their ancestors’ operations.\n'
+ " to override their ancestors' operations.\n"
'\n'
'object.__iadd__(self, other)\n'
'object.__isub__(self, other)\n'
'object.__imul__(self, other)\n'
- 'object.__imatmul__(self, other)\n'
+ 'object.__idiv__(self, other)\n'
'object.__itruediv__(self, other)\n'
'object.__ifloordiv__(self, other)\n'
'object.__imod__(self, other)\n'
@@ -6836,31 +6116,26 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
' These methods are called to implement the augmented '
'arithmetic\n'
- ' assignments ("+=", "-=", "*=", "@=", "/=", "//=", "%=", '
- '"**=",\n'
- ' "<<=", ">>=", "&=", "^=", "|="). These methods should '
- 'attempt to\n'
- ' do the operation in-place (modifying *self*) and return '
- 'the result\n'
- ' (which could be, but does not have to be, *self*). If a '
- 'specific\n'
- ' method is not defined, the augmented assignment falls '
- 'back to the\n'
- ' normal methods. For instance, if *x* is an instance of '
- 'a class\n'
- ' with an "__iadd__()" method, "x += y" is equivalent to '
- '"x =\n'
- ' x.__iadd__(y)" . Otherwise, "x.__add__(y)" and '
- '"y.__radd__(x)" are\n'
- ' considered, as with the evaluation of "x + y". In '
- 'certain\n'
- ' situations, augmented assignment can result in '
- 'unexpected errors\n'
- ' (see Why does a_tuple[i] += [‘item’] raise an exception '
- 'when the\n'
- ' addition works?), but this behavior is in fact part of '
- 'the data\n'
- ' model.\n'
+ ' assignments ("+=", "-=", "*=", "/=", "//=", "%=", "**=", '
+ '"<<=",\n'
+ ' ">>=", "&=", "^=", "|="). These methods should attempt '
+ 'to do the\n'
+ ' operation in-place (modifying *self*) and return the '
+ 'result (which\n'
+ ' could be, but does not have to be, *self*). If a '
+ 'specific method\n'
+ ' is not defined, the augmented assignment falls back to '
+ 'the normal\n'
+ ' methods. For instance, to execute the statement "x += '
+ 'y", where\n'
+ ' *x* is an instance of a class that has an "__iadd__()" '
+ 'method,\n'
+ ' "x.__iadd__(y)" is called. If *x* is an instance of a '
+ 'class that\n'
+ ' does not define a "__iadd__()" method, "x.__add__(y)" '
+ 'and\n'
+ ' "y.__radd__(x)" are considered, as with the evaluation '
+ 'of "x + y".\n'
'\n'
'object.__neg__(self)\n'
'object.__pos__(self)\n'
@@ -6873,94 +6148,93 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
'object.__complex__(self)\n'
'object.__int__(self)\n'
+ 'object.__long__(self)\n'
'object.__float__(self)\n'
'\n'
' Called to implement the built-in functions "complex()", '
- '"int()" and\n'
- ' "float()". Should return a value of the appropriate '
- 'type.\n'
+ '"int()",\n'
+ ' "long()", and "float()". Should return a value of the '
+ 'appropriate\n'
+ ' type.\n'
+ '\n'
+ 'object.__oct__(self)\n'
+ 'object.__hex__(self)\n'
+ '\n'
+ ' Called to implement the built-in functions "oct()" and '
+ '"hex()".\n'
+ ' Should return a string value.\n'
'\n'
'object.__index__(self)\n'
'\n'
- ' Called to implement "operator.index()", and whenever '
- 'Python needs\n'
- ' to losslessly convert the numeric object to an integer '
- 'object (such\n'
- ' as in slicing, or in the built-in "bin()", "hex()" and '
- '"oct()"\n'
- ' functions). Presence of this method indicates that the '
- 'numeric\n'
- ' object is an integer type. Must return an integer.\n'
- '\n'
- ' If "__int__()", "__float__()" and "__complex__()" are '
- 'not defined\n'
- ' then corresponding built-in functions "int()", "float()" '
- 'and\n'
- ' "complex()" fall back to "__index__()".\n'
- '\n'
- 'object.__round__(self[, ndigits])\n'
- 'object.__trunc__(self)\n'
- 'object.__floor__(self)\n'
- 'object.__ceil__(self)\n'
- '\n'
- ' Called to implement the built-in function "round()" and '
- '"math"\n'
- ' functions "trunc()", "floor()" and "ceil()". Unless '
- '*ndigits* is\n'
- ' passed to "__round__()" all these methods should return '
- 'the value\n'
- ' of the object truncated to an "Integral" (typically an '
- '"int").\n'
- '\n'
- ' If "__int__()" is not defined then the built-in function '
- '"int()"\n'
- ' falls back to "__trunc__()".\n',
- 'objects': 'Objects, values and types\n'
+ ' Called to implement "operator.index()". Also called '
+ 'whenever\n'
+ ' Python needs an integer object (such as in slicing). '
+ 'Must return\n'
+ ' an integer (int or long).\n'
+ '\n'
+ ' New in version 2.5.\n'
+ '\n'
+ 'object.__coerce__(self, other)\n'
+ '\n'
+ ' Called to implement "mixed-mode" numeric arithmetic. '
+ 'Should either\n'
+ ' return a 2-tuple containing *self* and *other* converted '
+ 'to a\n'
+ ' common numeric type, or "None" if conversion is '
+ 'impossible. When\n'
+ ' the common type would be the type of "other", it is '
+ 'sufficient to\n'
+ ' return "None", since the interpreter will also ask the '
+ 'other object\n'
+ ' to attempt a coercion (but sometimes, if the '
+ 'implementation of the\n'
+ ' other type cannot be changed, it is useful to do the '
+ 'conversion to\n'
+ ' the other type here). A return value of '
+ '"NotImplemented" is\n'
+ ' equivalent to returning "None".\n',
+ 'objects': '\n'
+ 'Objects, values and types\n'
'*************************\n'
'\n'
- '*Objects* are Python’s abstraction for data. All data in a '
+ "*Objects* are Python's abstraction for data. All data in a "
'Python\n'
'program is represented by objects or by relations between '
'objects. (In\n'
- 'a sense, and in conformance to Von Neumann’s model of a “stored\n'
- 'program computer,” code is also represented by objects.)\n'
+ 'a sense, and in conformance to Von Neumann\'s model of a "stored\n'
+ 'program computer," code is also represented by objects.)\n'
'\n'
- 'Every object has an identity, a type and a value. An object’s\n'
+ "Every object has an identity, a type and a value. An object's\n"
'*identity* never changes once it has been created; you may think '
'of it\n'
- 'as the object’s address in memory. The ‘"is"’ operator compares '
- 'the\n'
+ 'as the object\'s address in memory. The \'"is"\' operator '
+ 'compares the\n'
'identity of two objects; the "id()" function returns an integer\n'
- 'representing its identity.\n'
- '\n'
- '**CPython implementation detail:** For CPython, "id(x)" is the '
- 'memory\n'
- 'address where "x" is stored.\n'
- '\n'
- 'An object’s type determines the operations that the object '
- 'supports\n'
- '(e.g., “does it have a length?”) and also defines the possible '
- 'values\n'
- 'for objects of that type. The "type()" function returns an '
- 'object’s\n'
- 'type (which is an object itself). Like its identity, an '
- 'object’s\n'
- '*type* is also unchangeable. [1]\n'
- '\n'
- 'The *value* of some objects can change. Objects whose value can\n'
- 'change are said to be *mutable*; objects whose value is '
- 'unchangeable\n'
- 'once they are created are called *immutable*. (The value of an\n'
- 'immutable container object that contains a reference to a '
- 'mutable\n'
- 'object can change when the latter’s value is changed; however '
- 'the\n'
- 'container is still considered immutable, because the collection '
- 'of\n'
+ 'representing its identity (currently implemented as its address). '
+ 'An\n'
+ "object's *type* is also unchangeable. [1] An object's type "
+ 'determines\n'
+ 'the operations that the object supports (e.g., "does it have a\n'
+ 'length?") and also defines the possible values for objects of '
+ 'that\n'
+ 'type. The "type()" function returns an object\'s type (which is '
+ 'an\n'
+ 'object itself). The *value* of some objects can change. '
+ 'Objects\n'
+ 'whose value can change are said to be *mutable*; objects whose '
+ 'value\n'
+ 'is unchangeable once they are created are called *immutable*. '
+ '(The\n'
+ 'value of an immutable container object that contains a reference '
+ 'to a\n'
+ "mutable object can change when the latter's value is changed; "
+ 'however\n'
+ 'the container is still considered immutable, because the '
+ 'collection of\n'
'objects it contains cannot be changed. So, immutability is not\n'
'strictly the same as having an unchangeable value, it is more '
'subtle.)\n'
- 'An object’s mutability is determined by its type; for instance,\n'
+ "An object's mutability is determined by its type; for instance,\n"
'numbers, strings and tuples are immutable, while dictionaries '
'and\n'
'lists are mutable.\n'
@@ -6968,9 +6242,9 @@ topics = {'assert': 'The "assert" statement\n'
'Objects are never explicitly destroyed; however, when they '
'become\n'
'unreachable they may be garbage-collected. An implementation is\n'
- 'allowed to postpone garbage collection or omit it altogether — it '
- 'is a\n'
- 'matter of implementation quality how garbage collection is\n'
+ 'allowed to postpone garbage collection or omit it altogether --- '
+ 'it is\n'
+ 'a matter of implementation quality how garbage collection is\n'
'implemented, as long as no objects are collected that are still\n'
'reachable.\n'
'\n'
@@ -6987,17 +6261,16 @@ topics = {'assert': 'The "assert" statement\n'
'implementations act differently and CPython may change. Do not '
'depend\n'
'on immediate finalization of objects when they become unreachable '
- '(so\n'
- 'you should always close files explicitly).\n'
+ '(ex:\n'
+ 'always close files).\n'
'\n'
- 'Note that the use of the implementation’s tracing or debugging\n'
+ "Note that the use of the implementation's tracing or debugging\n"
'facilities may keep objects alive that would normally be '
'collectable.\n'
- 'Also note that catching an exception with a ‘"try"…"except"’ '
- 'statement\n'
- 'may keep objects alive.\n'
+ 'Also note that catching an exception with a \'"try"..."except"\'\n'
+ 'statement may keep objects alive.\n'
'\n'
- 'Some objects contain references to “external” resources such as '
+ 'Some objects contain references to "external" resources such as '
'open\n'
'files or windows. It is understood that these resources are '
'freed\n'
@@ -7008,13 +6281,13 @@ topics = {'assert': 'The "assert" statement\n'
'release the external resource, usually a "close()" method. '
'Programs\n'
'are strongly recommended to explicitly close such objects. The\n'
- '‘"try"…"finally"’ statement and the ‘"with"’ statement provide\n'
- 'convenient ways to do this.\n'
+ '\'"try"..."finally"\' statement provides a convenient way to do '
+ 'this.\n'
'\n'
'Some objects contain references to other objects; these are '
'called\n'
'*containers*. Examples of containers are tuples, lists and\n'
- 'dictionaries. The references are part of a container’s value. '
+ "dictionaries. The references are part of a container's value. "
'In\n'
'most cases, when we talk about the value of a container, we imply '
'the\n'
@@ -7043,38 +6316,34 @@ topics = {'assert': 'The "assert" statement\n'
'created empty lists. (Note that "c = d = []" assigns the same '
'object\n'
'to both "c" and "d".)\n',
- 'operator-summary': 'Operator precedence\n'
+ 'operator-summary': '\n'
+ 'Operator precedence\n'
'*******************\n'
'\n'
- 'The following table summarizes the operator precedence '
- 'in Python, from\n'
- 'lowest precedence (least binding) to highest precedence '
- '(most\n'
- 'binding). Operators in the same box have the same '
+ 'The following table summarizes the operator precedences '
+ 'in Python,\n'
+ 'from lowest precedence (least binding) to highest '
+ 'precedence (most\n'
+ 'binding). Operators in the same box have the same '
'precedence. Unless\n'
'the syntax is explicitly given, operators are binary. '
'Operators in\n'
'the same box group left to right (except for '
- 'exponentiation, which\n'
- 'groups from right to left).\n'
- '\n'
- 'Note that comparisons, membership tests, and identity '
- 'tests, all have\n'
- 'the same precedence and have a left-to-right chaining '
- 'feature as\n'
- 'described in the Comparisons section.\n'
+ 'comparisons, including\n'
+ 'tests, which all have the same precedence and chain from '
+ 'left to right\n'
+ '--- see section Comparisons --- and exponentiation, '
+ 'which groups from\n'
+ 'right to left).\n'
'\n'
'+-------------------------------------------------+---------------------------------------+\n'
'| Operator | '
'Description |\n'
- '|=================================================|=======================================|\n'
- '| ":=" | '
- 'Assignment expression |\n'
- '+-------------------------------------------------+---------------------------------------+\n'
+ '+=================================================+=======================================+\n'
'| "lambda" | '
'Lambda expression |\n'
'+-------------------------------------------------+---------------------------------------+\n'
- '| "if" – "else" | '
+ '| "if" -- "else" | '
'Conditional expression |\n'
'+-------------------------------------------------+---------------------------------------+\n'
'| "or" | '
@@ -7088,7 +6357,7 @@ topics = {'assert': 'The "assert" statement\n'
'+-------------------------------------------------+---------------------------------------+\n'
'| "in", "not in", "is", "is not", "<", "<=", ">", | '
'Comparisons, including membership |\n'
- '| ">=", "!=", "==" | '
+ '| ">=", "<>", "!=", "==" | '
'tests and identity tests |\n'
'+-------------------------------------------------+---------------------------------------+\n'
'| "|" | '
@@ -7106,38 +6375,41 @@ topics = {'assert': 'The "assert" statement\n'
'| "+", "-" | '
'Addition and subtraction |\n'
'+-------------------------------------------------+---------------------------------------+\n'
- '| "*", "@", "/", "//", "%" | '
- 'Multiplication, matrix |\n'
- '| | '
- 'multiplication, division, floor |\n'
+ '| "*", "/", "//", "%" | '
+ 'Multiplication, division, remainder |\n'
'| | '
- 'division, remainder [5] |\n'
+ '[7] |\n'
'+-------------------------------------------------+---------------------------------------+\n'
'| "+x", "-x", "~x" | '
'Positive, negative, bitwise NOT |\n'
'+-------------------------------------------------+---------------------------------------+\n'
'| "**" | '
- 'Exponentiation [6] |\n'
- '+-------------------------------------------------+---------------------------------------+\n'
- '| "await" "x" | '
- 'Await expression |\n'
+ 'Exponentiation [8] |\n'
'+-------------------------------------------------+---------------------------------------+\n'
'| "x[index]", "x[index:index]", | '
'Subscription, slicing, call, |\n'
'| "x(arguments...)", "x.attribute" | '
'attribute reference |\n'
'+-------------------------------------------------+---------------------------------------+\n'
- '| "(expressions...)", "[expressions...]", "{key: | '
- 'Binding or parenthesized expression, |\n'
- '| value...}", "{expressions...}" | list '
- 'display, dictionary display, set |\n'
+ '| "(expressions...)", "[expressions...]", "{key: | '
+ 'Binding or tuple display, list |\n'
+ '| value...}", "`expressions...`" | '
+ 'display, dictionary display, string |\n'
'| | '
- 'display |\n'
+ 'conversion |\n'
'+-------------------------------------------------+---------------------------------------+\n'
'\n'
'-[ Footnotes ]-\n'
'\n'
- '[1] While "abs(x%y) < abs(y)" is true mathematically, '
+ '[1] In Python 2.3 and later releases, a list '
+ 'comprehension "leaks"\n'
+ ' the control variables of each "for" it contains into '
+ 'the\n'
+ ' containing scope. However, this behavior is '
+ 'deprecated, and\n'
+ ' relying on it will not work in Python 3.\n'
+ '\n'
+ '[2] While "abs(x%y) < abs(y)" is true mathematically, '
'for floats\n'
' it may not be true numerically due to roundoff. For '
'example, and\n'
@@ -7156,20 +6428,20 @@ topics = {'assert': 'The "assert" statement\n'
' Which approach is more appropriate depends on the '
'application.\n'
'\n'
- '[2] If x is very close to an exact integer multiple of '
- 'y, it’s\n'
- ' possible for "x//y" to be one larger than '
- '"(x-x%y)//y" due to\n'
+ '[3] If x is very close to an exact integer multiple of '
+ "y, it's\n"
+ ' possible for "floor(x/y)" to be one larger than '
+ '"(x-x%y)/y" due to\n'
' rounding. In such cases, Python returns the latter '
'result, in\n'
' order to preserve that "divmod(x,y)[0] * y + x % y" '
'be very close\n'
' to "x".\n'
'\n'
- '[3] The Unicode standard distinguishes between *code '
+ '[4] The Unicode standard distinguishes between *code '
'points* (e.g.\n'
- ' U+0041) and *abstract characters* (e.g. “LATIN '
- 'CAPITAL LETTER A”).\n'
+ ' U+0041) and *abstract characters* (e.g. "LATIN '
+ 'CAPITAL LETTER A").\n'
' While most abstract characters in Unicode are only '
'represented\n'
' using one code point, there is a number of abstract '
@@ -7177,8 +6449,8 @@ topics = {'assert': 'The "assert" statement\n'
' that can in addition be represented using a sequence '
'of more than\n'
' one code point. For example, the abstract character '
- '“LATIN\n'
- ' CAPITAL LETTER C WITH CEDILLA” can be represented as '
+ '"LATIN\n'
+ ' CAPITAL LETTER C WITH CEDILLA" can be represented as '
'a single\n'
' *precomposed character* at code position U+00C7, or '
'as a sequence\n'
@@ -7188,22 +6460,34 @@ topics = {'assert': 'The "assert" statement\n'
'code position\n'
' U+0327 (COMBINING CEDILLA).\n'
'\n'
- ' The comparison operators on strings compare at the '
- 'level of\n'
- ' Unicode code points. This may be counter-intuitive '
- 'to humans. For\n'
- ' example, ""\\u00C7" == "\\u0043\\u0327"" is "False", '
- 'even though both\n'
- ' strings represent the same abstract character “LATIN '
- 'CAPITAL\n'
- ' LETTER C WITH CEDILLA”.\n'
+ ' The comparison operators on unicode strings compare '
+ 'at the level\n'
+ ' of Unicode code points. This may be '
+ 'counter-intuitive to humans.\n'
+ ' For example, "u"\\u00C7" == u"\\u0043\\u0327"" is '
+ '"False", even\n'
+ ' though both strings represent the same abstract '
+ 'character "LATIN\n'
+ ' CAPITAL LETTER C WITH CEDILLA".\n'
'\n'
' To compare strings at the level of abstract '
'characters (that is,\n'
' in a way intuitive to humans), use '
'"unicodedata.normalize()".\n'
'\n'
- '[4] Due to automatic garbage-collection, free lists, and '
+ '[5] Earlier versions of Python used lexicographic '
+ 'comparison of\n'
+ ' the sorted (key, value) lists, but this was very '
+ 'expensive for the\n'
+ ' common case of comparing for equality. An even '
+ 'earlier version of\n'
+ ' Python compared dictionaries by identity only, but '
+ 'this caused\n'
+ ' surprises because people expected to be able to test '
+ 'a dictionary\n'
+ ' for emptiness by comparing it to "{}".\n'
+ '\n'
+ '[6] Due to automatic garbage-collection, free lists, and '
'the\n'
' dynamic nature of descriptors, you may notice '
'seemingly unusual\n'
@@ -7213,29 +6497,30 @@ topics = {'assert': 'The "assert" statement\n'
'constants.\n'
' Check their documentation for more info.\n'
'\n'
- '[5] The "%" operator is also used for string formatting; '
+ '[7] The "%" operator is also used for string formatting; '
'the same\n'
' precedence applies.\n'
'\n'
- '[6] The power operator "**" binds less tightly than an '
+ '[8] The power operator "**" binds less tightly than an '
'arithmetic\n'
' or bitwise unary operator on its right, that is, '
'"2**-1" is "0.5".\n',
- 'pass': 'The "pass" statement\n'
+ 'pass': '\n'
+ 'The "pass" statement\n'
'********************\n'
'\n'
' pass_stmt ::= "pass"\n'
'\n'
- '"pass" is a null operation — when it is executed, nothing happens. '
- 'It\n'
- 'is useful as a placeholder when a statement is required '
- 'syntactically,\n'
- 'but no code needs to be executed, for example:\n'
+ '"pass" is a null operation --- when it is executed, nothing '
+ 'happens.\n'
+ 'It is useful as a placeholder when a statement is required\n'
+ 'syntactically, but no code needs to be executed, for example:\n'
'\n'
' def f(arg): pass # a function that does nothing (yet)\n'
'\n'
' class C: pass # a class with no methods (yet)\n',
- 'power': 'The power operator\n'
+ 'power': '\n'
+ 'The power operator\n'
'******************\n'
'\n'
'The power operator binds more tightly than unary operators on its\n'
@@ -7243,7 +6528,7 @@ topics = {'assert': 'The "assert" statement\n'
'The\n'
'syntax is:\n'
'\n'
- ' power ::= (await_expr | primary) ["**" u_expr]\n'
+ ' power ::= primary ["**" u_expr]\n'
'\n'
'Thus, in an unparenthesized sequence of power and unary operators, '
'the\n'
@@ -7256,125 +6541,146 @@ topics = {'assert': 'The "assert" statement\n'
'argument\n'
'raised to the power of its right argument. The numeric arguments '
'are\n'
- 'first converted to a common type, and the result is of that type.\n'
+ 'first converted to a common type. The result type is that of the\n'
+ 'arguments after coercion.\n'
'\n'
- 'For int operands, the result has the same type as the operands '
- 'unless\n'
- 'the second argument is negative; in that case, all arguments are\n'
- 'converted to float and a float result is delivered. For example,\n'
- '"10**2" returns "100", but "10**-2" returns "0.01".\n'
+ 'With mixed operand types, the coercion rules for binary arithmetic\n'
+ 'operators apply. For int and long int operands, the result has the\n'
+ 'same type as the operands (after coercion) unless the second '
+ 'argument\n'
+ 'is negative; in that case, all arguments are converted to float and '
+ 'a\n'
+ 'float result is delivered. For example, "10**2" returns "100", but\n'
+ '"10**-2" returns "0.01". (This last feature was added in Python '
+ '2.2.\n'
+ 'In Python 2.1 and before, if both arguments were of integer types '
+ 'and\n'
+ 'the second argument was negative, an exception was raised).\n'
'\n'
'Raising "0.0" to a negative power results in a '
'"ZeroDivisionError".\n'
- 'Raising a negative number to a fractional power results in a '
- '"complex"\n'
- 'number. (In earlier versions it raised a "ValueError".)\n',
- 'raise': 'The "raise" statement\n'
+ 'Raising a negative number to a fractional power results in a\n'
+ '"ValueError".\n',
+ 'print': '\n'
+ 'The "print" statement\n'
'*********************\n'
'\n'
- ' raise_stmt ::= "raise" [expression ["from" expression]]\n'
- '\n'
- 'If no expressions are present, "raise" re-raises the last '
- 'exception\n'
- 'that was active in the current scope. If no exception is active '
- 'in\n'
- 'the current scope, a "RuntimeError" exception is raised indicating\n'
- 'that this is an error.\n'
- '\n'
- 'Otherwise, "raise" evaluates the first expression as the exception\n'
- 'object. It must be either a subclass or an instance of\n'
- '"BaseException". If it is a class, the exception instance will be\n'
- 'obtained when needed by instantiating the class with no arguments.\n'
+ ' print_stmt ::= "print" ([expression ("," expression)* [","]]\n'
+ ' | ">>" expression [("," expression)+ [","]])\n'
'\n'
- 'The *type* of the exception is the exception instance’s class, the\n'
- '*value* is the instance itself.\n'
- '\n'
- 'A traceback object is normally created automatically when an '
- 'exception\n'
- 'is raised and attached to it as the "__traceback__" attribute, '
- 'which\n'
- 'is writable. You can create an exception and set your own traceback '
- 'in\n'
- 'one step using the "with_traceback()" exception method (which '
- 'returns\n'
- 'the same exception instance, with its traceback set to its '
- 'argument),\n'
- 'like so:\n'
+ '"print" evaluates each expression in turn and writes the resulting\n'
+ 'object to standard output (see below). If an object is not a '
+ 'string,\n'
+ 'it is first converted to a string using the rules for string\n'
+ 'conversions. The (resulting or original) string is then written. '
+ 'A\n'
+ 'space is written before each object is (converted and) written, '
+ 'unless\n'
+ 'the output system believes it is positioned at the beginning of a\n'
+ 'line. This is the case (1) when no characters have yet been '
+ 'written\n'
+ 'to standard output, (2) when the last character written to '
+ 'standard\n'
+ 'output is a whitespace character except "\' \'", or (3) when the '
+ 'last\n'
+ 'write operation on standard output was not a "print" statement. '
+ '(In\n'
+ 'some cases it may be functional to write an empty string to '
+ 'standard\n'
+ 'output for this reason.)\n'
'\n'
- ' raise Exception("foo occurred").with_traceback(tracebackobj)\n'
+ 'Note: Objects which act like file objects but which are not the\n'
+ ' built-in file objects often do not properly emulate this aspect '
+ 'of\n'
+ " the file object's behavior, so it is best not to rely on this.\n"
'\n'
- 'The "from" clause is used for exception chaining: if given, the '
- 'second\n'
- '*expression* must be another exception class or instance, which '
- 'will\n'
- 'then be attached to the raised exception as the "__cause__" '
- 'attribute\n'
- '(which is writable). If the raised exception is not handled, both\n'
- 'exceptions will be printed:\n'
+ 'A "\'\\n\'" character is written at the end, unless the "print" '
+ 'statement\n'
+ 'ends with a comma. This is the only action if the statement '
+ 'contains\n'
+ 'just the keyword "print".\n'
'\n'
- ' >>> try:\n'
- ' ... print(1 / 0)\n'
- ' ... except Exception as exc:\n'
- ' ... raise RuntimeError("Something bad happened") from exc\n'
- ' ...\n'
- ' Traceback (most recent call last):\n'
- ' File "<stdin>", line 2, in <module>\n'
- ' ZeroDivisionError: division by zero\n'
+ 'Standard output is defined as the file object named "stdout" in '
+ 'the\n'
+ 'built-in module "sys". If no such object exists, or if it does '
+ 'not\n'
+ 'have a "write()" method, a "RuntimeError" exception is raised.\n'
'\n'
- ' The above exception was the direct cause of the following '
- 'exception:\n'
+ '"print" also has an extended form, defined by the second portion '
+ 'of\n'
+ 'the syntax described above. This form is sometimes referred to as\n'
+ '""print" chevron." In this form, the first expression after the '
+ '">>"\n'
+ 'must evaluate to a "file-like" object, specifically an object that '
+ 'has\n'
+ 'a "write()" method as described above. With this extended form, '
+ 'the\n'
+ 'subsequent expressions are printed to this file object. If the '
+ 'first\n'
+ 'expression evaluates to "None", then "sys.stdout" is used as the '
+ 'file\n'
+ 'for output.\n',
+ 'raise': '\n'
+ 'The "raise" statement\n'
+ '*********************\n'
'\n'
- ' Traceback (most recent call last):\n'
- ' File "<stdin>", line 4, in <module>\n'
- ' RuntimeError: Something bad happened\n'
+ ' raise_stmt ::= "raise" [expression ["," expression ["," '
+ 'expression]]]\n'
'\n'
- 'A similar mechanism works implicitly if an exception is raised '
- 'inside\n'
- 'an exception handler or a "finally" clause: the previous exception '
+ 'If no expressions are present, "raise" re-raises the last '
+ 'exception\n'
+ 'that was active in the current scope. If no exception is active '
+ 'in\n'
+ 'the current scope, a "TypeError" exception is raised indicating '
+ 'that\n'
+ 'this is an error (if running under IDLE, a "Queue.Empty" exception '
'is\n'
- 'then attached as the new exception’s "__context__" attribute:\n'
+ 'raised instead).\n'
'\n'
- ' >>> try:\n'
- ' ... print(1 / 0)\n'
- ' ... except:\n'
- ' ... raise RuntimeError("Something bad happened")\n'
- ' ...\n'
- ' Traceback (most recent call last):\n'
- ' File "<stdin>", line 2, in <module>\n'
- ' ZeroDivisionError: division by zero\n'
+ 'Otherwise, "raise" evaluates the expressions to get three objects,\n'
+ 'using "None" as the value of omitted expressions. The first two\n'
+ 'objects are used to determine the *type* and *value* of the '
+ 'exception.\n'
'\n'
- ' During handling of the above exception, another exception '
- 'occurred:\n'
- '\n'
- ' Traceback (most recent call last):\n'
- ' File "<stdin>", line 4, in <module>\n'
- ' RuntimeError: Something bad happened\n'
- '\n'
- 'Exception chaining can be explicitly suppressed by specifying '
- '"None"\n'
- 'in the "from" clause:\n'
+ 'If the first object is an instance, the type of the exception is '
+ 'the\n'
+ 'class of the instance, the instance itself is the value, and the\n'
+ 'second object must be "None".\n'
'\n'
- ' >>> try:\n'
- ' ... print(1 / 0)\n'
- ' ... except:\n'
- ' ... raise RuntimeError("Something bad happened") from None\n'
- ' ...\n'
- ' Traceback (most recent call last):\n'
- ' File "<stdin>", line 4, in <module>\n'
- ' RuntimeError: Something bad happened\n'
+ 'If the first object is a class, it becomes the type of the '
+ 'exception.\n'
+ 'The second object is used to determine the exception value: If it '
+ 'is\n'
+ 'an instance of the class, the instance becomes the exception value. '
+ 'If\n'
+ 'the second object is a tuple, it is used as the argument list for '
+ 'the\n'
+ 'class constructor; if it is "None", an empty argument list is '
+ 'used,\n'
+ 'and any other object is treated as a single argument to the\n'
+ 'constructor. The instance so created by calling the constructor '
+ 'is\n'
+ 'used as the exception value.\n'
+ '\n'
+ 'If a third object is present and not "None", it must be a '
+ 'traceback\n'
+ 'object (see section The standard type hierarchy), and it is\n'
+ 'substituted instead of the current location as the place where the\n'
+ 'exception occurred. If the third object is present and not a\n'
+ 'traceback object or "None", a "TypeError" exception is raised. '
+ 'The\n'
+ 'three-expression form of "raise" is useful to re-raise an '
+ 'exception\n'
+ 'transparently in an except clause, but "raise" with no expressions\n'
+ 'should be preferred if the exception to be re-raised was the most\n'
+ 'recently active exception in the current scope.\n'
'\n'
'Additional information on exceptions can be found in section\n'
'Exceptions, and information about handling exceptions is in '
'section\n'
- 'The try statement.\n'
- '\n'
- 'Changed in version 3.3: "None" is now permitted as "Y" in "raise X\n'
- 'from Y".\n'
- '\n'
- 'New in version 3.3: The "__suppress_context__" attribute to '
- 'suppress\n'
- 'automatic display of the exception context.\n',
- 'return': 'The "return" statement\n'
+ 'The try statement.\n',
+ 'return': '\n'
+ 'The "return" statement\n'
'**********************\n'
'\n'
' return_stmt ::= "return" [expression_list]\n'
@@ -7396,20 +6702,13 @@ topics = {'assert': 'The "assert" statement\n'
'the\n'
'function.\n'
'\n'
- 'In a generator function, the "return" statement indicates that '
- 'the\n'
- 'generator is done and will cause "StopIteration" to be raised. '
- 'The\n'
- 'returned value (if any) is used as an argument to construct\n'
- '"StopIteration" and becomes the "StopIteration.value" attribute.\n'
- '\n'
- 'In an asynchronous generator function, an empty "return" '
- 'statement\n'
- 'indicates that the asynchronous generator is done and will cause\n'
- '"StopAsyncIteration" to be raised. A non-empty "return" statement '
- 'is\n'
- 'a syntax error in an asynchronous generator function.\n',
- 'sequence-types': 'Emulating container types\n'
+ 'In a generator function, the "return" statement is not allowed to\n'
+ 'include an "expression_list". In that context, a bare "return"\n'
+ 'indicates that the generator is done and will cause '
+ '"StopIteration" to\n'
+ 'be raised.\n',
+ 'sequence-types': '\n'
+ 'Emulating container types\n'
'*************************\n'
'\n'
'The following methods can be defined to implement '
@@ -7426,49 +6725,53 @@ topics = {'assert': 'The "assert" statement\n'
'k < N" where\n'
'*N* is the length of the sequence, or slice objects, which '
'define a\n'
- 'range of items. It is also recommended that mappings '
+ 'range of items. (For backwards compatibility, the method\n'
+ '"__getslice__()" (see below) can also be defined to handle '
+ 'simple, but\n'
+ 'not extended slices.) It is also recommended that mappings '
'provide the\n'
- 'methods "keys()", "values()", "items()", "get()", '
- '"clear()",\n'
- '"setdefault()", "pop()", "popitem()", "copy()", and '
- '"update()"\n'
- 'behaving similar to those for Python’s standard dictionary '
- 'objects.\n'
- 'The "collections.abc" module provides a "MutableMapping" '
- 'abstract base\n'
- 'class to help create those methods from a base set of '
- '"__getitem__()",\n'
- '"__setitem__()", "__delitem__()", and "keys()". Mutable '
- 'sequences\n'
- 'should provide methods "append()", "count()", "index()", '
- '"extend()",\n'
- '"insert()", "pop()", "remove()", "reverse()" and "sort()", '
- 'like Python\n'
- 'standard list objects. Finally, sequence types should '
- 'implement\n'
- 'addition (meaning concatenation) and multiplication '
- '(meaning\n'
- 'repetition) by defining the methods "__add__()", '
- '"__radd__()",\n'
- '"__iadd__()", "__mul__()", "__rmul__()" and "__imul__()" '
- 'described\n'
- 'below; they should not define other numerical operators. '
- 'It is\n'
+ 'methods "keys()", "values()", "items()", "has_key()", '
+ '"get()",\n'
+ '"clear()", "setdefault()", "iterkeys()", "itervalues()",\n'
+ '"iteritems()", "pop()", "popitem()", "copy()", and '
+ '"update()" behaving\n'
+ "similar to those for Python's standard dictionary "
+ 'objects. The\n'
+ '"UserDict" module provides a "DictMixin" class to help '
+ 'create those\n'
+ 'methods from a base set of "__getitem__()", '
+ '"__setitem__()",\n'
+ '"__delitem__()", and "keys()". Mutable sequences should '
+ 'provide\n'
+ 'methods "append()", "count()", "index()", "extend()", '
+ '"insert()",\n'
+ '"pop()", "remove()", "reverse()" and "sort()", like Python '
+ 'standard\n'
+ 'list objects. Finally, sequence types should implement '
+ 'addition\n'
+ '(meaning concatenation) and multiplication (meaning '
+ 'repetition) by\n'
+ 'defining the methods "__add__()", "__radd__()", '
+ '"__iadd__()",\n'
+ '"__mul__()", "__rmul__()" and "__imul__()" described '
+ 'below; they\n'
+ 'should not define "__coerce__()" or other numerical '
+ 'operators. It is\n'
'recommended that both mappings and sequences implement '
'the\n'
'"__contains__()" method to allow efficient use of the "in" '
'operator;\n'
- 'for mappings, "in" should search the mapping’s keys; for '
- 'sequences, it\n'
- 'should search through the values. It is further '
- 'recommended that both\n'
- 'mappings and sequences implement the "__iter__()" method '
- 'to allow\n'
+ 'for mappings, "in" should be equivalent of "has_key()"; '
+ 'for sequences,\n'
+ 'it should search through the values. It is further '
+ 'recommended that\n'
+ 'both mappings and sequences implement the "__iter__()" '
+ 'method to allow\n'
'efficient iteration through the container; for mappings, '
'"__iter__()"\n'
- 'should iterate through the object’s keys; for sequences, '
- 'it should\n'
- 'iterate through the values.\n'
+ 'should be the same as "iterkeys()"; for sequences, it '
+ 'should iterate\n'
+ 'through the values.\n'
'\n'
'object.__len__(self)\n'
'\n'
@@ -7476,10 +6779,10 @@ topics = {'assert': 'The "assert" statement\n'
'Should return\n'
' the length of the object, an integer ">=" 0. Also, an '
'object that\n'
- ' doesn’t define a "__bool__()" method and whose '
- '"__len__()" method\n'
- ' returns zero is considered to be false in a Boolean '
- 'context.\n'
+ ' doesn\'t define a "__nonzero__()" method and whose '
+ '"__len__()"\n'
+ ' method returns zero is considered to be false in a '
+ 'Boolean context.\n'
'\n'
' **CPython implementation detail:** In CPython, the '
'length is\n'
@@ -7489,38 +6792,8 @@ topics = {'assert': 'The "assert" statement\n'
'raise\n'
' "OverflowError". To prevent raising "OverflowError" by '
'truth value\n'
- ' testing, an object must define a "__bool__()" method.\n'
- '\n'
- 'object.__length_hint__(self)\n'
- '\n'
- ' Called to implement "operator.length_hint()". Should '
- 'return an\n'
- ' estimated length for the object (which may be greater '
- 'or less than\n'
- ' the actual length). The length must be an integer ">=" '
- '0. The\n'
- ' return value may also be "NotImplemented", which is '
- 'treated the\n'
- ' same as if the "__length_hint__" method didn’t exist at '
- 'all. This\n'
- ' method is purely an optimization and is never required '
- 'for\n'
- ' correctness.\n'
- '\n'
- ' New in version 3.4.\n'
- '\n'
- 'Note: Slicing is done exclusively with the following three '
- 'methods.\n'
- ' A call like\n'
- '\n'
- ' a[1:2] = b\n'
- '\n'
- ' is translated to\n'
- '\n'
- ' a[slice(1, 2, None)] = b\n'
- '\n'
- ' and so forth. Missing slice items are always filled in '
- 'with "None".\n'
+ ' testing, an object must define a "__nonzero__()" '
+ 'method.\n'
'\n'
'object.__getitem__(self, key)\n'
'\n'
@@ -7548,6 +6821,12 @@ topics = {'assert': 'The "assert" statement\n'
'of the\n'
' sequence.\n'
'\n'
+ 'object.__missing__(self, key)\n'
+ '\n'
+ ' Called by "dict"."__getitem__()" to implement '
+ '"self[key]" for dict\n'
+ ' subclasses when key is not in the dictionary.\n'
+ '\n'
'object.__setitem__(self, key, value)\n'
'\n'
' Called to implement assignment to "self[key]". Same '
@@ -7575,12 +6854,6 @@ topics = {'assert': 'The "assert" statement\n'
' raised for improper *key* values as for the '
'"__getitem__()" method.\n'
'\n'
- 'object.__missing__(self, key)\n'
- '\n'
- ' Called by "dict"."__getitem__()" to implement '
- '"self[key]" for dict\n'
- ' subclasses when key is not in the dictionary.\n'
- '\n'
'object.__iter__(self)\n'
'\n'
' This method is called when an iterator is required for '
@@ -7589,7 +6862,9 @@ topics = {'assert': 'The "assert" statement\n'
'can iterate\n'
' over all the objects in the container. For mappings, '
'it should\n'
- ' iterate over the keys of the container.\n'
+ ' iterate over the keys of the container, and should also '
+ 'be made\n'
+ ' available as the method "iterkeys()".\n'
'\n'
' Iterator objects also need to implement this method; '
'they are\n'
@@ -7618,14 +6893,16 @@ topics = {'assert': 'The "assert" statement\n'
'provided by\n'
' "reversed()".\n'
'\n'
+ ' New in version 2.6.\n'
+ '\n'
'The membership test operators ("in" and "not in") are '
'normally\n'
- 'implemented as an iteration through a container. However, '
+ 'implemented as an iteration through a sequence. However, '
'container\n'
'objects can supply the following special method with a '
'more efficient\n'
'implementation, which also does not require the object be '
- 'iterable.\n'
+ 'a sequence.\n'
'\n'
'object.__contains__(self, item)\n'
'\n'
@@ -7637,32 +6914,42 @@ topics = {'assert': 'The "assert" statement\n'
'values or\n'
' the key-item pairs.\n'
'\n'
- ' For objects that don’t define "__contains__()", the '
+ ' For objects that don\'t define "__contains__()", the '
'membership test\n'
' first tries iteration via "__iter__()", then the old '
'sequence\n'
' iteration protocol via "__getitem__()", see this '
'section in the\n'
' language reference.\n',
- 'shifting': 'Shifting operations\n'
+ 'shifting': '\n'
+ 'Shifting operations\n'
'*******************\n'
'\n'
'The shifting operations have lower priority than the arithmetic\n'
'operations:\n'
'\n'
- ' shift_expr ::= a_expr | shift_expr ("<<" | ">>") a_expr\n'
+ ' shift_expr ::= a_expr | shift_expr ( "<<" | ">>" ) a_expr\n'
'\n'
- 'These operators accept integers as arguments. They shift the '
- 'first\n'
+ 'These operators accept plain or long integers as arguments. '
+ 'The\n'
+ 'arguments are converted to a common type. They shift the first\n'
'argument to the left or right by the number of bits given by '
'the\n'
'second argument.\n'
'\n'
- 'A right shift by *n* bits is defined as floor division by '
- '"pow(2,n)".\n'
- 'A left shift by *n* bits is defined as multiplication with '
- '"pow(2,n)".\n',
- 'slicings': 'Slicings\n'
+ 'A right shift by *n* bits is defined as division by "pow(2, '
+ 'n)". A\n'
+ 'left shift by *n* bits is defined as multiplication with "pow(2, '
+ 'n)".\n'
+ 'Negative shift counts raise a "ValueError" exception.\n'
+ '\n'
+ 'Note: In the current implementation, the right-hand operand is\n'
+ ' required to be at most "sys.maxsize". If the right-hand '
+ 'operand is\n'
+ ' larger than "sys.maxsize" an "OverflowError" exception is '
+ 'raised.\n',
+ 'slicings': '\n'
+ 'Slicings\n'
'********\n'
'\n'
'A slicing selects a range of items in a sequence object (e.g., '
@@ -7672,14 +6959,18 @@ topics = {'assert': 'The "assert" statement\n'
'targets in assignment or "del" statements. The syntax for a '
'slicing:\n'
'\n'
- ' slicing ::= primary "[" slice_list "]"\n'
- ' slice_list ::= slice_item ("," slice_item)* [","]\n'
- ' slice_item ::= expression | proper_slice\n'
- ' proper_slice ::= [lower_bound] ":" [upper_bound] [ ":" '
- '[stride] ]\n'
- ' lower_bound ::= expression\n'
- ' upper_bound ::= expression\n'
- ' stride ::= expression\n'
+ ' slicing ::= simple_slicing | extended_slicing\n'
+ ' simple_slicing ::= primary "[" short_slice "]"\n'
+ ' extended_slicing ::= primary "[" slice_list "]"\n'
+ ' slice_list ::= slice_item ("," slice_item)* [","]\n'
+ ' slice_item ::= expression | proper_slice | ellipsis\n'
+ ' proper_slice ::= short_slice | long_slice\n'
+ ' short_slice ::= [lower_bound] ":" [upper_bound]\n'
+ ' long_slice ::= short_slice ":" [stride]\n'
+ ' lower_bound ::= expression\n'
+ ' upper_bound ::= expression\n'
+ ' stride ::= expression\n'
+ ' ellipsis ::= "..."\n'
'\n'
'There is ambiguity in the formal syntax here: anything that '
'looks like\n'
@@ -7690,30 +6981,52 @@ topics = {'assert': 'The "assert" statement\n'
'syntax, this is disambiguated by defining that in this case the\n'
'interpretation as a subscription takes priority over the\n'
'interpretation as a slicing (this is the case if the slice list\n'
- 'contains no proper slice).\n'
- '\n'
- 'The semantics for a slicing are as follows. The primary is '
- 'indexed\n'
- '(using the same "__getitem__()" method as normal subscription) '
- 'with a\n'
- 'key that is constructed from the slice list, as follows. If the '
+ 'contains no proper slice nor ellipses). Similarly, when the '
'slice\n'
- 'list contains at least one comma, the key is a tuple containing '
- 'the\n'
+ 'list has exactly one short slice and no trailing comma, the\n'
+ 'interpretation as a simple slicing takes priority over that as '
+ 'an\n'
+ 'extended slicing.\n'
+ '\n'
+ 'The semantics for a simple slicing are as follows. The primary '
+ 'must\n'
+ 'evaluate to a sequence object. The lower and upper bound '
+ 'expressions,\n'
+ 'if present, must evaluate to plain integers; defaults are zero '
+ 'and the\n'
+ '"sys.maxint", respectively. If either bound is negative, the\n'
+ "sequence's length is added to it. The slicing now selects all "
+ 'items\n'
+ 'with index *k* such that "i <= k < j" where *i* and *j* are the\n'
+ 'specified lower and upper bounds. This may be an empty '
+ 'sequence. It\n'
+ 'is not an error if *i* or *j* lie outside the range of valid '
+ 'indexes\n'
+ "(such items don't exist so they aren't selected).\n"
+ '\n'
+ 'The semantics for an extended slicing are as follows. The '
+ 'primary\n'
+ 'must evaluate to a mapping object, and it is indexed with a key '
+ 'that\n'
+ 'is constructed from the slice list, as follows. If the slice '
+ 'list\n'
+ 'contains at least one comma, the key is a tuple containing the\n'
'conversion of the slice items; otherwise, the conversion of the '
'lone\n'
'slice item is the key. The conversion of a slice item that is '
'an\n'
- 'expression is that expression. The conversion of a proper slice '
- 'is a\n'
- 'slice object (see section The standard type hierarchy) whose '
- '"start",\n'
- '"stop" and "step" attributes are the values of the expressions '
- 'given\n'
- 'as lower bound, upper bound and stride, respectively, '
- 'substituting\n'
- '"None" for missing expressions.\n',
- 'specialattrs': 'Special Attributes\n'
+ 'expression is that expression. The conversion of an ellipsis '
+ 'slice\n'
+ 'item is the built-in "Ellipsis" object. The conversion of a '
+ 'proper\n'
+ 'slice is a slice object (see section The standard type '
+ 'hierarchy)\n'
+ 'whose "start", "stop" and "step" attributes are the values of '
+ 'the\n'
+ 'expressions given as lower bound, upper bound and stride,\n'
+ 'respectively, substituting "None" for missing expressions.\n',
+ 'specialattrs': '\n'
+ 'Special Attributes\n'
'******************\n'
'\n'
'The implementation adds a few special read-only attributes '
@@ -7725,9 +7038,25 @@ topics = {'assert': 'The "assert" statement\n'
'object.__dict__\n'
'\n'
' A dictionary or other mapping object used to store an '
- 'object’s\n'
+ "object's\n"
' (writable) attributes.\n'
'\n'
+ 'object.__methods__\n'
+ '\n'
+ ' Deprecated since version 2.2: Use the built-in function '
+ '"dir()" to\n'
+ " get a list of an object's attributes. This attribute is "
+ 'no longer\n'
+ ' available.\n'
+ '\n'
+ 'object.__members__\n'
+ '\n'
+ ' Deprecated since version 2.2: Use the built-in function '
+ '"dir()" to\n'
+ " get a list of an object's attributes. This attribute is "
+ 'no longer\n'
+ ' available.\n'
+ '\n'
'instance.__class__\n'
'\n'
' The class to which a class instance belongs.\n'
@@ -7738,17 +7067,12 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
'definition.__name__\n'
'\n'
- ' The name of the class, function, method, descriptor, or '
- 'generator\n'
- ' instance.\n'
- '\n'
- 'definition.__qualname__\n'
- '\n'
- ' The *qualified name* of the class, function, method, '
+ ' The name of the class, type, function, method, '
'descriptor, or\n'
' generator instance.\n'
'\n'
- ' New in version 3.3.\n'
+ 'The following attributes are only supported by *new-style '
+ 'class*es.\n'
'\n'
'class.__mro__\n'
'\n'
@@ -7766,14 +7090,14 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
'class.__subclasses__()\n'
'\n'
- ' Each class keeps a list of weak references to its '
- 'immediate\n'
- ' subclasses. This method returns a list of all those '
- 'references\n'
- ' still alive. Example:\n'
+ ' Each new-style class keeps a list of weak references to '
+ 'its\n'
+ ' immediate subclasses. This method returns a list of all '
+ 'those\n'
+ ' references still alive. Example:\n'
'\n'
' >>> int.__subclasses__()\n'
- " [<class 'bool'>]\n"
+ " [<type 'bool'>]\n"
'\n'
'-[ Footnotes ]-\n'
'\n'
@@ -7785,27 +7109,40 @@ topics = {'assert': 'The "assert" statement\n'
'to\n'
' "[1.0, 2.0]", and similarly for tuples.\n'
'\n'
- '[3] They must have since the parser can’t tell the type of '
+ "[3] They must have since the parser can't tell the type of "
'the\n'
' operands.\n'
'\n'
'[4] Cased characters are those with general category '
'property\n'
- ' being one of “Lu” (Letter, uppercase), “Ll” (Letter, '
+ ' being one of "Lu" (Letter, uppercase), "Ll" (Letter, '
'lowercase),\n'
- ' or “Lt” (Letter, titlecase).\n'
+ ' or "Lt" (Letter, titlecase).\n'
'\n'
'[5] To format only a tuple you should therefore provide a\n'
' singleton tuple whose only element is the tuple to be '
- 'formatted.\n',
- 'specialnames': 'Special method names\n'
+ 'formatted.\n'
+ '\n'
+ '[6] The advantage of leaving the newline on is that '
+ 'returning an\n'
+ ' empty string is then an unambiguous EOF indication. It '
+ 'is also\n'
+ ' possible (in cases where it might matter, for example, '
+ 'if you want\n'
+ ' to make an exact copy of a file while scanning its '
+ 'lines) to tell\n'
+ ' whether the last line of a file ended in a newline or '
+ 'not (yes\n'
+ ' this happens!).\n',
+ 'specialnames': '\n'
+ 'Special method names\n'
'********************\n'
'\n'
'A class can implement certain operations that are invoked by '
'special\n'
'syntax (such as arithmetic operations or subscripting and '
'slicing) by\n'
- 'defining methods with special names. This is Python’s '
+ "defining methods with special names. This is Python's "
'approach to\n'
'*operator overloading*, allowing classes to define their own '
'behavior\n'
@@ -7813,21 +7150,15 @@ topics = {'assert': 'The "assert" statement\n'
'class defines\n'
'a method named "__getitem__()", and "x" is an instance of '
'this class,\n'
- 'then "x[i]" is roughly equivalent to "type(x).__getitem__(x, '
- 'i)".\n'
- 'Except where mentioned, attempts to execute an operation '
- 'raise an\n'
- 'exception when no appropriate method is defined (typically\n'
- '"AttributeError" or "TypeError").\n'
- '\n'
- 'Setting a special method to "None" indicates that the '
- 'corresponding\n'
- 'operation is not available. For example, if a class sets '
- '"__iter__()"\n'
- 'to "None", the class is not iterable, so calling "iter()" on '
- 'its\n'
- 'instances will raise a "TypeError" (without falling back to\n'
- '"__getitem__()"). [2]\n'
+ 'then "x[i]" is roughly equivalent to "x.__getitem__(i)" for '
+ 'old-style\n'
+ 'classes and "type(x).__getitem__(x, i)" for new-style '
+ 'classes. Except\n'
+ 'where mentioned, attempts to execute an operation raise an '
+ 'exception\n'
+ 'when no appropriate method is defined (typically '
+ '"AttributeError" or\n'
+ '"TypeError").\n'
'\n'
'When implementing a class that emulates any built-in type, '
'it is\n'
@@ -7839,7 +7170,7 @@ topics = {'assert': 'The "assert" statement\n'
'elements, but\n'
'extracting a slice may not make sense. (One example of this '
'is the\n'
- '"NodeList" interface in the W3C’s Document Object Model.)\n'
+ '"NodeList" interface in the W3C\'s Document Object Model.)\n'
'\n'
'\n'
'Basic customization\n'
@@ -7863,26 +7194,24 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
' Typical implementations create a new instance of the '
'class by\n'
- ' invoking the superclass’s "__new__()" method using\n'
- ' "super().__new__(cls[, ...])" with appropriate arguments '
- 'and then\n'
- ' modifying the newly-created instance as necessary before '
- 'returning\n'
- ' it.\n'
- '\n'
- ' If "__new__()" is invoked during object construction and '
- 'it returns\n'
- ' an instance or subclass of *cls*, then the new '
- 'instance’s\n'
- ' "__init__()" method will be invoked like "__init__(self[, '
- '...])",\n'
- ' where *self* is the new instance and the remaining '
- 'arguments are\n'
- ' the same as were passed to the object constructor.\n'
+ ' invoking the superclass\'s "__new__()" method using\n'
+ ' "super(currentclass, cls).__new__(cls[, ...])" with '
+ 'appropriate\n'
+ ' arguments and then modifying the newly-created instance '
+ 'as\n'
+ ' necessary before returning it.\n'
+ '\n'
+ ' If "__new__()" returns an instance of *cls*, then the '
+ 'new\n'
+ ' instance\'s "__init__()" method will be invoked like\n'
+ ' "__init__(self[, ...])", where *self* is the new instance '
+ 'and the\n'
+ ' remaining arguments are the same as were passed to '
+ '"__new__()".\n'
'\n'
' If "__new__()" does not return an instance of *cls*, then '
'the new\n'
- ' instance’s "__init__()" method will not be invoked.\n'
+ ' instance\'s "__init__()" method will not be invoked.\n'
'\n'
' "__new__()" is intended mainly to allow subclasses of '
'immutable\n'
@@ -7900,17 +7229,17 @@ topics = {'assert': 'The "assert" statement\n'
'those\n'
' passed to the class constructor expression. If a base '
'class has an\n'
- ' "__init__()" method, the derived class’s "__init__()" '
+ ' "__init__()" method, the derived class\'s "__init__()" '
'method, if\n'
' any, must explicitly call it to ensure proper '
'initialization of the\n'
' base class part of the instance; for example:\n'
- ' "super().__init__([args...])".\n'
+ ' "BaseClass.__init__(self, [args...])".\n'
'\n'
' Because "__new__()" and "__init__()" work together in '
'constructing\n'
' objects ("__new__()" to create it, and "__init__()" to '
- 'customize\n'
+ 'customise\n'
' it), no non-"None" value may be returned by "__init__()"; '
'doing so\n'
' will cause a "TypeError" to be raised at runtime.\n'
@@ -7919,108 +7248,116 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
' Called when the instance is about to be destroyed. This '
'is also\n'
- ' called a finalizer or (improperly) a destructor. If a '
- 'base class\n'
- ' has a "__del__()" method, the derived class’s "__del__()" '
- 'method,\n'
- ' if any, must explicitly call it to ensure proper deletion '
- 'of the\n'
- ' base class part of the instance.\n'
- '\n'
- ' It is possible (though not recommended!) for the '
- '"__del__()" method\n'
- ' to postpone destruction of the instance by creating a new '
- 'reference\n'
- ' to it. This is called object *resurrection*. It is\n'
- ' implementation-dependent whether "__del__()" is called a '
- 'second\n'
- ' time when a resurrected object is about to be destroyed; '
+ ' called a destructor. If a base class has a "__del__()" '
+ 'method, the\n'
+ ' derived class\'s "__del__()" method, if any, must '
+ 'explicitly call it\n'
+ ' to ensure proper deletion of the base class part of the '
+ 'instance.\n'
+ ' Note that it is possible (though not recommended!) for '
'the\n'
- ' current *CPython* implementation only calls it once.\n'
- '\n'
- ' It is not guaranteed that "__del__()" methods are called '
- 'for\n'
- ' objects that still exist when the interpreter exits.\n'
- '\n'
- ' Note: "del x" doesn’t directly call "x.__del__()" — the '
- 'former\n'
+ ' "__del__()" method to postpone destruction of the '
+ 'instance by\n'
+ ' creating a new reference to it. It may then be called at '
+ 'a later\n'
+ ' time when this new reference is deleted. It is not '
+ 'guaranteed that\n'
+ ' "__del__()" methods are called for objects that still '
+ 'exist when\n'
+ ' the interpreter exits.\n'
+ '\n'
+ ' Note: "del x" doesn\'t directly call "x.__del__()" --- '
+ 'the former\n'
' decrements the reference count for "x" by one, and the '
'latter is\n'
- ' only called when "x"’s reference count reaches zero.\n'
- '\n'
- ' **CPython implementation detail:** It is possible for a '
+ ' only called when "x"\'s reference count reaches zero. '
+ 'Some common\n'
+ ' situations that may prevent the reference count of an '
+ 'object from\n'
+ ' going to zero include: circular references between '
+ 'objects (e.g.,\n'
+ ' a doubly-linked list or a tree data structure with '
+ 'parent and\n'
+ ' child pointers); a reference to the object on the stack '
+ 'frame of\n'
+ ' a function that caught an exception (the traceback '
+ 'stored in\n'
+ ' "sys.exc_traceback" keeps the stack frame alive); or a '
'reference\n'
- ' cycle to prevent the reference count of an object from '
- 'going to\n'
- ' zero. In this case, the cycle will be later detected and '
- 'deleted\n'
- ' by the *cyclic garbage collector*. A common cause of '
- 'reference\n'
- ' cycles is when an exception has been caught in a local '
- 'variable.\n'
- ' The frame’s locals then reference the exception, which '
+ ' to the object on the stack frame that raised an '
+ 'unhandled\n'
+ ' exception in interactive mode (the traceback stored in\n'
+ ' "sys.last_traceback" keeps the stack frame alive). The '
+ 'first\n'
+ ' situation can only be remedied by explicitly breaking '
+ 'the cycles;\n'
+ ' the latter two situations can be resolved by storing '
+ '"None" in\n'
+ ' "sys.exc_traceback" or "sys.last_traceback". Circular '
'references\n'
- ' its own traceback, which references the locals of all '
- 'frames caught\n'
- ' in the traceback.\n'
- '\n'
- ' See also: Documentation for the "gc" module.\n'
+ ' which are garbage are detected when the option cycle '
+ 'detector is\n'
+ " enabled (it's on by default), but can only be cleaned "
+ 'up if there\n'
+ ' are no Python-level "__del__()" methods involved. Refer '
+ 'to the\n'
+ ' documentation for the "gc" module for more information '
+ 'about how\n'
+ ' "__del__()" methods are handled by the cycle detector,\n'
+ ' particularly the description of the "garbage" value.\n'
'\n'
' Warning: Due to the precarious circumstances under which\n'
' "__del__()" methods are invoked, exceptions that occur '
'during\n'
' their execution are ignored, and a warning is printed '
'to\n'
- ' "sys.stderr" instead. In particular:\n'
- '\n'
- ' * "__del__()" can be invoked when arbitrary code is '
- 'being\n'
- ' executed, including from any arbitrary thread. If '
+ ' "sys.stderr" instead. Also, when "__del__()" is invoked '
+ 'in\n'
+ ' response to a module being deleted (e.g., when '
+ 'execution of the\n'
+ ' program is done), other globals referenced by the '
'"__del__()"\n'
- ' needs to take a lock or invoke any other blocking '
- 'resource, it\n'
- ' may deadlock as the resource may already be taken by '
- 'the code\n'
- ' that gets interrupted to execute "__del__()".\n'
- '\n'
- ' * "__del__()" can be executed during interpreter '
- 'shutdown. As\n'
- ' a consequence, the global variables it needs to '
- 'access\n'
- ' (including other modules) may already have been '
- 'deleted or set\n'
- ' to "None". Python guarantees that globals whose name '
- 'begins\n'
- ' with a single underscore are deleted from their '
- 'module before\n'
- ' other globals are deleted; if no other references to '
- 'such\n'
- ' globals exist, this may help in assuring that '
- 'imported modules\n'
- ' are still available at the time when the "__del__()" '
- 'method is\n'
- ' called.\n'
+ ' method may already have been deleted or in the process '
+ 'of being\n'
+ ' torn down (e.g. the import machinery shutting down). '
+ 'For this\n'
+ ' reason, "__del__()" methods should do the absolute '
+ 'minimum needed\n'
+ ' to maintain external invariants. Starting with version '
+ '1.5,\n'
+ ' Python guarantees that globals whose name begins with a '
+ 'single\n'
+ ' underscore are deleted from their module before other '
+ 'globals are\n'
+ ' deleted; if no other references to such globals exist, '
+ 'this may\n'
+ ' help in assuring that imported modules are still '
+ 'available at the\n'
+ ' time when the "__del__()" method is called.\n'
+ '\n'
+ ' See also the "-R" command-line option.\n'
'\n'
'object.__repr__(self)\n'
'\n'
- ' Called by the "repr()" built-in function to compute the '
- '“official”\n'
- ' string representation of an object. If at all possible, '
- 'this\n'
- ' should look like a valid Python expression that could be '
- 'used to\n'
- ' recreate an object with the same value (given an '
- 'appropriate\n'
- ' environment). If this is not possible, a string of the '
- 'form\n'
- ' "<...some useful description...>" should be returned. The '
- 'return\n'
- ' value must be a string object. If a class defines '
- '"__repr__()" but\n'
- ' not "__str__()", then "__repr__()" is also used when an '
- '“informal”\n'
- ' string representation of instances of that class is '
- 'required.\n'
+ ' Called by the "repr()" built-in function and by string '
+ 'conversions\n'
+ ' (reverse quotes) to compute the "official" string '
+ 'representation of\n'
+ ' an object. If at all possible, this should look like a '
+ 'valid\n'
+ ' Python expression that could be used to recreate an '
+ 'object with the\n'
+ ' same value (given an appropriate environment). If this '
+ 'is not\n'
+ ' possible, a string of the form "<...some useful '
+ 'description...>"\n'
+ ' should be returned. The return value must be a string '
+ 'object. If a\n'
+ ' class defines "__repr__()" but not "__str__()", then '
+ '"__repr__()"\n'
+ ' is also used when an "informal" string representation of '
+ 'instances\n'
+ ' of that class is required.\n'
'\n'
' This is typically used for debugging, so it is important '
'that the\n'
@@ -8028,64 +7365,17 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
'object.__str__(self)\n'
'\n'
- ' Called by "str(object)" and the built-in functions '
- '"format()" and\n'
- ' "print()" to compute the “informal” or nicely printable '
- 'string\n'
- ' representation of an object. The return value must be a '
- 'string\n'
- ' object.\n'
- '\n'
- ' This method differs from "object.__repr__()" in that '
- 'there is no\n'
- ' expectation that "__str__()" return a valid Python '
- 'expression: a\n'
- ' more convenient or concise representation can be used.\n'
- '\n'
- ' The default implementation defined by the built-in type '
- '"object"\n'
- ' calls "object.__repr__()".\n'
- '\n'
- 'object.__bytes__(self)\n'
- '\n'
- ' Called by bytes to compute a byte-string representation '
+ ' Called by the "str()" built-in function and by the '
+ '"print"\n'
+ ' statement to compute the "informal" string representation '
'of an\n'
- ' object. This should return a "bytes" object.\n'
- '\n'
- 'object.__format__(self, format_spec)\n'
- '\n'
- ' Called by the "format()" built-in function, and by '
- 'extension,\n'
- ' evaluation of formatted string literals and the '
- '"str.format()"\n'
- ' method, to produce a “formatted” string representation of '
- 'an\n'
- ' object. The *format_spec* argument is a string that '
- 'contains a\n'
- ' description of the formatting options desired. The '
- 'interpretation\n'
- ' of the *format_spec* argument is up to the type '
- 'implementing\n'
- ' "__format__()", however most classes will either '
- 'delegate\n'
- ' formatting to one of the built-in types, or use a '
- 'similar\n'
- ' formatting option syntax.\n'
- '\n'
- ' See Format Specification Mini-Language for a description '
- 'of the\n'
- ' standard formatting syntax.\n'
- '\n'
- ' The return value must be a string object.\n'
- '\n'
- ' Changed in version 3.4: The __format__ method of "object" '
- 'itself\n'
- ' raises a "TypeError" if passed any non-empty string.\n'
- '\n'
- ' Changed in version 3.7: "object.__format__(x, \'\')" is '
- 'now\n'
- ' equivalent to "str(x)" rather than "format(str(self), '
- '\'\')".\n'
+ ' object. This differs from "__repr__()" in that it does '
+ 'not have to\n'
+ ' be a valid Python expression: a more convenient or '
+ 'concise\n'
+ ' representation may be used instead. The return value must '
+ 'be a\n'
+ ' string object.\n'
'\n'
'object.__lt__(self, other)\n'
'object.__le__(self, other)\n'
@@ -8094,14 +7384,20 @@ topics = {'assert': 'The "assert" statement\n'
'object.__gt__(self, other)\n'
'object.__ge__(self, other)\n'
'\n'
- ' These are the so-called “rich comparison” methods. The\n'
+ ' New in version 2.1.\n'
+ '\n'
+ ' These are the so-called "rich comparison" methods, and '
+ 'are called\n'
+ ' for comparison operators in preference to "__cmp__()" '
+ 'below. The\n'
' correspondence between operator symbols and method names '
'is as\n'
' follows: "x<y" calls "x.__lt__(y)", "x<=y" calls '
'"x.__le__(y)",\n'
- ' "x==y" calls "x.__eq__(y)", "x!=y" calls "x.__ne__(y)", '
- '"x>y" calls\n'
- ' "x.__gt__(y)", and "x>=y" calls "x.__ge__(y)".\n'
+ ' "x==y" calls "x.__eq__(y)", "x!=y" and "x<>y" call '
+ '"x.__ne__(y)",\n'
+ ' "x>y" calls "x.__gt__(y)", and "x>=y" calls '
+ '"x.__ge__(y)".\n'
'\n'
' A rich comparison method may return the singleton '
'"NotImplemented"\n'
@@ -8118,43 +7414,59 @@ topics = {'assert': 'The "assert" statement\n'
' on the value to determine if the result is true or '
'false.\n'
'\n'
- ' By default, "__ne__()" delegates to "__eq__()" and '
- 'inverts the\n'
- ' result unless it is "NotImplemented". There are no other '
- 'implied\n'
- ' relationships among the comparison operators, for '
- 'example, the\n'
- ' truth of "(x<y or x==y)" does not imply "x<=y". To '
- 'automatically\n'
- ' generate ordering operations from a single root '
- 'operation, see\n'
- ' "functools.total_ordering()".\n'
- '\n'
- ' See the paragraph on "__hash__()" for some important '
- 'notes on\n'
- ' creating *hashable* objects which support custom '
- 'comparison\n'
- ' operations and are usable as dictionary keys.\n'
+ ' There are no implied relationships among the comparison '
+ 'operators.\n'
+ ' The truth of "x==y" does not imply that "x!=y" is false.\n'
+ ' Accordingly, when defining "__eq__()", one should also '
+ 'define\n'
+ ' "__ne__()" so that the operators will behave as '
+ 'expected. See the\n'
+ ' paragraph on "__hash__()" for some important notes on '
+ 'creating\n'
+ ' *hashable* objects which support custom comparison '
+ 'operations and\n'
+ ' are usable as dictionary keys.\n'
'\n'
' There are no swapped-argument versions of these methods '
'(to be used\n'
' when the left argument does not support the operation but '
'the right\n'
' argument does); rather, "__lt__()" and "__gt__()" are '
- 'each other’s\n'
- ' reflection, "__le__()" and "__ge__()" are each other’s '
+ "each other's\n"
+ ' reflection, "__le__()" and "__ge__()" are each other\'s '
'reflection,\n'
- ' and "__eq__()" and "__ne__()" are their own reflection. '
- 'If the\n'
- ' operands are of different types, and right operand’s type '
- 'is a\n'
- ' direct or indirect subclass of the left operand’s type, '
- 'the\n'
- ' reflected method of the right operand has priority, '
- 'otherwise the\n'
- ' left operand’s method has priority. Virtual subclassing '
- 'is not\n'
- ' considered.\n'
+ ' and "__eq__()" and "__ne__()" are their own reflection.\n'
+ '\n'
+ ' Arguments to rich comparison methods are never coerced.\n'
+ '\n'
+ ' To automatically generate ordering operations from a '
+ 'single root\n'
+ ' operation, see "functools.total_ordering()".\n'
+ '\n'
+ 'object.__cmp__(self, other)\n'
+ '\n'
+ ' Called by comparison operations if rich comparison (see '
+ 'above) is\n'
+ ' not defined. Should return a negative integer if "self < '
+ 'other",\n'
+ ' zero if "self == other", a positive integer if "self > '
+ 'other". If\n'
+ ' no "__cmp__()", "__eq__()" or "__ne__()" operation is '
+ 'defined,\n'
+ ' class instances are compared by object identity '
+ '("address"). See\n'
+ ' also the description of "__hash__()" for some important '
+ 'notes on\n'
+ ' creating *hashable* objects which support custom '
+ 'comparison\n'
+ ' operations and are usable as dictionary keys. (Note: the\n'
+ ' restriction that exceptions are not propagated by '
+ '"__cmp__()" has\n'
+ ' been removed since Python 1.5.)\n'
+ '\n'
+ 'object.__rcmp__(self, other)\n'
+ '\n'
+ ' Changed in version 2.1: No longer supported.\n'
'\n'
'object.__hash__(self)\n'
'\n'
@@ -8162,7 +7474,7 @@ topics = {'assert': 'The "assert" statement\n'
'on members\n'
' of hashed collections including "set", "frozenset", and '
'"dict".\n'
- ' "__hash__()" should return an integer. The only required '
+ ' "__hash__()" should return an integer. The only required '
'property\n'
' is that objects which compare equal have the same hash '
'value; it is\n'
@@ -8175,115 +7487,91 @@ topics = {'assert': 'The "assert" statement\n'
' def __hash__(self):\n'
' return hash((self.name, self.nick, self.color))\n'
'\n'
- ' Note: "hash()" truncates the value returned from an '
- 'object’s\n'
- ' custom "__hash__()" method to the size of a '
- '"Py_ssize_t". This\n'
- ' is typically 8 bytes on 64-bit builds and 4 bytes on '
- '32-bit\n'
- ' builds. If an object’s "__hash__()" must interoperate '
- 'on builds\n'
- ' of different bit sizes, be sure to check the width on '
- 'all\n'
- ' supported builds. An easy way to do this is with '
- '"python -c\n'
- ' "import sys; print(sys.hash_info.width)"".\n'
- '\n'
- ' If a class does not define an "__eq__()" method it should '
- 'not\n'
- ' define a "__hash__()" operation either; if it defines '
- '"__eq__()"\n'
- ' but not "__hash__()", its instances will not be usable as '
- 'items in\n'
- ' hashable collections. If a class defines mutable objects '
- 'and\n'
- ' implements an "__eq__()" method, it should not implement\n'
- ' "__hash__()", since the implementation of hashable '
- 'collections\n'
- ' requires that a key’s hash value is immutable (if the '
- 'object’s hash\n'
- ' value changes, it will be in the wrong hash bucket).\n'
- '\n'
- ' User-defined classes have "__eq__()" and "__hash__()" '
+ ' If a class does not define a "__cmp__()" or "__eq__()" '
+ 'method it\n'
+ ' should not define a "__hash__()" operation either; if it '
+ 'defines\n'
+ ' "__cmp__()" or "__eq__()" but not "__hash__()", its '
+ 'instances will\n'
+ ' not be usable in hashed collections. If a class defines '
+ 'mutable\n'
+ ' objects and implements a "__cmp__()" or "__eq__()" '
+ 'method, it\n'
+ ' should not implement "__hash__()", since hashable '
+ 'collection\n'
+ " implementations require that an object's hash value is "
+ 'immutable\n'
+ " (if the object's hash value changes, it will be in the "
+ 'wrong hash\n'
+ ' bucket).\n'
+ '\n'
+ ' User-defined classes have "__cmp__()" and "__hash__()" '
'methods by\n'
' default; with them, all objects compare unequal (except '
'with\n'
- ' themselves) and "x.__hash__()" returns an appropriate '
- 'value such\n'
- ' that "x == y" implies both that "x is y" and "hash(x) == '
- 'hash(y)".\n'
- '\n'
- ' A class that overrides "__eq__()" and does not define '
- '"__hash__()"\n'
- ' will have its "__hash__()" implicitly set to "None". '
- 'When the\n'
- ' "__hash__()" method of a class is "None", instances of '
- 'the class\n'
- ' will raise an appropriate "TypeError" when a program '
- 'attempts to\n'
- ' retrieve their hash value, and will also be correctly '
- 'identified as\n'
- ' unhashable when checking "isinstance(obj,\n'
- ' collections.abc.Hashable)".\n'
- '\n'
- ' If a class that overrides "__eq__()" needs to retain the\n'
- ' implementation of "__hash__()" from a parent class, the '
- 'interpreter\n'
- ' must be told this explicitly by setting "__hash__ =\n'
- ' <ParentClass>.__hash__".\n'
- '\n'
- ' If a class that does not override "__eq__()" wishes to '
- 'suppress\n'
- ' hash support, it should include "__hash__ = None" in the '
- 'class\n'
- ' definition. A class which defines its own "__hash__()" '
- 'that\n'
- ' explicitly raises a "TypeError" would be incorrectly '
- 'identified as\n'
- ' hashable by an "isinstance(obj, '
- 'collections.abc.Hashable)" call.\n'
- '\n'
- ' Note: By default, the "__hash__()" values of str and '
- 'bytes\n'
- ' objects are “salted” with an unpredictable random '
- 'value.\n'
- ' Although they remain constant within an individual '
- 'Python\n'
- ' process, they are not predictable between repeated '
- 'invocations of\n'
- ' Python.This is intended to provide protection against a '
- 'denial-\n'
- ' of-service caused by carefully-chosen inputs that '
- 'exploit the\n'
- ' worst case performance of a dict insertion, O(n^2) '
- 'complexity.\n'
- ' See http://www.ocert.org/advisories/ocert-2011-003.html '
- 'for\n'
- ' details.Changing hash values affects the iteration '
- 'order of sets.\n'
- ' Python has never made guarantees about this ordering '
- '(and it\n'
- ' typically varies between 32-bit and 64-bit builds).See '
- 'also\n'
- ' "PYTHONHASHSEED".\n'
+ ' themselves) and "x.__hash__()" returns a result derived '
+ 'from\n'
+ ' "id(x)".\n'
+ '\n'
+ ' Classes which inherit a "__hash__()" method from a parent '
+ 'class but\n'
+ ' change the meaning of "__cmp__()" or "__eq__()" such that '
+ 'the hash\n'
+ ' value returned is no longer appropriate (e.g. by '
+ 'switching to a\n'
+ ' value-based concept of equality instead of the default '
+ 'identity\n'
+ ' based equality) can explicitly flag themselves as being '
+ 'unhashable\n'
+ ' by setting "__hash__ = None" in the class definition. '
+ 'Doing so\n'
+ ' means that not only will instances of the class raise an\n'
+ ' appropriate "TypeError" when a program attempts to '
+ 'retrieve their\n'
+ ' hash value, but they will also be correctly identified '
+ 'as\n'
+ ' unhashable when checking "isinstance(obj, '
+ 'collections.Hashable)"\n'
+ ' (unlike classes which define their own "__hash__()" to '
+ 'explicitly\n'
+ ' raise "TypeError").\n'
+ '\n'
+ ' Changed in version 2.5: "__hash__()" may now also return '
+ 'a long\n'
+ ' integer object; the 32-bit integer is then derived from '
+ 'the hash of\n'
+ ' that object.\n'
'\n'
- ' Changed in version 3.3: Hash randomization is enabled by '
- 'default.\n'
+ ' Changed in version 2.6: "__hash__" may now be set to '
+ '"None" to\n'
+ ' explicitly flag instances of a class as unhashable.\n'
'\n'
- 'object.__bool__(self)\n'
+ 'object.__nonzero__(self)\n'
'\n'
' Called to implement truth value testing and the built-in '
'operation\n'
- ' "bool()"; should return "False" or "True". When this '
- 'method is not\n'
- ' defined, "__len__()" is called, if it is defined, and the '
- 'object is\n'
- ' considered true if its result is nonzero. If a class '
+ ' "bool()"; should return "False" or "True", or their '
+ 'integer\n'
+ ' equivalents "0" or "1". When this method is not '
+ 'defined,\n'
+ ' "__len__()" is called, if it is defined, and the object '
+ 'is\n'
+ ' considered true if its result is nonzero. If a class '
'defines\n'
- ' neither "__len__()" nor "__bool__()", all its instances '
- 'are\n'
+ ' neither "__len__()" nor "__nonzero__()", all its '
+ 'instances are\n'
' considered true.\n'
'\n'
+ 'object.__unicode__(self)\n'
+ '\n'
+ ' Called to implement "unicode()" built-in; should return a '
+ 'Unicode\n'
+ ' object. When this method is not defined, string '
+ 'conversion is\n'
+ ' attempted, and the result of string conversion is '
+ 'converted to\n'
+ ' Unicode using the system default encoding.\n'
+ '\n'
'\n'
'Customizing attribute access\n'
'============================\n'
@@ -8296,17 +7584,15 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
'object.__getattr__(self, name)\n'
'\n'
- ' Called when the default attribute access fails with an\n'
- ' "AttributeError" (either "__getattribute__()" raises an\n'
- ' "AttributeError" because *name* is not an instance '
- 'attribute or an\n'
- ' attribute in the class tree for "self"; or "__get__()" of '
- 'a *name*\n'
- ' property raises "AttributeError"). This method should '
- 'either\n'
- ' return the (computed) attribute value or raise an '
- '"AttributeError"\n'
- ' exception.\n'
+ ' Called when an attribute lookup has not found the '
+ 'attribute in the\n'
+ ' usual places (i.e. it is not an instance attribute nor is '
+ 'it found\n'
+ ' in the class tree for "self"). "name" is the attribute '
+ 'name. This\n'
+ ' method should return the (computed) attribute value or '
+ 'raise an\n'
+ ' "AttributeError" exception.\n'
'\n'
' Note that if the attribute is found through the normal '
'mechanism,\n'
@@ -8325,32 +7611,7 @@ topics = {'assert': 'The "assert" statement\n'
' instead inserting them in another object). See the\n'
' "__getattribute__()" method below for a way to actually '
'get total\n'
- ' control over attribute access.\n'
- '\n'
- 'object.__getattribute__(self, name)\n'
- '\n'
- ' Called unconditionally to implement attribute accesses '
- 'for\n'
- ' instances of the class. If the class also defines '
- '"__getattr__()",\n'
- ' the latter will not be called unless "__getattribute__()" '
- 'either\n'
- ' calls it explicitly or raises an "AttributeError". This '
- 'method\n'
- ' should return the (computed) attribute value or raise an\n'
- ' "AttributeError" exception. In order to avoid infinite '
- 'recursion in\n'
- ' this method, its implementation should always call the '
- 'base class\n'
- ' method with the same name to access any attributes it '
- 'needs, for\n'
- ' example, "object.__getattribute__(self, name)".\n'
- '\n'
- ' Note: This method may still be bypassed when looking up '
- 'special\n'
- ' methods as the result of implicit invocation via '
- 'language syntax\n'
- ' or built-in functions. See Special method lookup.\n'
+ ' control in new-style classes.\n'
'\n'
'object.__setattr__(self, name, value)\n'
'\n'
@@ -8358,15 +7619,24 @@ topics = {'assert': 'The "assert" statement\n'
'is called\n'
' instead of the normal mechanism (i.e. store the value in '
'the\n'
- ' instance dictionary). *name* is the attribute name, '
+ ' instance dictionary). *name* is the attribute name, '
'*value* is the\n'
' value to be assigned to it.\n'
'\n'
' If "__setattr__()" wants to assign to an instance '
'attribute, it\n'
- ' should call the base class method with the same name, for '
- 'example,\n'
- ' "object.__setattr__(self, name, value)".\n'
+ ' should not simply execute "self.name = value" --- this '
+ 'would cause\n'
+ ' a recursive call to itself. Instead, it should insert '
+ 'the value in\n'
+ ' the dictionary of instance attributes, e.g., '
+ '"self.__dict__[name] =\n'
+ ' value". For new-style classes, rather than accessing the '
+ 'instance\n'
+ ' dictionary, it should call the base class method with the '
+ 'same\n'
+ ' name, for example, "object.__setattr__(self, name, '
+ 'value)".\n'
'\n'
'object.__delattr__(self, name)\n'
'\n'
@@ -8376,85 +7646,38 @@ topics = {'assert': 'The "assert" statement\n'
'obj.name" is\n'
' meaningful for the object.\n'
'\n'
- 'object.__dir__(self)\n'
- '\n'
- ' Called when "dir()" is called on the object. A sequence '
- 'must be\n'
- ' returned. "dir()" converts the returned sequence to a '
- 'list and\n'
- ' sorts it.\n'
- '\n'
- '\n'
- 'Customizing module attribute access\n'
- '-----------------------------------\n'
- '\n'
- 'Special names "__getattr__" and "__dir__" can be also used '
- 'to\n'
- 'customize access to module attributes. The "__getattr__" '
- 'function at\n'
- 'the module level should accept one argument which is the '
- 'name of an\n'
- 'attribute and return the computed value or raise an '
- '"AttributeError".\n'
- 'If an attribute is not found on a module object through the '
- 'normal\n'
- 'lookup, i.e. "object.__getattribute__()", then "__getattr__" '
- 'is\n'
- 'searched in the module "__dict__" before raising an '
- '"AttributeError".\n'
- 'If found, it is called with the attribute name and the '
- 'result is\n'
- 'returned.\n'
- '\n'
- 'The "__dir__" function should accept no arguments, and '
- 'return a\n'
- 'sequence of strings that represents the names accessible on '
- 'module. If\n'
- 'present, this function overrides the standard "dir()" search '
- 'on a\n'
- 'module.\n'
- '\n'
- 'For a more fine grained customization of the module behavior '
- '(setting\n'
- 'attributes, properties, etc.), one can set the "__class__" '
- 'attribute\n'
- 'of a module object to a subclass of "types.ModuleType". For '
- 'example:\n'
- '\n'
- ' import sys\n'
- ' from types import ModuleType\n'
- '\n'
- ' class VerboseModule(ModuleType):\n'
- ' def __repr__(self):\n'
- " return f'Verbose {self.__name__}'\n"
'\n'
- ' def __setattr__(self, attr, value):\n'
- " print(f'Setting {attr}...')\n"
- ' super().__setattr__(attr, value)\n'
+ 'More attribute access for new-style classes\n'
+ '-------------------------------------------\n'
'\n'
- ' sys.modules[__name__].__class__ = VerboseModule\n'
+ 'The following methods only apply to new-style classes.\n'
'\n'
- 'Note: Defining module "__getattr__" and setting module '
- '"__class__"\n'
- ' only affect lookups made using the attribute access syntax '
- '–\n'
- ' directly accessing the module globals (whether by code '
- 'within the\n'
- ' module, or via a reference to the module’s globals '
- 'dictionary) is\n'
- ' unaffected.\n'
- '\n'
- 'Changed in version 3.5: "__class__" module attribute is now '
- 'writable.\n'
- '\n'
- 'New in version 3.7: "__getattr__" and "__dir__" module '
- 'attributes.\n'
+ 'object.__getattribute__(self, name)\n'
'\n'
- 'See also:\n'
+ ' Called unconditionally to implement attribute accesses '
+ 'for\n'
+ ' instances of the class. If the class also defines '
+ '"__getattr__()",\n'
+ ' the latter will not be called unless "__getattribute__()" '
+ 'either\n'
+ ' calls it explicitly or raises an "AttributeError". This '
+ 'method\n'
+ ' should return the (computed) attribute value or raise an\n'
+ ' "AttributeError" exception. In order to avoid infinite '
+ 'recursion in\n'
+ ' this method, its implementation should always call the '
+ 'base class\n'
+ ' method with the same name to access any attributes it '
+ 'needs, for\n'
+ ' example, "object.__getattribute__(self, name)".\n'
'\n'
- ' **PEP 562** - Module __getattr__ and __dir__\n'
- ' Describes the "__getattr__" and "__dir__" functions on '
- 'modules.\n'
+ ' Note: This method may still be bypassed when looking up '
+ 'special\n'
+ ' methods as the result of implicit invocation via '
+ 'language syntax\n'
+ ' or built-in functions. See Special method lookup for '
+ 'new-style\n'
+ ' classes.\n'
'\n'
'\n'
'Implementing Descriptors\n'
@@ -8464,42 +7687,29 @@ topics = {'assert': 'The "assert" statement\n'
'class\n'
'containing the method (a so-called *descriptor* class) '
'appears in an\n'
- '*owner* class (the descriptor must be in either the owner’s '
+ "*owner* class (the descriptor must be in either the owner's "
'class\n'
'dictionary or in the class dictionary for one of its '
'parents). In the\n'
- 'examples below, “the attribute” refers to the attribute '
+ 'examples below, "the attribute" refers to the attribute '
'whose name is\n'
- 'the key of the property in the owner class’ "__dict__".\n'
+ 'the key of the property in the owner class\' "__dict__".\n'
'\n'
- 'object.__get__(self, instance, owner=None)\n'
+ 'object.__get__(self, instance, owner)\n'
'\n'
' Called to get the attribute of the owner class (class '
'attribute\n'
' access) or of an instance of that class (instance '
'attribute\n'
- ' access). The optional *owner* argument is the owner '
- 'class, while\n'
- ' *instance* is the instance that the attribute was '
- 'accessed through,\n'
- ' or "None" when the attribute is accessed through the '
- '*owner*.\n'
- '\n'
- ' This method should return the computed attribute value or '
- 'raise an\n'
- ' "AttributeError" exception.\n'
- '\n'
- ' **PEP 252** specifies that "__get__()" is callable with '
- 'one or two\n'
- ' arguments. Python’s own built-in descriptors support '
- 'this\n'
- ' specification; however, it is likely that some '
- 'third-party tools\n'
- ' have descriptors that require both arguments. Python’s '
- 'own\n'
- ' "__getattribute__()" implementation always passes in both '
- 'arguments\n'
- ' whether they are required or not.\n'
+ ' access). *owner* is always the owner class, while '
+ '*instance* is the\n'
+ ' instance that the attribute was accessed through, or '
+ '"None" when\n'
+ ' the attribute is accessed through the *owner*. This '
+ 'method should\n'
+ ' return the (computed) attribute value or raise an '
+ '"AttributeError"\n'
+ ' exception.\n'
'\n'
'object.__set__(self, instance, value)\n'
'\n'
@@ -8507,47 +7717,19 @@ topics = {'assert': 'The "assert" statement\n'
'the owner\n'
' class to a new value, *value*.\n'
'\n'
- ' Note, adding "__set__()" or "__delete__()" changes the '
- 'kind of\n'
- ' descriptor to a “data descriptor”. See Invoking '
- 'Descriptors for\n'
- ' more details.\n'
- '\n'
'object.__delete__(self, instance)\n'
'\n'
' Called to delete the attribute on an instance *instance* '
'of the\n'
' owner class.\n'
'\n'
- 'object.__set_name__(self, owner, name)\n'
- '\n'
- ' Called at the time the owning class *owner* is created. '
- 'The\n'
- ' descriptor has been assigned to *name*.\n'
- '\n'
- ' New in version 3.6.\n'
- '\n'
- 'The attribute "__objclass__" is interpreted by the "inspect" '
- 'module as\n'
- 'specifying the class where this object was defined (setting '
- 'this\n'
- 'appropriately can assist in runtime introspection of dynamic '
- 'class\n'
- 'attributes). For callables, it may indicate that an instance '
- 'of the\n'
- 'given type (or a subclass) is expected or required as the '
- 'first\n'
- 'positional argument (for example, CPython sets this '
- 'attribute for\n'
- 'unbound methods that are implemented in C).\n'
- '\n'
'\n'
'Invoking Descriptors\n'
'--------------------\n'
'\n'
'In general, a descriptor is an object attribute with '
- '“binding\n'
- 'behavior”, one whose attribute access has been overridden by '
+ '"binding\n'
+ 'behavior", one whose attribute access has been overridden by '
'methods\n'
'in the descriptor protocol: "__get__()", "__set__()", and\n'
'"__delete__()". If any of those methods are defined for an '
@@ -8556,7 +7738,7 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
'The default behavior for attribute access is to get, set, or '
'delete\n'
- 'the attribute from an object’s dictionary. For instance, '
+ "the attribute from an object's dictionary. For instance, "
'"a.x" has a\n'
'lookup chain starting with "a.__dict__[\'x\']", then\n'
'"type(a).__dict__[\'x\']", and continuing through the base '
@@ -8571,7 +7753,10 @@ topics = {'assert': 'The "assert" statement\n'
'the\n'
'precedence chain depends on which descriptor methods were '
'defined and\n'
- 'how they were called.\n'
+ 'how they were called. Note that descriptors are only '
+ 'invoked for new\n'
+ 'style objects or classes (ones that subclass "object()" or '
+ '"type()").\n'
'\n'
'The starting point for descriptor invocation is a binding, '
'"a.x". How\n'
@@ -8583,14 +7768,15 @@ topics = {'assert': 'The "assert" statement\n'
' invokes a descriptor method: "x.__get__(a)".\n'
'\n'
'Instance Binding\n'
- ' If binding to an object instance, "a.x" is transformed '
- 'into the\n'
- ' call: "type(a).__dict__[\'x\'].__get__(a, type(a))".\n'
+ ' If binding to a new-style object instance, "a.x" is '
+ 'transformed\n'
+ ' into the call: "type(a).__dict__[\'x\'].__get__(a, '
+ 'type(a))".\n'
'\n'
'Class Binding\n'
- ' If binding to a class, "A.x" is transformed into the '
- 'call:\n'
- ' "A.__dict__[\'x\'].__get__(None, A)".\n'
+ ' If binding to a new-style class, "A.x" is transformed '
+ 'into the\n'
+ ' call: "A.__dict__[\'x\'].__get__(None, A)".\n'
'\n'
'Super Binding\n'
' If "a" is an instance of "super", then the binding '
@@ -8610,7 +7796,7 @@ topics = {'assert': 'The "assert" statement\n'
'does not define "__get__()", then accessing the attribute '
'will return\n'
'the descriptor object itself unless there is a value in the '
- 'object’s\n'
+ "object's\n"
'instance dictionary. If the descriptor defines "__set__()" '
'and/or\n'
'"__delete__()", it is a data descriptor; if it defines '
@@ -8619,13 +7805,12 @@ topics = {'assert': 'The "assert" statement\n'
'both\n'
'"__get__()" and "__set__()", while non-data descriptors have '
'just the\n'
- '"__get__()" method. Data descriptors with "__get__()" and '
- '"__set__()"\n'
- '(and/or "__delete__()") defined always override a '
- 'redefinition in an\n'
- 'instance dictionary. In contrast, non-data descriptors can '
- 'be\n'
- 'overridden by instances.\n'
+ '"__get__()" method. Data descriptors with "__set__()" and '
+ '"__get__()"\n'
+ 'defined always override a redefinition in an instance '
+ 'dictionary. In\n'
+ 'contrast, non-data descriptors can be overridden by '
+ 'instances.\n'
'\n'
'Python methods (including "staticmethod()" and '
'"classmethod()") are\n'
@@ -8645,38 +7830,45 @@ topics = {'assert': 'The "assert" statement\n'
'__slots__\n'
'---------\n'
'\n'
- '*__slots__* allow us to explicitly declare data members '
- '(like\n'
- 'properties) and deny the creation of *__dict__* and '
- '*__weakref__*\n'
- '(unless explicitly declared in *__slots__* or available in a '
- 'parent.)\n'
- '\n'
- 'The space saved over using *__dict__* can be significant. '
- 'Attribute\n'
- 'lookup speed can be significantly improved as well.\n'
+ 'By default, instances of both old and new-style classes have '
+ 'a\n'
+ 'dictionary for attribute storage. This wastes space for '
+ 'objects\n'
+ 'having very few instance variables. The space consumption '
+ 'can become\n'
+ 'acute when creating large numbers of instances.\n'
+ '\n'
+ 'The default can be overridden by defining *__slots__* in a '
+ 'new-style\n'
+ 'class definition. The *__slots__* declaration takes a '
+ 'sequence of\n'
+ 'instance variables and reserves just enough space in each '
+ 'instance to\n'
+ 'hold a value for each variable. Space is saved because '
+ '*__dict__* is\n'
+ 'not created for each instance.\n'
'\n'
- 'object.__slots__\n'
+ '__slots__\n'
'\n'
' This class variable can be assigned a string, iterable, '
'or sequence\n'
- ' of strings with variable names used by instances. '
- '*__slots__*\n'
- ' reserves space for the declared variables and prevents '
- 'the\n'
- ' automatic creation of *__dict__* and *__weakref__* for '
- 'each\n'
- ' instance.\n'
+ ' of strings with variable names used by instances. If '
+ 'defined in a\n'
+ ' new-style class, *__slots__* reserves space for the '
+ 'declared\n'
+ ' variables and prevents the automatic creation of '
+ '*__dict__* and\n'
+ ' *__weakref__* for each instance.\n'
'\n'
+ ' New in version 2.2.\n'
'\n'
'Notes on using *__slots__*\n'
- '~~~~~~~~~~~~~~~~~~~~~~~~~~\n'
'\n'
'* When inheriting from a class without *__slots__*, the '
'*__dict__*\n'
- ' and *__weakref__* attribute of the instances will always '
- 'be\n'
- ' accessible.\n'
+ ' attribute of that class will always be accessible, so a '
+ '*__slots__*\n'
+ ' definition in the subclass is meaningless.\n'
'\n'
'* Without a *__dict__* variable, instances cannot be '
'assigned new\n'
@@ -8689,6 +7881,14 @@ topics = {'assert': 'The "assert" statement\n'
'*__slots__*\n'
' declaration.\n'
'\n'
+ ' Changed in version 2.3: Previously, adding "\'__dict__\'" '
+ 'to the\n'
+ ' *__slots__* declaration would not enable the assignment of '
+ 'new\n'
+ ' attributes not specifically listed in the sequence of '
+ 'instance\n'
+ ' variable names.\n'
+ '\n'
'* Without a *__weakref__* variable for each instance, '
'classes\n'
' defining *__slots__* do not support weak references to '
@@ -8698,6 +7898,11 @@ topics = {'assert': 'The "assert" statement\n'
'*__slots__*\n'
' declaration.\n'
'\n'
+ ' Changed in version 2.3: Previously, adding '
+ '"\'__weakref__\'" to the\n'
+ ' *__slots__* declaration would not enable support for weak\n'
+ ' references.\n'
+ '\n'
'* *__slots__* are implemented at the class level by '
'creating\n'
' descriptors (Implementing Descriptors) for each variable '
@@ -8708,16 +7913,13 @@ topics = {'assert': 'The "assert" statement\n'
'class\n'
' attribute would overwrite the descriptor assignment.\n'
'\n'
- '* The action of a *__slots__* declaration is not limited to '
- 'the\n'
- ' class where it is defined. *__slots__* declared in '
- 'parents are\n'
- ' available in child classes. However, child subclasses will '
- 'get a\n'
- ' *__dict__* and *__weakref__* unless they also define '
- '*__slots__*\n'
- ' (which should only contain names of any *additional* '
- 'slots).\n'
+ '* The action of a *__slots__* declaration is limited to the '
+ 'class\n'
+ ' where it is defined. As a result, subclasses will have a '
+ '*__dict__*\n'
+ ' unless they also define *__slots__* (which must only '
+ 'contain names\n'
+ ' of any *additional* slots).\n'
'\n'
'* If a class defines a slot also defined in a base class, '
'the\n'
@@ -8731,8 +7933,8 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
'* Nonempty *__slots__* does not work for classes derived '
'from\n'
- ' “variable-length” built-in types such as "int", "bytes" '
- 'and "tuple".\n'
+ ' "variable-length" built-in types such as "long", "str" and '
+ '"tuple".\n'
'\n'
'* Any non-string iterable may be assigned to *__slots__*. '
'Mappings\n'
@@ -8744,312 +7946,89 @@ topics = {'assert': 'The "assert" statement\n'
'same\n'
' *__slots__*.\n'
'\n'
- '* Multiple inheritance with multiple slotted parent classes '
- 'can be\n'
- ' used, but only one parent is allowed to have attributes '
- 'created by\n'
- ' slots (the other bases must have empty slot layouts) - '
- 'violations\n'
- ' raise "TypeError".\n'
- '\n'
- '* If an iterator is used for *__slots__* then a descriptor '
- 'is\n'
- ' created for each of the iterator’s values. However, the '
- '*__slots__*\n'
- ' attribute will be an empty iterator.\n'
+ ' Changed in version 2.6: Previously, *__class__* assignment '
+ 'raised an\n'
+ ' error if either new or old class had *__slots__*.\n'
'\n'
'\n'
'Customizing class creation\n'
'==========================\n'
'\n'
- 'Whenever a class inherits from another class, '
- '*__init_subclass__* is\n'
- 'called on that class. This way, it is possible to write '
- 'classes which\n'
- 'change the behavior of subclasses. This is closely related '
- 'to class\n'
- 'decorators, but where class decorators only affect the '
- 'specific class\n'
- 'they’re applied to, "__init_subclass__" solely applies to '
- 'future\n'
- 'subclasses of the class defining the method.\n'
- '\n'
- 'classmethod object.__init_subclass__(cls)\n'
- '\n'
- ' This method is called whenever the containing class is '
- 'subclassed.\n'
- ' *cls* is then the new subclass. If defined as a normal '
- 'instance\n'
- ' method, this method is implicitly converted to a class '
- 'method.\n'
- '\n'
- ' Keyword arguments which are given to a new class are '
- 'passed to the\n'
- ' parent’s class "__init_subclass__". For compatibility '
- 'with other\n'
- ' classes using "__init_subclass__", one should take out '
- 'the needed\n'
- ' keyword arguments and pass the others over to the base '
- 'class, as\n'
- ' in:\n'
- '\n'
- ' class Philosopher:\n'
- ' def __init_subclass__(cls, /, default_name, '
- '**kwargs):\n'
- ' super().__init_subclass__(**kwargs)\n'
- ' cls.default_name = default_name\n'
- '\n'
- ' class AustralianPhilosopher(Philosopher, '
- 'default_name="Bruce"):\n'
- ' pass\n'
- '\n'
- ' The default implementation "object.__init_subclass__" '
- 'does nothing,\n'
- ' but raises an error if it is called with any arguments.\n'
- '\n'
- ' Note: The metaclass hint "metaclass" is consumed by the '
- 'rest of\n'
- ' the type machinery, and is never passed to '
- '"__init_subclass__"\n'
- ' implementations. The actual metaclass (rather than the '
- 'explicit\n'
- ' hint) can be accessed as "type(cls)".\n'
- '\n'
- ' New in version 3.6.\n'
- '\n'
- '\n'
- 'Metaclasses\n'
- '-----------\n'
- '\n'
- 'By default, classes are constructed using "type()". The '
- 'class body is\n'
- 'executed in a new namespace and the class name is bound '
- 'locally to the\n'
- 'result of "type(name, bases, namespace)".\n'
- '\n'
- 'The class creation process can be customized by passing the\n'
- '"metaclass" keyword argument in the class definition line, '
- 'or by\n'
- 'inheriting from an existing class that included such an '
- 'argument. In\n'
- 'the following example, both "MyClass" and "MySubclass" are '
- 'instances\n'
- 'of "Meta":\n'
- '\n'
- ' class Meta(type):\n'
- ' pass\n'
- '\n'
- ' class MyClass(metaclass=Meta):\n'
- ' pass\n'
- '\n'
- ' class MySubclass(MyClass):\n'
- ' pass\n'
- '\n'
- 'Any other keyword arguments that are specified in the class '
- 'definition\n'
- 'are passed through to all metaclass operations described '
- 'below.\n'
- '\n'
- 'When a class definition is executed, the following steps '
- 'occur:\n'
- '\n'
- '* MRO entries are resolved;\n'
- '\n'
- '* the appropriate metaclass is determined;\n'
- '\n'
- '* the class namespace is prepared;\n'
- '\n'
- '* the class body is executed;\n'
- '\n'
- '* the class object is created.\n'
- '\n'
- '\n'
- 'Resolving MRO entries\n'
- '---------------------\n'
- '\n'
- 'If a base that appears in class definition is not an '
- 'instance of\n'
- '"type", then an "__mro_entries__" method is searched on it. '
- 'If found,\n'
- 'it is called with the original bases tuple. This method must '
- 'return a\n'
- 'tuple of classes that will be used instead of this base. The '
- 'tuple may\n'
- 'be empty, in such case the original base is ignored.\n'
- '\n'
- 'See also: **PEP 560** - Core support for typing module and '
- 'generic\n'
- ' types\n'
- '\n'
- '\n'
- 'Determining the appropriate metaclass\n'
- '-------------------------------------\n'
- '\n'
- 'The appropriate metaclass for a class definition is '
- 'determined as\n'
- 'follows:\n'
- '\n'
- '* if no bases and no explicit metaclass are given, then '
- '"type()" is\n'
- ' used;\n'
- '\n'
- '* if an explicit metaclass is given and it is *not* an '
- 'instance of\n'
- ' "type()", then it is used directly as the metaclass;\n'
- '\n'
- '* if an instance of "type()" is given as the explicit '
- 'metaclass, or\n'
- ' bases are defined, then the most derived metaclass is '
- 'used.\n'
- '\n'
- 'The most derived metaclass is selected from the explicitly '
- 'specified\n'
- 'metaclass (if any) and the metaclasses (i.e. "type(cls)") of '
- 'all\n'
- 'specified base classes. The most derived metaclass is one '
- 'which is a\n'
- 'subtype of *all* of these candidate metaclasses. If none of '
- 'the\n'
- 'candidate metaclasses meets that criterion, then the class '
- 'definition\n'
- 'will fail with "TypeError".\n'
- '\n'
- '\n'
- 'Preparing the class namespace\n'
- '-----------------------------\n'
- '\n'
- 'Once the appropriate metaclass has been identified, then the '
- 'class\n'
- 'namespace is prepared. If the metaclass has a "__prepare__" '
- 'attribute,\n'
- 'it is called as "namespace = metaclass.__prepare__(name, '
- 'bases,\n'
- '**kwds)" (where the additional keyword arguments, if any, '
- 'come from\n'
- 'the class definition).\n'
- '\n'
- 'If the metaclass has no "__prepare__" attribute, then the '
- 'class\n'
- 'namespace is initialised as an empty ordered mapping.\n'
- '\n'
- 'See also:\n'
- '\n'
- ' **PEP 3115** - Metaclasses in Python 3000\n'
- ' Introduced the "__prepare__" namespace hook\n'
- '\n'
- '\n'
- 'Executing the class body\n'
- '------------------------\n'
- '\n'
- 'The class body is executed (approximately) as "exec(body, '
- 'globals(),\n'
- 'namespace)". The key difference from a normal call to '
- '"exec()" is that\n'
- 'lexical scoping allows the class body (including any '
- 'methods) to\n'
- 'reference names from the current and outer scopes when the '
- 'class\n'
- 'definition occurs inside a function.\n'
- '\n'
- 'However, even when the class definition occurs inside the '
- 'function,\n'
- 'methods defined inside the class still cannot see names '
- 'defined at the\n'
- 'class scope. Class variables must be accessed through the '
- 'first\n'
- 'parameter of instance or class methods, or through the '
- 'implicit\n'
- 'lexically scoped "__class__" reference described in the next '
- 'section.\n'
- '\n'
+ 'By default, new-style classes are constructed using '
+ '"type()". A class\n'
+ 'definition is read into a separate namespace and the value '
+ 'of class\n'
+ 'name is bound to the result of "type(name, bases, dict)".\n'
+ '\n'
+ 'When the class definition is read, if *__metaclass__* is '
+ 'defined then\n'
+ 'the callable assigned to it will be called instead of '
+ '"type()". This\n'
+ 'allows classes or functions to be written which monitor or '
+ 'alter the\n'
+ 'class creation process:\n'
+ '\n'
+ '* Modifying the class dictionary prior to the class being '
+ 'created.\n'
+ '\n'
+ '* Returning an instance of another class -- essentially '
+ 'performing\n'
+ ' the role of a factory function.\n'
+ '\n'
+ "These steps will have to be performed in the metaclass's "
+ '"__new__()"\n'
+ 'method -- "type.__new__()" can then be called from this '
+ 'method to\n'
+ 'create a class with different properties. This example adds '
+ 'a new\n'
+ 'element to the class dictionary before creating the class:\n'
+ '\n'
+ ' class metacls(type):\n'
+ ' def __new__(mcs, name, bases, dict):\n'
+ " dict['foo'] = 'metacls was here'\n"
+ ' return type.__new__(mcs, name, bases, dict)\n'
+ '\n'
+ 'You can of course also override other class methods (or add '
+ 'new\n'
+ 'methods); for example defining a custom "__call__()" method '
+ 'in the\n'
+ 'metaclass allows custom behavior when the class is called, '
+ 'e.g. not\n'
+ 'always creating a new instance.\n'
'\n'
- 'Creating the class object\n'
- '-------------------------\n'
+ '__metaclass__\n'
'\n'
- 'Once the class namespace has been populated by executing the '
- 'class\n'
- 'body, the class object is created by calling '
- '"metaclass(name, bases,\n'
- 'namespace, **kwds)" (the additional keywords passed here are '
- 'the same\n'
- 'as those passed to "__prepare__").\n'
- '\n'
- 'This class object is the one that will be referenced by the '
- 'zero-\n'
- 'argument form of "super()". "__class__" is an implicit '
- 'closure\n'
- 'reference created by the compiler if any methods in a class '
- 'body refer\n'
- 'to either "__class__" or "super". This allows the zero '
- 'argument form\n'
- 'of "super()" to correctly identify the class being defined '
- 'based on\n'
- 'lexical scoping, while the class or instance that was used '
- 'to make the\n'
- 'current call is identified based on the first argument '
- 'passed to the\n'
- 'method.\n'
+ ' This variable can be any callable accepting arguments for '
+ '"name",\n'
+ ' "bases", and "dict". Upon class creation, the callable '
+ 'is used\n'
+ ' instead of the built-in "type()".\n'
'\n'
- '**CPython implementation detail:** In CPython 3.6 and later, '
- 'the\n'
- '"__class__" cell is passed to the metaclass as a '
- '"__classcell__" entry\n'
- 'in the class namespace. If present, this must be propagated '
- 'up to the\n'
- '"type.__new__" call in order for the class to be '
- 'initialised\n'
- 'correctly. Failing to do so will result in a "RuntimeError" '
- 'in Python\n'
- '3.8.\n'
- '\n'
- 'When using the default metaclass "type", or any metaclass '
- 'that\n'
- 'ultimately calls "type.__new__", the following additional\n'
- 'customisation steps are invoked after creating the class '
- 'object:\n'
+ ' New in version 2.2.\n'
'\n'
- '* first, "type.__new__" collects all of the descriptors in '
- 'the class\n'
- ' namespace that define a "__set_name__()" method;\n'
+ 'The appropriate metaclass is determined by the following '
+ 'precedence\n'
+ 'rules:\n'
'\n'
- '* second, all of these "__set_name__" methods are called '
- 'with the\n'
- ' class being defined and the assigned name of that '
- 'particular\n'
- ' descriptor;\n'
+ '* If "dict[\'__metaclass__\']" exists, it is used.\n'
'\n'
- '* finally, the "__init_subclass__()" hook is called on the '
- 'immediate\n'
- ' parent of the new class in its method resolution order.\n'
+ '* Otherwise, if there is at least one base class, its '
+ 'metaclass is\n'
+ ' used (this looks for a *__class__* attribute first and if '
+ 'not found,\n'
+ ' uses its type).\n'
'\n'
- 'After the class object is created, it is passed to the '
- 'class\n'
- 'decorators included in the class definition (if any) and the '
- 'resulting\n'
- 'object is bound in the local namespace as the defined '
- 'class.\n'
+ '* Otherwise, if a global variable named __metaclass__ '
+ 'exists, it is\n'
+ ' used.\n'
'\n'
- 'When a new class is created by "type.__new__", the object '
- 'provided as\n'
- 'the namespace parameter is copied to a new ordered mapping '
- 'and the\n'
- 'original object is discarded. The new copy is wrapped in a '
- 'read-only\n'
- 'proxy, which becomes the "__dict__" attribute of the class '
- 'object.\n'
- '\n'
- 'See also:\n'
- '\n'
- ' **PEP 3135** - New super\n'
- ' Describes the implicit "__class__" closure reference\n'
- '\n'
- '\n'
- 'Uses for metaclasses\n'
- '--------------------\n'
+ '* Otherwise, the old-style, classic metaclass '
+ '(types.ClassType) is\n'
+ ' used.\n'
'\n'
'The potential uses for metaclasses are boundless. Some ideas '
'that have\n'
- 'been explored include enum, logging, interface checking, '
+ 'been explored including logging, interface checking, '
'automatic\n'
'delegation, automatic property creation, proxies, '
'frameworks, and\n'
@@ -9059,6 +8038,8 @@ topics = {'assert': 'The "assert" statement\n'
'Customizing instance and subclass checks\n'
'========================================\n'
'\n'
+ 'New in version 2.6.\n'
+ '\n'
'The following methods are used to override the default '
'behavior of the\n'
'"isinstance()" and "issubclass()" built-in functions.\n'
@@ -9067,7 +8048,7 @@ topics = {'assert': 'The "assert" statement\n'
'methods in\n'
'order to allow the addition of Abstract Base Classes (ABCs) '
'as\n'
- '“virtual base classes” to any class or type (including '
+ '"virtual base classes" to any class or type (including '
'built-in\n'
'types), including other ABCs.\n'
'\n'
@@ -9110,38 +8091,12 @@ topics = {'assert': 'The "assert" statement\n'
' module) to the language.\n'
'\n'
'\n'
- 'Emulating generic types\n'
- '=======================\n'
- '\n'
- 'One can implement the generic class syntax as specified by '
- '**PEP 484**\n'
- '(for example "List[int]") by defining a special method:\n'
- '\n'
- 'classmethod object.__class_getitem__(cls, key)\n'
- '\n'
- ' Return an object representing the specialization of a '
- 'generic class\n'
- ' by type arguments found in *key*.\n'
- '\n'
- 'This method is looked up on the class object itself, and '
- 'when defined\n'
- 'in the class body, this method is implicitly a class '
- 'method. Note,\n'
- 'this mechanism is primarily reserved for use with static '
- 'type hints,\n'
- 'other usage is discouraged.\n'
- '\n'
- 'See also: **PEP 560** - Core support for typing module and '
- 'generic\n'
- ' types\n'
- '\n'
- '\n'
'Emulating callable objects\n'
'==========================\n'
'\n'
'object.__call__(self[, args...])\n'
'\n'
- ' Called when the instance is “called” as a function; if '
+ ' Called when the instance is "called" as a function; if '
'this method\n'
' is defined, "x(arg1, arg2, ...)" is a shorthand for\n'
' "x.__call__(arg1, arg2, ...)".\n'
@@ -9164,48 +8119,52 @@ topics = {'assert': 'The "assert" statement\n'
'< N" where\n'
'*N* is the length of the sequence, or slice objects, which '
'define a\n'
- 'range of items. It is also recommended that mappings '
+ 'range of items. (For backwards compatibility, the method\n'
+ '"__getslice__()" (see below) can also be defined to handle '
+ 'simple, but\n'
+ 'not extended slices.) It is also recommended that mappings '
'provide the\n'
- 'methods "keys()", "values()", "items()", "get()", '
- '"clear()",\n'
- '"setdefault()", "pop()", "popitem()", "copy()", and '
- '"update()"\n'
- 'behaving similar to those for Python’s standard dictionary '
- 'objects.\n'
- 'The "collections.abc" module provides a "MutableMapping" '
- 'abstract base\n'
- 'class to help create those methods from a base set of '
- '"__getitem__()",\n'
- '"__setitem__()", "__delitem__()", and "keys()". Mutable '
- 'sequences\n'
- 'should provide methods "append()", "count()", "index()", '
- '"extend()",\n'
- '"insert()", "pop()", "remove()", "reverse()" and "sort()", '
- 'like Python\n'
- 'standard list objects. Finally, sequence types should '
- 'implement\n'
- 'addition (meaning concatenation) and multiplication '
- '(meaning\n'
- 'repetition) by defining the methods "__add__()", '
- '"__radd__()",\n'
- '"__iadd__()", "__mul__()", "__rmul__()" and "__imul__()" '
- 'described\n'
- 'below; they should not define other numerical operators. It '
- 'is\n'
+ 'methods "keys()", "values()", "items()", "has_key()", '
+ '"get()",\n'
+ '"clear()", "setdefault()", "iterkeys()", "itervalues()",\n'
+ '"iteritems()", "pop()", "popitem()", "copy()", and '
+ '"update()" behaving\n'
+ "similar to those for Python's standard dictionary objects. "
+ 'The\n'
+ '"UserDict" module provides a "DictMixin" class to help '
+ 'create those\n'
+ 'methods from a base set of "__getitem__()", '
+ '"__setitem__()",\n'
+ '"__delitem__()", and "keys()". Mutable sequences should '
+ 'provide\n'
+ 'methods "append()", "count()", "index()", "extend()", '
+ '"insert()",\n'
+ '"pop()", "remove()", "reverse()" and "sort()", like Python '
+ 'standard\n'
+ 'list objects. Finally, sequence types should implement '
+ 'addition\n'
+ '(meaning concatenation) and multiplication (meaning '
+ 'repetition) by\n'
+ 'defining the methods "__add__()", "__radd__()", '
+ '"__iadd__()",\n'
+ '"__mul__()", "__rmul__()" and "__imul__()" described below; '
+ 'they\n'
+ 'should not define "__coerce__()" or other numerical '
+ 'operators. It is\n'
'recommended that both mappings and sequences implement the\n'
'"__contains__()" method to allow efficient use of the "in" '
'operator;\n'
- 'for mappings, "in" should search the mapping’s keys; for '
- 'sequences, it\n'
- 'should search through the values. It is further recommended '
- 'that both\n'
- 'mappings and sequences implement the "__iter__()" method to '
- 'allow\n'
+ 'for mappings, "in" should be equivalent of "has_key()"; for '
+ 'sequences,\n'
+ 'it should search through the values. It is further '
+ 'recommended that\n'
+ 'both mappings and sequences implement the "__iter__()" '
+ 'method to allow\n'
'efficient iteration through the container; for mappings, '
'"__iter__()"\n'
- 'should iterate through the object’s keys; for sequences, it '
- 'should\n'
- 'iterate through the values.\n'
+ 'should be the same as "iterkeys()"; for sequences, it should '
+ 'iterate\n'
+ 'through the values.\n'
'\n'
'object.__len__(self)\n'
'\n'
@@ -9213,10 +8172,10 @@ topics = {'assert': 'The "assert" statement\n'
'Should return\n'
' the length of the object, an integer ">=" 0. Also, an '
'object that\n'
- ' doesn’t define a "__bool__()" method and whose '
- '"__len__()" method\n'
- ' returns zero is considered to be false in a Boolean '
- 'context.\n'
+ ' doesn\'t define a "__nonzero__()" method and whose '
+ '"__len__()"\n'
+ ' method returns zero is considered to be false in a '
+ 'Boolean context.\n'
'\n'
' **CPython implementation detail:** In CPython, the length '
'is\n'
@@ -9225,38 +8184,7 @@ topics = {'assert': 'The "assert" statement\n'
' "sys.maxsize" some features (such as "len()") may raise\n'
' "OverflowError". To prevent raising "OverflowError" by '
'truth value\n'
- ' testing, an object must define a "__bool__()" method.\n'
- '\n'
- 'object.__length_hint__(self)\n'
- '\n'
- ' Called to implement "operator.length_hint()". Should '
- 'return an\n'
- ' estimated length for the object (which may be greater or '
- 'less than\n'
- ' the actual length). The length must be an integer ">=" 0. '
- 'The\n'
- ' return value may also be "NotImplemented", which is '
- 'treated the\n'
- ' same as if the "__length_hint__" method didn’t exist at '
- 'all. This\n'
- ' method is purely an optimization and is never required '
- 'for\n'
- ' correctness.\n'
- '\n'
- ' New in version 3.4.\n'
- '\n'
- 'Note: Slicing is done exclusively with the following three '
- 'methods.\n'
- ' A call like\n'
- '\n'
- ' a[1:2] = b\n'
- '\n'
- ' is translated to\n'
- '\n'
- ' a[slice(1, 2, None)] = b\n'
- '\n'
- ' and so forth. Missing slice items are always filled in '
- 'with "None".\n'
+ ' testing, an object must define a "__nonzero__()" method.\n'
'\n'
'object.__getitem__(self, key)\n'
'\n'
@@ -9284,6 +8212,12 @@ topics = {'assert': 'The "assert" statement\n'
'the\n'
' sequence.\n'
'\n'
+ 'object.__missing__(self, key)\n'
+ '\n'
+ ' Called by "dict"."__getitem__()" to implement "self[key]" '
+ 'for dict\n'
+ ' subclasses when key is not in the dictionary.\n'
+ '\n'
'object.__setitem__(self, key, value)\n'
'\n'
' Called to implement assignment to "self[key]". Same note '
@@ -9311,12 +8245,6 @@ topics = {'assert': 'The "assert" statement\n'
' raised for improper *key* values as for the '
'"__getitem__()" method.\n'
'\n'
- 'object.__missing__(self, key)\n'
- '\n'
- ' Called by "dict"."__getitem__()" to implement "self[key]" '
- 'for dict\n'
- ' subclasses when key is not in the dictionary.\n'
- '\n'
'object.__iter__(self)\n'
'\n'
' This method is called when an iterator is required for a '
@@ -9325,7 +8253,9 @@ topics = {'assert': 'The "assert" statement\n'
'iterate\n'
' over all the objects in the container. For mappings, it '
'should\n'
- ' iterate over the keys of the container.\n'
+ ' iterate over the keys of the container, and should also '
+ 'be made\n'
+ ' available as the method "iterkeys()".\n'
'\n'
' Iterator objects also need to implement this method; they '
'are\n'
@@ -9354,14 +8284,16 @@ topics = {'assert': 'The "assert" statement\n'
'provided by\n'
' "reversed()".\n'
'\n'
+ ' New in version 2.6.\n'
+ '\n'
'The membership test operators ("in" and "not in") are '
'normally\n'
- 'implemented as an iteration through a container. However, '
+ 'implemented as an iteration through a sequence. However, '
'container\n'
'objects can supply the following special method with a more '
'efficient\n'
- 'implementation, which also does not require the object be '
- 'iterable.\n'
+ 'implementation, which also does not require the object be a '
+ 'sequence.\n'
'\n'
'object.__contains__(self, item)\n'
'\n'
@@ -9373,7 +8305,7 @@ topics = {'assert': 'The "assert" statement\n'
'values or\n'
' the key-item pairs.\n'
'\n'
- ' For objects that don’t define "__contains__()", the '
+ ' For objects that don\'t define "__contains__()", the '
'membership test\n'
' first tries iteration via "__iter__()", then the old '
'sequence\n'
@@ -9382,6 +8314,141 @@ topics = {'assert': 'The "assert" statement\n'
' language reference.\n'
'\n'
'\n'
+ 'Additional methods for emulation of sequence types\n'
+ '==================================================\n'
+ '\n'
+ 'The following optional methods can be defined to further '
+ 'emulate\n'
+ 'sequence objects. Immutable sequences methods should at '
+ 'most only\n'
+ 'define "__getslice__()"; mutable sequences might define all '
+ 'three\n'
+ 'methods.\n'
+ '\n'
+ 'object.__getslice__(self, i, j)\n'
+ '\n'
+ ' Deprecated since version 2.0: Support slice objects as '
+ 'parameters\n'
+ ' to the "__getitem__()" method. (However, built-in types '
+ 'in CPython\n'
+ ' currently still implement "__getslice__()". Therefore, '
+ 'you have to\n'
+ ' override it in derived classes when implementing '
+ 'slicing.)\n'
+ '\n'
+ ' Called to implement evaluation of "self[i:j]". The '
+ 'returned object\n'
+ ' should be of the same type as *self*. Note that missing '
+ '*i* or *j*\n'
+ ' in the slice expression are replaced by zero or '
+ '"sys.maxsize",\n'
+ ' respectively. If negative indexes are used in the slice, '
+ 'the\n'
+ ' length of the sequence is added to that index. If the '
+ 'instance does\n'
+ ' not implement the "__len__()" method, an "AttributeError" '
+ 'is\n'
+ ' raised. No guarantee is made that indexes adjusted this '
+ 'way are not\n'
+ ' still negative. Indexes which are greater than the '
+ 'length of the\n'
+ ' sequence are not modified. If no "__getslice__()" is '
+ 'found, a slice\n'
+ ' object is created instead, and passed to "__getitem__()" '
+ 'instead.\n'
+ '\n'
+ 'object.__setslice__(self, i, j, sequence)\n'
+ '\n'
+ ' Called to implement assignment to "self[i:j]". Same notes '
+ 'for *i*\n'
+ ' and *j* as for "__getslice__()".\n'
+ '\n'
+ ' This method is deprecated. If no "__setslice__()" is '
+ 'found, or for\n'
+ ' extended slicing of the form "self[i:j:k]", a slice '
+ 'object is\n'
+ ' created, and passed to "__setitem__()", instead of '
+ '"__setslice__()"\n'
+ ' being called.\n'
+ '\n'
+ 'object.__delslice__(self, i, j)\n'
+ '\n'
+ ' Called to implement deletion of "self[i:j]". Same notes '
+ 'for *i* and\n'
+ ' *j* as for "__getslice__()". This method is deprecated. '
+ 'If no\n'
+ ' "__delslice__()" is found, or for extended slicing of the '
+ 'form\n'
+ ' "self[i:j:k]", a slice object is created, and passed to\n'
+ ' "__delitem__()", instead of "__delslice__()" being '
+ 'called.\n'
+ '\n'
+ 'Notice that these methods are only invoked when a single '
+ 'slice with a\n'
+ 'single colon is used, and the slice method is available. '
+ 'For slice\n'
+ 'operations involving extended slice notation, or in absence '
+ 'of the\n'
+ 'slice methods, "__getitem__()", "__setitem__()" or '
+ '"__delitem__()" is\n'
+ 'called with a slice object as argument.\n'
+ '\n'
+ 'The following example demonstrate how to make your program '
+ 'or module\n'
+ 'compatible with earlier versions of Python (assuming that '
+ 'methods\n'
+ '"__getitem__()", "__setitem__()" and "__delitem__()" support '
+ 'slice\n'
+ 'objects as arguments):\n'
+ '\n'
+ ' class MyClass:\n'
+ ' ...\n'
+ ' def __getitem__(self, index):\n'
+ ' ...\n'
+ ' def __setitem__(self, index, value):\n'
+ ' ...\n'
+ ' def __delitem__(self, index):\n'
+ ' ...\n'
+ '\n'
+ ' if sys.version_info < (2, 0):\n'
+ " # They won't be defined if version is at least "
+ '2.0 final\n'
+ '\n'
+ ' def __getslice__(self, i, j):\n'
+ ' return self[max(0, i):max(0, j):]\n'
+ ' def __setslice__(self, i, j, seq):\n'
+ ' self[max(0, i):max(0, j):] = seq\n'
+ ' def __delslice__(self, i, j):\n'
+ ' del self[max(0, i):max(0, j):]\n'
+ ' ...\n'
+ '\n'
+ 'Note the calls to "max()"; these are necessary because of '
+ 'the handling\n'
+ 'of negative indices before the "__*slice__()" methods are '
+ 'called.\n'
+ 'When negative indexes are used, the "__*item__()" methods '
+ 'receive them\n'
+ 'as provided, but the "__*slice__()" methods get a "cooked" '
+ 'form of the\n'
+ 'index values. For each negative index value, the length of '
+ 'the\n'
+ 'sequence is added to the index before calling the method '
+ '(which may\n'
+ 'still result in a negative index); this is the customary '
+ 'handling of\n'
+ 'negative indexes by the built-in sequence types, and the '
+ '"__*item__()"\n'
+ 'methods are expected to do this as well. However, since '
+ 'they should\n'
+ 'already be doing that, negative indexes cannot be passed in; '
+ 'they must\n'
+ 'be constrained to the bounds of the sequence before being '
+ 'passed to\n'
+ 'the "__*item__()" methods. Calling "max(0, i)" conveniently '
+ 'returns\n'
+ 'the proper value.\n'
+ '\n'
+ '\n'
'Emulating numeric types\n'
'=======================\n'
'\n'
@@ -9396,8 +8463,6 @@ topics = {'assert': 'The "assert" statement\n'
'object.__add__(self, other)\n'
'object.__sub__(self, other)\n'
'object.__mul__(self, other)\n'
- 'object.__matmul__(self, other)\n'
- 'object.__truediv__(self, other)\n'
'object.__floordiv__(self, other)\n'
'object.__mod__(self, other)\n'
'object.__divmod__(self, other)\n'
@@ -9410,21 +8475,21 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
' These methods are called to implement the binary '
'arithmetic\n'
- ' operations ("+", "-", "*", "@", "/", "//", "%", '
- '"divmod()",\n'
- ' "pow()", "**", "<<", ">>", "&", "^", "|"). For instance, '
- 'to\n'
- ' evaluate the expression "x + y", where *x* is an instance '
- 'of a\n'
- ' class that has an "__add__()" method, "x.__add__(y)" is '
- 'called.\n'
- ' The "__divmod__()" method should be the equivalent to '
- 'using\n'
- ' "__floordiv__()" and "__mod__()"; it should not be '
- 'related to\n'
- ' "__truediv__()". Note that "__pow__()" should be defined '
- 'to accept\n'
- ' an optional third argument if the ternary version of the '
+ ' operations ("+", "-", "*", "//", "%", "divmod()", '
+ '"pow()", "**",\n'
+ ' "<<", ">>", "&", "^", "|"). For instance, to evaluate '
+ 'the\n'
+ ' expression "x + y", where *x* is an instance of a class '
+ 'that has an\n'
+ ' "__add__()" method, "x.__add__(y)" is called. The '
+ '"__divmod__()"\n'
+ ' method should be the equivalent to using "__floordiv__()" '
+ 'and\n'
+ ' "__mod__()"; it should not be related to "__truediv__()" '
+ '(described\n'
+ ' below). Note that "__pow__()" should be defined to '
+ 'accept an\n'
+ ' optional third argument if the ternary version of the '
'built-in\n'
' "pow()" function is to be supported.\n'
'\n'
@@ -9432,10 +8497,23 @@ topics = {'assert': 'The "assert" statement\n'
'with the\n'
' supplied arguments, it should return "NotImplemented".\n'
'\n'
+ 'object.__div__(self, other)\n'
+ 'object.__truediv__(self, other)\n'
+ '\n'
+ ' The division operator ("/") is implemented by these '
+ 'methods. The\n'
+ ' "__truediv__()" method is used when "__future__.division" '
+ 'is in\n'
+ ' effect, otherwise "__div__()" is used. If only one of '
+ 'these two\n'
+ ' methods is defined, the object will not support division '
+ 'in the\n'
+ ' alternate context; "TypeError" will be raised instead.\n'
+ '\n'
'object.__radd__(self, other)\n'
'object.__rsub__(self, other)\n'
'object.__rmul__(self, other)\n'
- 'object.__rmatmul__(self, other)\n'
+ 'object.__rdiv__(self, other)\n'
'object.__rtruediv__(self, other)\n'
'object.__rfloordiv__(self, other)\n'
'object.__rmod__(self, other)\n'
@@ -9449,15 +8527,15 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
' These methods are called to implement the binary '
'arithmetic\n'
- ' operations ("+", "-", "*", "@", "/", "//", "%", '
- '"divmod()",\n'
- ' "pow()", "**", "<<", ">>", "&", "^", "|") with reflected '
- '(swapped)\n'
- ' operands. These functions are only called if the left '
- 'operand does\n'
- ' not support the corresponding operation [3] and the '
- 'operands are of\n'
- ' different types. [4] For instance, to evaluate the '
+ ' operations ("+", "-", "*", "/", "%", "divmod()", "pow()", '
+ '"**",\n'
+ ' "<<", ">>", "&", "^", "|") with reflected (swapped) '
+ 'operands.\n'
+ ' These functions are only called if the left operand does '
+ 'not\n'
+ ' support the corresponding operation and the operands are '
+ 'of\n'
+ ' different types. [2] For instance, to evaluate the '
'expression "x -\n'
' y", where *y* is an instance of a class that has an '
'"__rsub__()"\n'
@@ -9469,20 +8547,20 @@ topics = {'assert': 'The "assert" statement\n'
'"__rpow__()" (the\n'
' coercion rules would become too complicated).\n'
'\n'
- ' Note: If the right operand’s type is a subclass of the '
+ " Note: If the right operand's type is a subclass of the "
'left\n'
- ' operand’s type and that subclass provides the reflected '
+ " operand's type and that subclass provides the reflected "
'method\n'
' for the operation, this method will be called before '
'the left\n'
- ' operand’s non-reflected method. This behavior allows '
+ " operand's non-reflected method. This behavior allows "
'subclasses\n'
- ' to override their ancestors’ operations.\n'
+ " to override their ancestors' operations.\n"
'\n'
'object.__iadd__(self, other)\n'
'object.__isub__(self, other)\n'
'object.__imul__(self, other)\n'
- 'object.__imatmul__(self, other)\n'
+ 'object.__idiv__(self, other)\n'
'object.__itruediv__(self, other)\n'
'object.__ifloordiv__(self, other)\n'
'object.__imod__(self, other)\n'
@@ -9495,31 +8573,26 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
' These methods are called to implement the augmented '
'arithmetic\n'
- ' assignments ("+=", "-=", "*=", "@=", "/=", "//=", "%=", '
- '"**=",\n'
- ' "<<=", ">>=", "&=", "^=", "|="). These methods should '
- 'attempt to\n'
- ' do the operation in-place (modifying *self*) and return '
- 'the result\n'
- ' (which could be, but does not have to be, *self*). If a '
- 'specific\n'
- ' method is not defined, the augmented assignment falls '
- 'back to the\n'
- ' normal methods. For instance, if *x* is an instance of a '
- 'class\n'
- ' with an "__iadd__()" method, "x += y" is equivalent to "x '
- '=\n'
- ' x.__iadd__(y)" . Otherwise, "x.__add__(y)" and '
- '"y.__radd__(x)" are\n'
- ' considered, as with the evaluation of "x + y". In '
- 'certain\n'
- ' situations, augmented assignment can result in unexpected '
- 'errors\n'
- ' (see Why does a_tuple[i] += [‘item’] raise an exception '
- 'when the\n'
- ' addition works?), but this behavior is in fact part of '
- 'the data\n'
- ' model.\n'
+ ' assignments ("+=", "-=", "*=", "/=", "//=", "%=", "**=", '
+ '"<<=",\n'
+ ' ">>=", "&=", "^=", "|="). These methods should attempt '
+ 'to do the\n'
+ ' operation in-place (modifying *self*) and return the '
+ 'result (which\n'
+ ' could be, but does not have to be, *self*). If a '
+ 'specific method\n'
+ ' is not defined, the augmented assignment falls back to '
+ 'the normal\n'
+ ' methods. For instance, to execute the statement "x += '
+ 'y", where\n'
+ ' *x* is an instance of a class that has an "__iadd__()" '
+ 'method,\n'
+ ' "x.__iadd__(y)" is called. If *x* is an instance of a '
+ 'class that\n'
+ ' does not define a "__iadd__()" method, "x.__add__(y)" '
+ 'and\n'
+ ' "y.__radd__(x)" are considered, as with the evaluation of '
+ '"x + y".\n'
'\n'
'object.__neg__(self)\n'
'object.__pos__(self)\n'
@@ -9532,53 +8605,188 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
'object.__complex__(self)\n'
'object.__int__(self)\n'
+ 'object.__long__(self)\n'
'object.__float__(self)\n'
'\n'
' Called to implement the built-in functions "complex()", '
- '"int()" and\n'
- ' "float()". Should return a value of the appropriate '
- 'type.\n'
+ '"int()",\n'
+ ' "long()", and "float()". Should return a value of the '
+ 'appropriate\n'
+ ' type.\n'
+ '\n'
+ 'object.__oct__(self)\n'
+ 'object.__hex__(self)\n'
+ '\n'
+ ' Called to implement the built-in functions "oct()" and '
+ '"hex()".\n'
+ ' Should return a string value.\n'
'\n'
'object.__index__(self)\n'
'\n'
- ' Called to implement "operator.index()", and whenever '
- 'Python needs\n'
- ' to losslessly convert the numeric object to an integer '
- 'object (such\n'
- ' as in slicing, or in the built-in "bin()", "hex()" and '
- '"oct()"\n'
- ' functions). Presence of this method indicates that the '
- 'numeric\n'
- ' object is an integer type. Must return an integer.\n'
- '\n'
- ' If "__int__()", "__float__()" and "__complex__()" are not '
- 'defined\n'
- ' then corresponding built-in functions "int()", "float()" '
- 'and\n'
- ' "complex()" fall back to "__index__()".\n'
+ ' Called to implement "operator.index()". Also called '
+ 'whenever\n'
+ ' Python needs an integer object (such as in slicing). '
+ 'Must return\n'
+ ' an integer (int or long).\n'
+ '\n'
+ ' New in version 2.5.\n'
+ '\n'
+ 'object.__coerce__(self, other)\n'
+ '\n'
+ ' Called to implement "mixed-mode" numeric arithmetic. '
+ 'Should either\n'
+ ' return a 2-tuple containing *self* and *other* converted '
+ 'to a\n'
+ ' common numeric type, or "None" if conversion is '
+ 'impossible. When\n'
+ ' the common type would be the type of "other", it is '
+ 'sufficient to\n'
+ ' return "None", since the interpreter will also ask the '
+ 'other object\n'
+ ' to attempt a coercion (but sometimes, if the '
+ 'implementation of the\n'
+ ' other type cannot be changed, it is useful to do the '
+ 'conversion to\n'
+ ' the other type here). A return value of "NotImplemented" '
+ 'is\n'
+ ' equivalent to returning "None".\n'
+ '\n'
+ '\n'
+ 'Coercion rules\n'
+ '==============\n'
+ '\n'
+ 'This section used to document the rules for coercion. As '
+ 'the language\n'
+ 'has evolved, the coercion rules have become hard to '
+ 'document\n'
+ 'precisely; documenting what one version of one particular\n'
+ 'implementation does is undesirable. Instead, here are some '
+ 'informal\n'
+ 'guidelines regarding coercion. In Python 3, coercion will '
+ 'not be\n'
+ 'supported.\n'
+ '\n'
+ '* If the left operand of a % operator is a string or Unicode '
+ 'object,\n'
+ ' no coercion takes place and the string formatting '
+ 'operation is\n'
+ ' invoked instead.\n'
+ '\n'
+ '* It is no longer recommended to define a coercion '
+ 'operation. Mixed-\n'
+ " mode operations on types that don't define coercion pass "
+ 'the\n'
+ ' original arguments to the operation.\n'
+ '\n'
+ '* New-style classes (those derived from "object") never '
+ 'invoke the\n'
+ ' "__coerce__()" method in response to a binary operator; '
+ 'the only\n'
+ ' time "__coerce__()" is invoked is when the built-in '
+ 'function\n'
+ ' "coerce()" is called.\n'
+ '\n'
+ '* For most intents and purposes, an operator that returns\n'
+ ' "NotImplemented" is treated the same as one that is not '
+ 'implemented\n'
+ ' at all.\n'
+ '\n'
+ '* Below, "__op__()" and "__rop__()" are used to signify the '
+ 'generic\n'
+ ' method names corresponding to an operator; "__iop__()" is '
+ 'used for\n'
+ ' the corresponding in-place operator. For example, for the '
+ 'operator\n'
+ ' \'"+"\', "__add__()" and "__radd__()" are used for the '
+ 'left and right\n'
+ ' variant of the binary operator, and "__iadd__()" for the '
+ 'in-place\n'
+ ' variant.\n'
+ '\n'
+ '* For objects *x* and *y*, first "x.__op__(y)" is tried. If '
+ 'this is\n'
+ ' not implemented or returns "NotImplemented", '
+ '"y.__rop__(x)" is\n'
+ ' tried. If this is also not implemented or returns '
+ '"NotImplemented",\n'
+ ' a "TypeError" exception is raised. But see the following '
+ 'exception:\n'
+ '\n'
+ '* Exception to the previous item: if the left operand is an '
+ 'instance\n'
+ ' of a built-in type or a new-style class, and the right '
+ 'operand is an\n'
+ ' instance of a proper subclass of that type or class and '
+ 'overrides\n'
+ ' the base\'s "__rop__()" method, the right operand\'s '
+ '"__rop__()"\n'
+ ' method is tried *before* the left operand\'s "__op__()" '
+ 'method.\n'
'\n'
- 'object.__round__(self[, ndigits])\n'
- 'object.__trunc__(self)\n'
- 'object.__floor__(self)\n'
- 'object.__ceil__(self)\n'
+ ' This is done so that a subclass can completely override '
+ 'binary\n'
+ ' operators. Otherwise, the left operand\'s "__op__()" '
+ 'method would\n'
+ ' always accept the right operand: when an instance of a '
+ 'given class\n'
+ ' is expected, an instance of a subclass of that class is '
+ 'always\n'
+ ' acceptable.\n'
+ '\n'
+ '* When either operand type defines a coercion, this coercion '
+ 'is\n'
+ ' called before that type\'s "__op__()" or "__rop__()" '
+ 'method is\n'
+ ' called, but no sooner. If the coercion returns an object '
+ 'of a\n'
+ ' different type for the operand whose coercion is invoked, '
+ 'part of\n'
+ ' the process is redone using the new object.\n'
'\n'
- ' Called to implement the built-in function "round()" and '
- '"math"\n'
- ' functions "trunc()", "floor()" and "ceil()". Unless '
- '*ndigits* is\n'
- ' passed to "__round__()" all these methods should return '
- 'the value\n'
- ' of the object truncated to an "Integral" (typically an '
- '"int").\n'
+ '* When an in-place operator (like \'"+="\') is used, if the '
+ 'left\n'
+ ' operand implements "__iop__()", it is invoked without any '
+ 'coercion.\n'
+ ' When the operation falls back to "__op__()" and/or '
+ '"__rop__()", the\n'
+ ' normal coercion rules apply.\n'
'\n'
- ' If "__int__()" is not defined then the built-in function '
- '"int()"\n'
- ' falls back to "__trunc__()".\n'
+ '* In "x + y", if *x* is a sequence that implements sequence\n'
+ ' concatenation, sequence concatenation is invoked.\n'
+ '\n'
+ '* In "x * y", if one operand is a sequence that implements '
+ 'sequence\n'
+ ' repetition, and the other is an integer ("int" or "long"), '
+ 'sequence\n'
+ ' repetition is invoked.\n'
+ '\n'
+ '* Rich comparisons (implemented by methods "__eq__()" and so '
+ 'on)\n'
+ ' never use coercion. Three-way comparison (implemented by\n'
+ ' "__cmp__()") does use coercion under the same conditions '
+ 'as other\n'
+ ' binary operations use it.\n'
+ '\n'
+ '* In the current implementation, the built-in numeric types '
+ '"int",\n'
+ ' "long", "float", and "complex" do not use coercion. All '
+ 'these types\n'
+ ' implement a "__coerce__()" method, for use by the '
+ 'built-in\n'
+ ' "coerce()" function.\n'
+ '\n'
+ ' Changed in version 2.7: The complex type no longer makes '
+ 'implicit\n'
+ ' calls to the "__coerce__()" method for mixed-type binary '
+ 'arithmetic\n'
+ ' operations.\n'
'\n'
'\n'
'With Statement Context Managers\n'
'===============================\n'
'\n'
+ 'New in version 2.5.\n'
+ '\n'
'A *context manager* is an object that defines the runtime '
'context to\n'
'be established when executing a "with" statement. The '
@@ -9605,7 +8813,7 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
' Enter the runtime context related to this object. The '
'"with"\n'
- ' statement will bind this method’s return value to the '
+ " statement will bind this method's return value to the "
'target(s)\n'
' specified in the "as" clause of the statement, if any.\n'
'\n'
@@ -9629,30 +8837,62 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
' Note that "__exit__()" methods should not reraise the '
'passed-in\n'
- ' exception; this is the caller’s responsibility.\n'
+ " exception; this is the caller's responsibility.\n"
'\n'
'See also:\n'
'\n'
- ' **PEP 343** - The “with” statement\n'
+ ' **PEP 343** - The "with" statement\n'
' The specification, background, and examples for the '
'Python "with"\n'
' statement.\n'
'\n'
'\n'
- 'Special method lookup\n'
- '=====================\n'
+ 'Special method lookup for old-style classes\n'
+ '===========================================\n'
'\n'
- 'For custom classes, implicit invocations of special methods '
- 'are only\n'
- 'guaranteed to work correctly if defined on an object’s type, '
- 'not in\n'
- 'the object’s instance dictionary. That behaviour is the '
- 'reason why\n'
- 'the following code raises an exception:\n'
+ 'For old-style classes, special methods are always looked up '
+ 'in exactly\n'
+ 'the same way as any other method or attribute. This is the '
+ 'case\n'
+ 'regardless of whether the method is being looked up '
+ 'explicitly as in\n'
+ '"x.__getitem__(i)" or implicitly as in "x[i]".\n'
+ '\n'
+ 'This behaviour means that special methods may exhibit '
+ 'different\n'
+ 'behaviour for different instances of a single old-style '
+ 'class if the\n'
+ 'appropriate special attributes are set differently:\n'
'\n'
' >>> class C:\n'
' ... pass\n'
' ...\n'
+ ' >>> c1 = C()\n'
+ ' >>> c2 = C()\n'
+ ' >>> c1.__len__ = lambda: 5\n'
+ ' >>> c2.__len__ = lambda: 9\n'
+ ' >>> len(c1)\n'
+ ' 5\n'
+ ' >>> len(c2)\n'
+ ' 9\n'
+ '\n'
+ '\n'
+ 'Special method lookup for new-style classes\n'
+ '===========================================\n'
+ '\n'
+ 'For new-style classes, implicit invocations of special '
+ 'methods are\n'
+ "only guaranteed to work correctly if defined on an object's "
+ 'type, not\n'
+ "in the object's instance dictionary. That behaviour is the "
+ 'reason why\n'
+ 'the following code raises an exception (unlike the '
+ 'equivalent example\n'
+ 'with old-style classes):\n'
+ '\n'
+ ' >>> class C(object):\n'
+ ' ... pass\n'
+ ' ...\n'
' >>> c = C()\n'
' >>> c.__len__ = lambda: 5\n'
' >>> len(c)\n'
@@ -9680,7 +8920,7 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
'Incorrectly attempting to invoke an unbound method of a '
'class in this\n'
- 'way is sometimes referred to as ‘metaclass confusion’, and '
+ "way is sometimes referred to as 'metaclass confusion', and "
'is avoided\n'
'by bypassing the instance when looking up special methods:\n'
'\n'
@@ -9693,19 +8933,20 @@ topics = {'assert': 'The "assert" statement\n'
'interest of\n'
'correctness, implicit special method lookup generally also '
'bypasses\n'
- 'the "__getattribute__()" method even of the object’s '
+ 'the "__getattribute__()" method even of the object\'s '
'metaclass:\n'
'\n'
' >>> class Meta(type):\n'
- ' ... def __getattribute__(*args):\n'
- ' ... print("Metaclass getattribute invoked")\n'
- ' ... return type.__getattribute__(*args)\n'
+ ' ... def __getattribute__(*args):\n'
+ ' ... print "Metaclass getattribute invoked"\n'
+ ' ... return type.__getattribute__(*args)\n'
' ...\n'
- ' >>> class C(object, metaclass=Meta):\n'
+ ' >>> class C(object):\n'
+ ' ... __metaclass__ = Meta\n'
' ... def __len__(self):\n'
' ... return 10\n'
' ... def __getattribute__(*args):\n'
- ' ... print("Class getattribute invoked")\n'
+ ' ... print "Class getattribute invoked"\n'
' ... return object.__getattribute__(*args)\n'
' ...\n'
' >>> c = C()\n'
@@ -9728,32 +8969,45 @@ topics = {'assert': 'The "assert" statement\n'
'methods (the\n'
'special method *must* be set on the class object itself in '
'order to be\n'
- 'consistently invoked by the interpreter).\n',
- 'string-methods': 'String Methods\n'
+ 'consistently invoked by the interpreter).\n'
+ '\n'
+ '-[ Footnotes ]-\n'
+ '\n'
+ "[1] It *is* possible in some cases to change an object's "
+ 'type,\n'
+ " under certain controlled conditions. It generally isn't "
+ 'a good\n'
+ ' idea though, since it can lead to some very strange '
+ 'behaviour if\n'
+ ' it is handled incorrectly.\n'
+ '\n'
+ '[2] For operands of the same type, it is assumed that if the '
+ 'non-\n'
+ ' reflected method (such as "__add__()") fails the '
+ 'operation is not\n'
+ ' supported, which is why the reflected method is not '
+ 'called.\n',
+ 'string-methods': '\n'
+ 'String Methods\n'
'**************\n'
'\n'
- 'Strings implement all of the common sequence operations, '
- 'along with\n'
- 'the additional methods described below.\n'
- '\n'
- 'Strings also support two styles of string formatting, one '
- 'providing a\n'
- 'large degree of flexibility and customization (see '
- '"str.format()",\n'
- 'Format String Syntax and Custom String Formatting) and the '
- 'other based\n'
- 'on C "printf" style formatting that handles a narrower '
- 'range of types\n'
- 'and is slightly harder to use correctly, but is often '
- 'faster for the\n'
- 'cases it can handle (printf-style String Formatting).\n'
- '\n'
- 'The Text Processing Services section of the standard '
- 'library covers a\n'
- 'number of other modules that provide various text related '
- 'utilities\n'
- '(including regular expression support in the "re" '
- 'module).\n'
+ 'Below are listed the string methods which both 8-bit '
+ 'strings and\n'
+ 'Unicode objects support. Some of them are also available '
+ 'on\n'
+ '"bytearray" objects.\n'
+ '\n'
+ "In addition, Python's strings support the sequence type "
+ 'methods\n'
+ 'described in the Sequence Types --- str, unicode, list, '
+ 'tuple,\n'
+ 'bytearray, buffer, xrange section. To output formatted '
+ 'strings use\n'
+ 'template strings or the "%" operator described in the '
+ 'String\n'
+ 'Formatting Operations section. Also, see the "re" module '
+ 'for string\n'
+ 'functions based on regular expressions.\n'
'\n'
'str.capitalize()\n'
'\n'
@@ -9761,45 +9015,16 @@ topics = {'assert': 'The "assert" statement\n'
'capitalized\n'
' and the rest lowercased.\n'
'\n'
- ' Changed in version 3.8: The first character is now put '
- 'into\n'
- ' titlecase rather than uppercase. This means that '
- 'characters like\n'
- ' digraphs will only have their first letter capitalized, '
- 'instead of\n'
- ' the full character.\n'
- '\n'
- 'str.casefold()\n'
- '\n'
- ' Return a casefolded copy of the string. Casefolded '
- 'strings may be\n'
- ' used for caseless matching.\n'
- '\n'
- ' Casefolding is similar to lowercasing but more '
- 'aggressive because\n'
- ' it is intended to remove all case distinctions in a '
- 'string. For\n'
- ' example, the German lowercase letter "\'ß\'" is '
- 'equivalent to ""ss"".\n'
- ' Since it is already lowercase, "lower()" would do '
- 'nothing to "\'ß\'";\n'
- ' "casefold()" converts it to ""ss"".\n'
- '\n'
- ' The casefolding algorithm is described in section 3.13 '
- 'of the\n'
- ' Unicode Standard.\n'
- '\n'
- ' New in version 3.3.\n'
+ ' For 8-bit strings, this method is locale-dependent.\n'
'\n'
'str.center(width[, fillchar])\n'
'\n'
' Return centered in a string of length *width*. Padding '
'is done\n'
- ' using the specified *fillchar* (default is an ASCII '
- 'space). The\n'
- ' original string is returned if *width* is less than or '
- 'equal to\n'
- ' "len(s)".\n'
+ ' using the specified *fillchar* (default is a space).\n'
+ '\n'
+ ' Changed in version 2.4: Support for the *fillchar* '
+ 'argument.\n'
'\n'
'str.count(sub[, start[, end]])\n'
'\n'
@@ -9809,38 +9034,59 @@ topics = {'assert': 'The "assert" statement\n'
'*start* and\n'
' *end* are interpreted as in slice notation.\n'
'\n'
- 'str.encode(encoding="utf-8", errors="strict")\n'
- '\n'
- ' Return an encoded version of the string as a bytes '
- 'object. Default\n'
- ' encoding is "\'utf-8\'". *errors* may be given to set a '
- 'different\n'
- ' error handling scheme. The default for *errors* is '
- '"\'strict\'",\n'
- ' meaning that encoding errors raise a "UnicodeError". '
- 'Other possible\n'
- ' values are "\'ignore\'", "\'replace\'", '
- '"\'xmlcharrefreplace\'",\n'
- ' "\'backslashreplace\'" and any other name registered '
- 'via\n'
- ' "codecs.register_error()", see section Error Handlers. '
- 'For a list\n'
- ' of possible encodings, see section Standard Encodings.\n'
- '\n'
- ' By default, the *errors* argument is not checked for '
- 'best\n'
- ' performances, but only used at the first encoding '
- 'error. Enable the\n'
- ' development mode ("-X" "dev" option), or use a debug '
- 'build, to\n'
- ' check *errors*.\n'
- '\n'
- ' Changed in version 3.1: Support for keyword arguments '
+ 'str.decode([encoding[, errors]])\n'
+ '\n'
+ ' Decodes the string using the codec registered for '
+ '*encoding*.\n'
+ ' *encoding* defaults to the default string encoding. '
+ '*errors* may\n'
+ ' be given to set a different error handling scheme. The '
+ 'default is\n'
+ ' "\'strict\'", meaning that encoding errors raise '
+ '"UnicodeError".\n'
+ ' Other possible values are "\'ignore\'", "\'replace\'" '
+ 'and any other\n'
+ ' name registered via "codecs.register_error()", see '
+ 'section Codec\n'
+ ' Base Classes.\n'
+ '\n'
+ ' New in version 2.2.\n'
+ '\n'
+ ' Changed in version 2.3: Support for other error '
+ 'handling schemes\n'
+ ' added.\n'
+ '\n'
+ ' Changed in version 2.7: Support for keyword arguments '
'added.\n'
'\n'
- ' Changed in version 3.9: The *errors* is now checked in '
- 'development\n'
- ' mode and in debug mode.\n'
+ 'str.encode([encoding[, errors]])\n'
+ '\n'
+ ' Return an encoded version of the string. Default '
+ 'encoding is the\n'
+ ' current default string encoding. *errors* may be given '
+ 'to set a\n'
+ ' different error handling scheme. The default for '
+ '*errors* is\n'
+ ' "\'strict\'", meaning that encoding errors raise a '
+ '"UnicodeError".\n'
+ ' Other possible values are "\'ignore\'", "\'replace\'",\n'
+ ' "\'xmlcharrefreplace\'", "\'backslashreplace\'" and any '
+ 'other name\n'
+ ' registered via "codecs.register_error()", see section '
+ 'Codec Base\n'
+ ' Classes. For a list of possible encodings, see section '
+ 'Standard\n'
+ ' Encodings.\n'
+ '\n'
+ ' New in version 2.0.\n'
+ '\n'
+ ' Changed in version 2.3: Support for '
+ '"\'xmlcharrefreplace\'" and\n'
+ ' "\'backslashreplace\'" and other error handling schemes '
+ 'added.\n'
+ '\n'
+ ' Changed in version 2.7: Support for keyword arguments '
+ 'added.\n'
'\n'
'str.endswith(suffix[, start[, end]])\n'
'\n'
@@ -9853,7 +9099,9 @@ topics = {'assert': 'The "assert" statement\n'
' position. With optional *end*, stop comparing at that '
'position.\n'
'\n'
- 'str.expandtabs(tabsize=8)\n'
+ ' Changed in version 2.5: Accept tuples as *suffix*.\n'
+ '\n'
+ 'str.expandtabs([tabsize])\n'
'\n'
' Return a copy of the string where all tab characters '
'are replaced\n'
@@ -9929,45 +9177,13 @@ topics = {'assert': 'The "assert" statement\n'
' formatting options that can be specified in format '
'strings.\n'
'\n'
- ' Note: When formatting a number ("int", "float", '
- '"complex",\n'
- ' "decimal.Decimal" and subclasses) with the "n" type '
- '(ex:\n'
- ' "\'{:n}\'.format(1234)"), the function temporarily '
- 'sets the\n'
- ' "LC_CTYPE" locale to the "LC_NUMERIC" locale to '
- 'decode\n'
- ' "decimal_point" and "thousands_sep" fields of '
- '"localeconv()" if\n'
- ' they are non-ASCII or longer than 1 byte, and the '
- '"LC_NUMERIC"\n'
- ' locale is different than the "LC_CTYPE" locale. This '
- 'temporary\n'
- ' change affects other threads.\n'
- '\n'
- ' Changed in version 3.7: When formatting a number with '
- 'the "n" type,\n'
- ' the function sets temporarily the "LC_CTYPE" locale to '
- 'the\n'
- ' "LC_NUMERIC" locale in some cases.\n'
+ ' This method of string formatting is the new standard in '
+ 'Python 3,\n'
+ ' and should be preferred to the "%" formatting described '
+ 'in String\n'
+ ' Formatting Operations in new code.\n'
'\n'
- 'str.format_map(mapping)\n'
- '\n'
- ' Similar to "str.format(**mapping)", except that '
- '"mapping" is used\n'
- ' directly and not copied to a "dict". This is useful if '
- 'for example\n'
- ' "mapping" is a dict subclass:\n'
- '\n'
- ' >>> class Default(dict):\n'
- ' ... def __missing__(self, key):\n'
- ' ... return key\n'
- ' ...\n'
- " >>> '{name} was born in "
- "{country}'.format_map(Default(name='Guido'))\n"
- " 'Guido was born in country'\n"
- '\n'
- ' New in version 3.2.\n'
+ ' New in version 2.6.\n'
'\n'
'str.index(sub[, start[, end]])\n'
'\n'
@@ -9977,172 +9193,65 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
'str.isalnum()\n'
'\n'
- ' Return "True" if all characters in the string are '
+ ' Return true if all characters in the string are '
'alphanumeric and\n'
- ' there is at least one character, "False" otherwise. A '
- 'character\n'
- ' "c" is alphanumeric if one of the following returns '
- '"True":\n'
- ' "c.isalpha()", "c.isdecimal()", "c.isdigit()", or '
- '"c.isnumeric()".\n'
+ ' there is at least one character, false otherwise.\n'
+ '\n'
+ ' For 8-bit strings, this method is locale-dependent.\n'
'\n'
'str.isalpha()\n'
'\n'
- ' Return "True" if all characters in the string are '
+ ' Return true if all characters in the string are '
'alphabetic and\n'
- ' there is at least one character, "False" otherwise. '
- 'Alphabetic\n'
- ' characters are those characters defined in the Unicode '
- 'character\n'
- ' database as “Letter”, i.e., those with general category '
- 'property\n'
- ' being one of “Lm”, “Lt”, “Lu”, “Ll”, or “Lo”. Note '
- 'that this is\n'
- ' different from the “Alphabetic” property defined in the '
- 'Unicode\n'
- ' Standard.\n'
- '\n'
- 'str.isascii()\n'
- '\n'
- ' Return "True" if the string is empty or all characters '
- 'in the\n'
- ' string are ASCII, "False" otherwise. ASCII characters '
- 'have code\n'
- ' points in the range U+0000-U+007F.\n'
- '\n'
- ' New in version 3.7.\n'
+ ' there is at least one character, false otherwise.\n'
'\n'
- 'str.isdecimal()\n'
- '\n'
- ' Return "True" if all characters in the string are '
- 'decimal\n'
- ' characters and there is at least one character, "False" '
- 'otherwise.\n'
- ' Decimal characters are those that can be used to form '
- 'numbers in\n'
- ' base 10, e.g. U+0660, ARABIC-INDIC DIGIT ZERO. '
- 'Formally a decimal\n'
- ' character is a character in the Unicode General '
- 'Category “Nd”.\n'
+ ' For 8-bit strings, this method is locale-dependent.\n'
'\n'
'str.isdigit()\n'
'\n'
- ' Return "True" if all characters in the string are '
- 'digits and there\n'
- ' is at least one character, "False" otherwise. Digits '
- 'include\n'
- ' decimal characters and digits that need special '
- 'handling, such as\n'
- ' the compatibility superscript digits. This covers '
- 'digits which\n'
- ' cannot be used to form numbers in base 10, like the '
- 'Kharosthi\n'
- ' numbers. Formally, a digit is a character that has the '
- 'property\n'
- ' value Numeric_Type=Digit or Numeric_Type=Decimal.\n'
- '\n'
- 'str.isidentifier()\n'
- '\n'
- ' Return "True" if the string is a valid identifier '
- 'according to the\n'
- ' language definition, section Identifiers and keywords.\n'
- '\n'
- ' Call "keyword.iskeyword()" to test whether string "s" '
- 'is a reserved\n'
- ' identifier, such as "def" and "class".\n'
+ ' Return true if all characters in the string are digits '
+ 'and there is\n'
+ ' at least one character, false otherwise.\n'
'\n'
- ' Example:\n'
- '\n'
- ' >>> from keyword import iskeyword\n'
- '\n'
- " >>> 'hello'.isidentifier(), iskeyword('hello')\n"
- ' True, False\n'
- " >>> 'def'.isidentifier(), iskeyword('def')\n"
- ' True, True\n'
+ ' For 8-bit strings, this method is locale-dependent.\n'
'\n'
'str.islower()\n'
'\n'
- ' Return "True" if all cased characters [4] in the string '
- 'are\n'
- ' lowercase and there is at least one cased character, '
- '"False"\n'
- ' otherwise.\n'
+ ' Return true if all cased characters [4] in the string '
+ 'are lowercase\n'
+ ' and there is at least one cased character, false '
+ 'otherwise.\n'
'\n'
- 'str.isnumeric()\n'
- '\n'
- ' Return "True" if all characters in the string are '
- 'numeric\n'
- ' characters, and there is at least one character, '
- '"False" otherwise.\n'
- ' Numeric characters include digit characters, and all '
- 'characters\n'
- ' that have the Unicode numeric value property, e.g. '
- 'U+2155, VULGAR\n'
- ' FRACTION ONE FIFTH. Formally, numeric characters are '
- 'those with\n'
- ' the property value Numeric_Type=Digit, '
- 'Numeric_Type=Decimal or\n'
- ' Numeric_Type=Numeric.\n'
- '\n'
- 'str.isprintable()\n'
- '\n'
- ' Return "True" if all characters in the string are '
- 'printable or the\n'
- ' string is empty, "False" otherwise. Nonprintable '
- 'characters are\n'
- ' those characters defined in the Unicode character '
- 'database as\n'
- ' “Other” or “Separator”, excepting the ASCII space '
- '(0x20) which is\n'
- ' considered printable. (Note that printable characters '
- 'in this\n'
- ' context are those which should not be escaped when '
- '"repr()" is\n'
- ' invoked on a string. It has no bearing on the handling '
- 'of strings\n'
- ' written to "sys.stdout" or "sys.stderr".)\n'
+ ' For 8-bit strings, this method is locale-dependent.\n'
'\n'
'str.isspace()\n'
'\n'
- ' Return "True" if there are only whitespace characters '
- 'in the string\n'
- ' and there is at least one character, "False" '
- 'otherwise.\n'
+ ' Return true if there are only whitespace characters in '
+ 'the string\n'
+ ' and there is at least one character, false otherwise.\n'
'\n'
- ' A character is *whitespace* if in the Unicode character '
- 'database\n'
- ' (see "unicodedata"), either its general category is '
- '"Zs"\n'
- ' (“Separator, space”), or its bidirectional class is one '
- 'of "WS",\n'
- ' "B", or "S".\n'
+ ' For 8-bit strings, this method is locale-dependent.\n'
'\n'
'str.istitle()\n'
'\n'
- ' Return "True" if the string is a titlecased string and '
+ ' Return true if the string is a titlecased string and '
'there is at\n'
' least one character, for example uppercase characters '
'may only\n'
' follow uncased characters and lowercase characters only '
'cased ones.\n'
- ' Return "False" otherwise.\n'
+ ' Return false otherwise.\n'
+ '\n'
+ ' For 8-bit strings, this method is locale-dependent.\n'
'\n'
'str.isupper()\n'
'\n'
- ' Return "True" if all cased characters [4] in the string '
- 'are\n'
- ' uppercase and there is at least one cased character, '
- '"False"\n'
- ' otherwise.\n'
- '\n'
- " >>> 'BANANA'.isupper()\n"
- ' True\n'
- " >>> 'banana'.isupper()\n"
- ' False\n'
- " >>> 'baNana'.isupper()\n"
- ' False\n'
- " >>> ' '.isupper()\n"
- ' False\n'
+ ' Return true if all cased characters [4] in the string '
+ 'are uppercase\n'
+ ' and there is at least one cased character, false '
+ 'otherwise.\n'
+ '\n'
+ ' For 8-bit strings, this method is locale-dependent.\n'
'\n'
'str.join(iterable)\n'
'\n'
@@ -10160,20 +9269,21 @@ topics = {'assert': 'The "assert" statement\n'
' Return the string left justified in a string of length '
'*width*.\n'
' Padding is done using the specified *fillchar* (default '
- 'is an ASCII\n'
- ' space). The original string is returned if *width* is '
+ 'is a\n'
+ ' space). The original string is returned if *width* is '
'less than or\n'
' equal to "len(s)".\n'
'\n'
+ ' Changed in version 2.4: Support for the *fillchar* '
+ 'argument.\n'
+ '\n'
'str.lower()\n'
'\n'
' Return a copy of the string with all the cased '
'characters [4]\n'
' converted to lowercase.\n'
'\n'
- ' The lowercasing algorithm used is described in section '
- '3.13 of the\n'
- ' Unicode Standard.\n'
+ ' For 8-bit strings, this method is locale-dependent.\n'
'\n'
'str.lstrip([chars])\n'
'\n'
@@ -10187,34 +9297,13 @@ topics = {'assert': 'The "assert" statement\n'
'prefix; rather,\n'
' all combinations of its values are stripped:\n'
'\n'
- " >>> ' spacious '.lstrip()\n"
- " 'spacious '\n"
- " >>> 'www.example.com'.lstrip('cmowz.')\n"
- " 'example.com'\n"
- '\n'
- 'static str.maketrans(x[, y[, z]])\n'
- '\n'
- ' This static method returns a translation table usable '
- 'for\n'
- ' "str.translate()".\n'
- '\n'
- ' If there is only one argument, it must be a dictionary '
- 'mapping\n'
- ' Unicode ordinals (integers) or characters (strings of '
- 'length 1) to\n'
- ' Unicode ordinals, strings (of arbitrary lengths) or '
- '"None".\n'
- ' Character keys will then be converted to ordinals.\n'
- '\n'
- ' If there are two arguments, they must be strings of '
- 'equal length,\n'
- ' and in the resulting dictionary, each character in x '
- 'will be mapped\n'
- ' to the character at the same position in y. If there '
- 'is a third\n'
- ' argument, it must be a string, whose characters will be '
- 'mapped to\n'
- ' "None" in the result.\n'
+ " >>> ' spacious '.lstrip()\n"
+ " 'spacious '\n"
+ " >>> 'www.example.com'.lstrip('cmowz.')\n"
+ " 'example.com'\n"
+ '\n'
+ ' Changed in version 2.2.2: Support for the *chars* '
+ 'argument.\n'
'\n'
'str.partition(sep)\n'
'\n'
@@ -10228,6 +9317,8 @@ topics = {'assert': 'The "assert" statement\n'
'followed by\n'
' two empty strings.\n'
'\n'
+ ' New in version 2.5.\n'
+ '\n'
'str.replace(old, new[, count])\n'
'\n'
' Return a copy of the string with all occurrences of '
@@ -10257,11 +9348,14 @@ topics = {'assert': 'The "assert" statement\n'
' Return the string right justified in a string of length '
'*width*.\n'
' Padding is done using the specified *fillchar* (default '
- 'is an ASCII\n'
+ 'is a\n'
' space). The original string is returned if *width* is '
'less than or\n'
' equal to "len(s)".\n'
'\n'
+ ' Changed in version 2.4: Support for the *fillchar* '
+ 'argument.\n'
+ '\n'
'str.rpartition(sep)\n'
'\n'
' Split the string at the last occurrence of *sep*, and '
@@ -10274,7 +9368,9 @@ topics = {'assert': 'The "assert" statement\n'
'followed by\n'
' the string itself.\n'
'\n'
- 'str.rsplit(sep=None, maxsplit=-1)\n'
+ ' New in version 2.5.\n'
+ '\n'
+ 'str.rsplit([sep[, maxsplit]])\n'
'\n'
' Return a list of the words in the string, using *sep* '
'as the\n'
@@ -10288,6 +9384,8 @@ topics = {'assert': 'The "assert" statement\n'
'is\n'
' described in detail below.\n'
'\n'
+ ' New in version 2.4.\n'
+ '\n'
'str.rstrip([chars])\n'
'\n'
' Return a copy of the string with trailing characters '
@@ -10300,12 +9398,15 @@ topics = {'assert': 'The "assert" statement\n'
'suffix; rather,\n'
' all combinations of its values are stripped:\n'
'\n'
- " >>> ' spacious '.rstrip()\n"
- " ' spacious'\n"
- " >>> 'mississippi'.rstrip('ipz')\n"
- " 'mississ'\n"
+ " >>> ' spacious '.rstrip()\n"
+ " ' spacious'\n"
+ " >>> 'mississippi'.rstrip('ipz')\n"
+ " 'mississ'\n"
+ '\n'
+ ' Changed in version 2.2.2: Support for the *chars* '
+ 'argument.\n'
'\n'
- 'str.split(sep=None, maxsplit=-1)\n'
+ 'str.split([sep[, maxsplit]])\n'
'\n'
' Return a list of the words in the string, using *sep* '
'as the\n'
@@ -10329,15 +9430,6 @@ topics = {'assert': 'The "assert" statement\n'
' empty string with a specified separator returns '
'"[\'\']".\n'
'\n'
- ' For example:\n'
- '\n'
- " >>> '1,2,3'.split(',')\n"
- " ['1', '2', '3']\n"
- " >>> '1,2,3'.split(',', maxsplit=1)\n"
- " ['1', '2,3']\n"
- " >>> '1,2,,3,'.split(',')\n"
- " ['1', '2', '', '3', '']\n"
- '\n'
' If *sep* is not specified or is "None", a different '
'splitting\n'
' algorithm is applied: runs of consecutive whitespace '
@@ -10351,34 +9443,66 @@ topics = {'assert': 'The "assert" statement\n'
' consisting of just whitespace with a "None" separator '
'returns "[]".\n'
'\n'
- ' For example:\n'
- '\n'
- " >>> '1 2 3'.split()\n"
- " ['1', '2', '3']\n"
- " >>> '1 2 3'.split(maxsplit=1)\n"
- " ['1', '2 3']\n"
- " >>> ' 1 2 3 '.split()\n"
- " ['1', '2', '3']\n"
+ ' For example, "\' 1 2 3 \'.split()" returns "[\'1\', '
+ '\'2\', \'3\']", and\n'
+ ' "\' 1 2 3 \'.split(None, 1)" returns "[\'1\', '
+ '\'2 3 \']".\n'
'\n'
'str.splitlines([keepends])\n'
'\n'
' Return a list of the lines in the string, breaking at '
'line\n'
- ' boundaries. Line breaks are not included in the '
+ ' boundaries. This method uses the *universal newlines* '
+ 'approach to\n'
+ ' splitting lines. Line breaks are not included in the '
'resulting list\n'
' unless *keepends* is given and true.\n'
'\n'
- ' This method splits on the following line boundaries. '
- 'In\n'
- ' particular, the boundaries are a superset of *universal '
- 'newlines*.\n'
+ ' Python recognizes ""\\r"", ""\\n"", and ""\\r\\n"" as '
+ 'line boundaries\n'
+ ' for 8-bit strings.\n'
+ '\n'
+ ' For example:\n'
+ '\n'
+ " >>> 'ab c\\n\\nde fg\\rkl\\r\\n'.splitlines()\n"
+ " ['ab c', '', 'de fg', 'kl']\n"
+ " >>> 'ab c\\n\\nde fg\\rkl\\r\\n'.splitlines(True)\n"
+ " ['ab c\\n', '\\n', 'de fg\\r', 'kl\\r\\n']\n"
+ '\n'
+ ' Unlike "split()" when a delimiter string *sep* is '
+ 'given, this\n'
+ ' method returns an empty list for the empty string, and '
+ 'a terminal\n'
+ ' line break does not result in an extra line:\n'
+ '\n'
+ ' >>> "".splitlines()\n'
+ ' []\n'
+ ' >>> "One line\\n".splitlines()\n'
+ " ['One line']\n"
+ '\n'
+ ' For comparison, "split(\'\\n\')" gives:\n'
+ '\n'
+ " >>> ''.split('\\n')\n"
+ " ['']\n"
+ " >>> 'Two lines\\n'.split('\\n')\n"
+ " ['Two lines', '']\n"
+ '\n'
+ 'unicode.splitlines([keepends])\n'
+ '\n'
+ ' Return a list of the lines in the string, like '
+ '"str.splitlines()".\n'
+ ' However, the Unicode method splits on the following '
+ 'line\n'
+ ' boundaries, which are a superset of the *universal '
+ 'newlines*\n'
+ ' recognized for 8-bit strings.\n'
'\n'
' '
'+-------------------------+-------------------------------+\n'
' | Representation | '
'Description |\n'
' '
- '|=========================|===============================|\n'
+ '+=========================+===============================+\n'
' | "\\n" | Line '
'Feed |\n'
' '
@@ -10424,36 +9548,10 @@ topics = {'assert': 'The "assert" statement\n'
' '
'+-------------------------+-------------------------------+\n'
'\n'
- ' Changed in version 3.2: "\\v" and "\\f" added to list '
+ ' Changed in version 2.7: "\\v" and "\\f" added to list '
'of line\n'
' boundaries.\n'
'\n'
- ' For example:\n'
- '\n'
- " >>> 'ab c\\n\\nde fg\\rkl\\r\\n'.splitlines()\n"
- " ['ab c', '', 'de fg', 'kl']\n"
- " >>> 'ab c\\n\\nde "
- "fg\\rkl\\r\\n'.splitlines(keepends=True)\n"
- " ['ab c\\n', '\\n', 'de fg\\r', 'kl\\r\\n']\n"
- '\n'
- ' Unlike "split()" when a delimiter string *sep* is '
- 'given, this\n'
- ' method returns an empty list for the empty string, and '
- 'a terminal\n'
- ' line break does not result in an extra line:\n'
- '\n'
- ' >>> "".splitlines()\n'
- ' []\n'
- ' >>> "One line\\n".splitlines()\n'
- " ['One line']\n"
- '\n'
- ' For comparison, "split(\'\\n\')" gives:\n'
- '\n'
- " >>> ''.split('\\n')\n"
- " ['']\n"
- " >>> 'Two lines\\n'.split('\\n')\n"
- " ['Two lines', '']\n"
- '\n'
'str.startswith(prefix[, start[, end]])\n'
'\n'
' Return "True" if string starts with the *prefix*, '
@@ -10465,6 +9563,8 @@ topics = {'assert': 'The "assert" statement\n'
' With optional *end*, stop comparing string at that '
'position.\n'
'\n'
+ ' Changed in version 2.5: Accept tuples as *prefix*.\n'
+ '\n'
'str.strip([chars])\n'
'\n'
' Return a copy of the string with the leading and '
@@ -10479,33 +9579,21 @@ topics = {'assert': 'The "assert" statement\n'
'values are\n'
' stripped:\n'
'\n'
- " >>> ' spacious '.strip()\n"
- " 'spacious'\n"
- " >>> 'www.example.com'.strip('cmowz.')\n"
- " 'example'\n"
+ " >>> ' spacious '.strip()\n"
+ " 'spacious'\n"
+ " >>> 'www.example.com'.strip('cmowz.')\n"
+ " 'example'\n"
'\n'
- ' The outermost leading and trailing *chars* argument '
- 'values are\n'
- ' stripped from the string. Characters are removed from '
- 'the leading\n'
- ' end until reaching a string character that is not '
- 'contained in the\n'
- ' set of characters in *chars*. A similar action takes '
- 'place on the\n'
- ' trailing end. For example:\n'
- '\n'
- " >>> comment_string = '#....... Section 3.2.1 Issue "
- "#32 .......'\n"
- " >>> comment_string.strip('.#! ')\n"
- " 'Section 3.2.1 Issue #32'\n"
+ ' Changed in version 2.2.2: Support for the *chars* '
+ 'argument.\n'
'\n'
'str.swapcase()\n'
'\n'
' Return a copy of the string with uppercase characters '
'converted to\n'
- ' lowercase and vice versa. Note that it is not '
- 'necessarily true that\n'
- ' "s.swapcase().swapcase() == s".\n'
+ ' lowercase and vice versa.\n'
+ '\n'
+ ' For 8-bit strings, this method is locale-dependent.\n'
'\n'
'str.title()\n'
'\n'
@@ -10514,11 +9602,6 @@ topics = {'assert': 'The "assert" statement\n'
' uppercase character and the remaining characters are '
'lowercase.\n'
'\n'
- ' For example:\n'
- '\n'
- " >>> 'Hello world'.title()\n"
- " 'Hello World'\n"
- '\n'
' The algorithm uses a simple language-independent '
'definition of a\n'
' word as groups of consecutive letters. The definition '
@@ -10540,185 +9623,184 @@ topics = {'assert': 'The "assert" statement\n'
' >>> def titlecase(s):\n'
' ... return re.sub(r"[A-Za-z]+(\'[A-Za-z]+)?",\n'
' ... lambda mo: '
- 'mo.group(0).capitalize(),\n'
+ 'mo.group(0)[0].upper() +\n'
+ ' ... '
+ 'mo.group(0)[1:].lower(),\n'
' ... s)\n'
' ...\n'
' >>> titlecase("they\'re bill\'s friends.")\n'
' "They\'re Bill\'s Friends."\n'
'\n'
- 'str.translate(table)\n'
- '\n'
- ' Return a copy of the string in which each character has '
- 'been mapped\n'
- ' through the given translation table. The table must be '
- 'an object\n'
- ' that implements indexing via "__getitem__()", typically '
- 'a *mapping*\n'
- ' or *sequence*. When indexed by a Unicode ordinal (an '
- 'integer), the\n'
- ' table object can do any of the following: return a '
- 'Unicode ordinal\n'
- ' or a string, to map the character to one or more other '
- 'characters;\n'
- ' return "None", to delete the character from the return '
- 'string; or\n'
- ' raise a "LookupError" exception, to map the character '
- 'to itself.\n'
- '\n'
- ' You can use "str.maketrans()" to create a translation '
- 'map from\n'
- ' character-to-character mappings in different formats.\n'
- '\n'
- ' See also the "codecs" module for a more flexible '
- 'approach to custom\n'
- ' character mappings.\n'
+ ' For 8-bit strings, this method is locale-dependent.\n'
+ '\n'
+ 'str.translate(table[, deletechars])\n'
+ '\n'
+ ' Return a copy of the string where all characters '
+ 'occurring in the\n'
+ ' optional argument *deletechars* are removed, and the '
+ 'remaining\n'
+ ' characters have been mapped through the given '
+ 'translation table,\n'
+ ' which must be a string of length 256.\n'
+ '\n'
+ ' You can use the "maketrans()" helper function in the '
+ '"string"\n'
+ ' module to create a translation table. For string '
+ 'objects, set the\n'
+ ' *table* argument to "None" for translations that only '
+ 'delete\n'
+ ' characters:\n'
+ '\n'
+ " >>> 'read this short text'.translate(None, 'aeiou')\n"
+ " 'rd ths shrt txt'\n"
+ '\n'
+ ' New in version 2.6: Support for a "None" *table* '
+ 'argument.\n'
+ '\n'
+ ' For Unicode objects, the "translate()" method does not '
+ 'accept the\n'
+ ' optional *deletechars* argument. Instead, it returns a '
+ 'copy of the\n'
+ ' *s* where all characters have been mapped through the '
+ 'given\n'
+ ' translation table which must be a mapping of Unicode '
+ 'ordinals to\n'
+ ' Unicode ordinals, Unicode strings or "None". Unmapped '
+ 'characters\n'
+ ' are left untouched. Characters mapped to "None" are '
+ 'deleted. Note,\n'
+ ' a more flexible approach is to create a custom '
+ 'character mapping\n'
+ ' codec using the "codecs" module (see "encodings.cp1251" '
+ 'for an\n'
+ ' example).\n'
'\n'
'str.upper()\n'
'\n'
' Return a copy of the string with all the cased '
'characters [4]\n'
' converted to uppercase. Note that '
- '"s.upper().isupper()" might be\n'
+ '"str.upper().isupper()" might be\n'
' "False" if "s" contains uncased characters or if the '
'Unicode\n'
- ' category of the resulting character(s) is not “Lu” '
+ ' category of the resulting character(s) is not "Lu" '
'(Letter,\n'
- ' uppercase), but e.g. “Lt” (Letter, titlecase).\n'
+ ' uppercase), but e.g. "Lt" (Letter, titlecase).\n'
'\n'
- ' The uppercasing algorithm used is described in section '
- '3.13 of the\n'
- ' Unicode Standard.\n'
+ ' For 8-bit strings, this method is locale-dependent.\n'
'\n'
'str.zfill(width)\n'
'\n'
- ' Return a copy of the string left filled with ASCII '
- '"\'0\'" digits to\n'
- ' make a string of length *width*. A leading sign prefix\n'
- ' ("\'+\'"/"\'-\'") is handled by inserting the padding '
- '*after* the sign\n'
- ' character rather than before. The original string is '
- 'returned if\n'
- ' *width* is less than or equal to "len(s)".\n'
- '\n'
- ' For example:\n'
- '\n'
- ' >>> "42".zfill(5)\n'
- " '00042'\n"
- ' >>> "-42".zfill(5)\n'
- " '-0042'\n",
- 'strings': 'String and Bytes literals\n'
- '*************************\n'
+ ' Return the numeric string left filled with zeros in a '
+ 'string of\n'
+ ' length *width*. A sign prefix is handled correctly. '
+ 'The original\n'
+ ' string is returned if *width* is less than or equal to '
+ '"len(s)".\n'
+ '\n'
+ ' New in version 2.2.2.\n'
+ '\n'
+ 'The following methods are present only on unicode '
+ 'objects:\n'
+ '\n'
+ 'unicode.isnumeric()\n'
+ '\n'
+ ' Return "True" if there are only numeric characters in '
+ 'S, "False"\n'
+ ' otherwise. Numeric characters include digit characters, '
+ 'and all\n'
+ ' characters that have the Unicode numeric value '
+ 'property, e.g.\n'
+ ' U+2155, VULGAR FRACTION ONE FIFTH.\n'
+ '\n'
+ 'unicode.isdecimal()\n'
+ '\n'
+ ' Return "True" if there are only decimal characters in '
+ 'S, "False"\n'
+ ' otherwise. Decimal characters include digit characters, '
+ 'and all\n'
+ ' characters that can be used to form decimal-radix '
+ 'numbers, e.g.\n'
+ ' U+0660, ARABIC-INDIC DIGIT ZERO.\n',
+ 'strings': '\n'
+ 'String literals\n'
+ '***************\n'
'\n'
'String literals are described by the following lexical '
'definitions:\n'
'\n'
' stringliteral ::= [stringprefix](shortstring | longstring)\n'
- ' stringprefix ::= "r" | "u" | "R" | "U" | "f" | "F"\n'
- ' | "fr" | "Fr" | "fR" | "FR" | "rf" | "rF" | '
- '"Rf" | "RF"\n'
+ ' stringprefix ::= "r" | "u" | "ur" | "R" | "U" | "UR" | "Ur" '
+ '| "uR"\n'
+ ' | "b" | "B" | "br" | "Br" | "bR" | "BR"\n'
' shortstring ::= "\'" shortstringitem* "\'" | \'"\' '
'shortstringitem* \'"\'\n'
- ' longstring ::= "\'\'\'" longstringitem* "\'\'\'" | '
- '\'"""\' longstringitem* \'"""\'\n'
- ' shortstringitem ::= shortstringchar | stringescapeseq\n'
- ' longstringitem ::= longstringchar | stringescapeseq\n'
+ ' longstring ::= "\'\'\'" longstringitem* "\'\'\'"\n'
+ ' | \'"""\' longstringitem* \'"""\'\n'
+ ' shortstringitem ::= shortstringchar | escapeseq\n'
+ ' longstringitem ::= longstringchar | escapeseq\n'
' shortstringchar ::= <any source character except "\\" or '
'newline or the quote>\n'
' longstringchar ::= <any source character except "\\">\n'
- ' stringescapeseq ::= "\\" <any source character>\n'
- '\n'
- ' bytesliteral ::= bytesprefix(shortbytes | longbytes)\n'
- ' bytesprefix ::= "b" | "B" | "br" | "Br" | "bR" | "BR" | '
- '"rb" | "rB" | "Rb" | "RB"\n'
- ' shortbytes ::= "\'" shortbytesitem* "\'" | \'"\' '
- 'shortbytesitem* \'"\'\n'
- ' longbytes ::= "\'\'\'" longbytesitem* "\'\'\'" | \'"""\' '
- 'longbytesitem* \'"""\'\n'
- ' shortbytesitem ::= shortbyteschar | bytesescapeseq\n'
- ' longbytesitem ::= longbyteschar | bytesescapeseq\n'
- ' shortbyteschar ::= <any ASCII character except "\\" or newline '
- 'or the quote>\n'
- ' longbyteschar ::= <any ASCII character except "\\">\n'
- ' bytesescapeseq ::= "\\" <any ASCII character>\n'
+ ' escapeseq ::= "\\" <any ASCII character>\n'
'\n'
'One syntactic restriction not indicated by these productions is '
'that\n'
- 'whitespace is not allowed between the "stringprefix" or '
- '"bytesprefix"\n'
- 'and the rest of the literal. The source character set is defined '
- 'by\n'
- 'the encoding declaration; it is UTF-8 if no encoding declaration '
- 'is\n'
- 'given in the source file; see section Encoding declarations.\n'
+ 'whitespace is not allowed between the "stringprefix" and the rest '
+ 'of\n'
+ 'the string literal. The source character set is defined by the\n'
+ 'encoding declaration; it is ASCII if no encoding declaration is '
+ 'given\n'
+ 'in the source file; see section Encoding declarations.\n'
'\n'
- 'In plain English: Both types of literals can be enclosed in '
- 'matching\n'
- 'single quotes ("\'") or double quotes ("""). They can also be '
- 'enclosed\n'
- 'in matching groups of three single or double quotes (these are\n'
- 'generally referred to as *triple-quoted strings*). The '
- 'backslash\n'
- '("\\") character is used to escape characters that otherwise have '
- 'a\n'
- 'special meaning, such as newline, backslash itself, or the quote\n'
+ 'In plain English: String literals can be enclosed in matching '
+ 'single\n'
+ 'quotes ("\'") or double quotes ("""). They can also be enclosed '
+ 'in\n'
+ 'matching groups of three single or double quotes (these are '
+ 'generally\n'
+ 'referred to as *triple-quoted strings*). The backslash ("\\")\n'
+ 'character is used to escape characters that otherwise have a '
+ 'special\n'
+ 'meaning, such as newline, backslash itself, or the quote '
'character.\n'
- '\n'
- 'Bytes literals are always prefixed with "\'b\'" or "\'B\'"; they '
- 'produce\n'
- 'an instance of the "bytes" type instead of the "str" type. They '
- 'may\n'
- 'only contain ASCII characters; bytes with a numeric value of 128 '
+ 'String literals may optionally be prefixed with a letter "\'r\'" '
'or\n'
- 'greater must be expressed with escapes.\n'
- '\n'
- 'Both string and bytes literals may optionally be prefixed with a\n'
- 'letter "\'r\'" or "\'R\'"; such strings are called *raw strings* '
- 'and treat\n'
- 'backslashes as literal characters. As a result, in string '
- 'literals,\n'
- '"\'\\U\'" and "\'\\u\'" escapes in raw strings are not treated '
- 'specially.\n'
- 'Given that Python 2.x’s raw unicode literals behave differently '
- 'than\n'
- 'Python 3.x’s the "\'ur\'" syntax is not supported.\n'
- '\n'
- 'New in version 3.3: The "\'rb\'" prefix of raw bytes literals has '
- 'been\n'
- 'added as a synonym of "\'br\'".\n'
- '\n'
- 'New in version 3.3: Support for the unicode legacy literal\n'
- '("u\'value\'") was reintroduced to simplify the maintenance of '
- 'dual\n'
- 'Python 2.x and 3.x codebases. See **PEP 414** for more '
- 'information.\n'
- '\n'
- 'A string literal with "\'f\'" or "\'F\'" in its prefix is a '
- '*formatted\n'
- 'string literal*; see Formatted string literals. The "\'f\'" may '
- 'be\n'
- 'combined with "\'r\'", but not with "\'b\'" or "\'u\'", therefore '
- 'raw\n'
- 'formatted strings are possible, but formatted bytes literals are '
- 'not.\n'
+ '"\'R\'"; such strings are called *raw strings* and use different '
+ 'rules\n'
+ 'for interpreting backslash escape sequences. A prefix of "\'u\'" '
+ 'or\n'
+ '"\'U\'" makes the string a Unicode string. Unicode strings use '
+ 'the\n'
+ 'Unicode character set as defined by the Unicode Consortium and '
+ 'ISO\n'
+ '10646. Some additional escape sequences, described below, are\n'
+ 'available in Unicode strings. A prefix of "\'b\'" or "\'B\'" is '
+ 'ignored in\n'
+ 'Python 2; it indicates that the literal should become a bytes '
+ 'literal\n'
+ 'in Python 3 (e.g. when code is automatically converted with '
+ '2to3). A\n'
+ '"\'u\'" or "\'b\'" prefix may be followed by an "\'r\'" prefix.\n'
'\n'
- 'In triple-quoted literals, unescaped newlines and quotes are '
+ 'In triple-quoted strings, unescaped newlines and quotes are '
'allowed\n'
'(and are retained), except that three unescaped quotes in a row\n'
- 'terminate the literal. (A “quote” is the character used to open '
+ 'terminate the string. (A "quote" is the character used to open '
'the\n'
- 'literal, i.e. either "\'" or """.)\n'
+ 'string, i.e. either "\'" or """.)\n'
'\n'
'Unless an "\'r\'" or "\'R\'" prefix is present, escape sequences '
- 'in string\n'
- 'and bytes literals are interpreted according to rules similar to '
- 'those\n'
- 'used by Standard C. The recognized escape sequences are:\n'
+ 'in\n'
+ 'strings are interpreted according to rules similar to those used '
+ 'by\n'
+ 'Standard C. The recognized escape sequences are:\n'
'\n'
'+-------------------+-----------------------------------+---------+\n'
'| Escape Sequence | Meaning | Notes '
'|\n'
- '|===================|===================================|=========|\n'
- '| "\\newline" | Backslash and newline ignored '
+ '+===================+===================================+=========+\n'
+ '| "\\newline" | Ignored '
'| |\n'
'+-------------------+-----------------------------------+---------+\n'
'| "\\\\" | Backslash ("\\") '
@@ -10742,100 +9824,117 @@ topics = {'assert': 'The "assert" statement\n'
'| "\\n" | ASCII Linefeed (LF) '
'| |\n'
'+-------------------+-----------------------------------+---------+\n'
+ '| "\\N{name}" | Character named *name* in the '
+ '| |\n'
+ '| | Unicode database (Unicode only) | '
+ '|\n'
+ '+-------------------+-----------------------------------+---------+\n'
'| "\\r" | ASCII Carriage Return (CR) '
'| |\n'
'+-------------------+-----------------------------------+---------+\n'
'| "\\t" | ASCII Horizontal Tab (TAB) '
'| |\n'
'+-------------------+-----------------------------------+---------+\n'
+ '| "\\uxxxx" | Character with 16-bit hex value | '
+ '(1) |\n'
+ '| | *xxxx* (Unicode only) | '
+ '|\n'
+ '+-------------------+-----------------------------------+---------+\n'
+ '| "\\Uxxxxxxxx" | Character with 32-bit hex value | '
+ '(2) |\n'
+ '| | *xxxxxxxx* (Unicode only) | '
+ '|\n'
+ '+-------------------+-----------------------------------+---------+\n'
'| "\\v" | ASCII Vertical Tab (VT) '
'| |\n'
'+-------------------+-----------------------------------+---------+\n'
'| "\\ooo" | Character with octal value *ooo* | '
- '(1,3) |\n'
+ '(3,5) |\n'
'+-------------------+-----------------------------------+---------+\n'
'| "\\xhh" | Character with hex value *hh* | '
- '(2,3) |\n'
- '+-------------------+-----------------------------------+---------+\n'
- '\n'
- 'Escape sequences only recognized in string literals are:\n'
- '\n'
- '+-------------------+-----------------------------------+---------+\n'
- '| Escape Sequence | Meaning | Notes '
- '|\n'
- '|===================|===================================|=========|\n'
- '| "\\N{name}" | Character named *name* in the | '
- '(4) |\n'
- '| | Unicode database | '
- '|\n'
- '+-------------------+-----------------------------------+---------+\n'
- '| "\\uxxxx" | Character with 16-bit hex value | '
- '(5) |\n'
- '| | *xxxx* | '
- '|\n'
- '+-------------------+-----------------------------------+---------+\n'
- '| "\\Uxxxxxxxx" | Character with 32-bit hex value | '
- '(6) |\n'
- '| | *xxxxxxxx* | '
- '|\n'
+ '(4,5) |\n'
'+-------------------+-----------------------------------+---------+\n'
'\n'
'Notes:\n'
'\n'
- '1. As in Standard C, up to three octal digits are accepted.\n'
+ '1. Individual code units which form parts of a surrogate pair '
+ 'can\n'
+ ' be encoded using this escape sequence.\n'
'\n'
- '2. Unlike in Standard C, exactly two hex digits are required.\n'
+ '2. Any Unicode character can be encoded this way, but characters\n'
+ ' outside the Basic Multilingual Plane (BMP) will be encoded '
+ 'using a\n'
+ ' surrogate pair if Python is compiled to use 16-bit code units '
+ '(the\n'
+ ' default).\n'
'\n'
- '3. In a bytes literal, hexadecimal and octal escapes denote the\n'
- ' byte with the given value. In a string literal, these escapes\n'
- ' denote a Unicode character with the given value.\n'
+ '3. As in Standard C, up to three octal digits are accepted.\n'
'\n'
- '4. Changed in version 3.3: Support for name aliases [1] has been\n'
- ' added.\n'
+ '4. Unlike in Standard C, exactly two hex digits are required.\n'
'\n'
- '5. Exactly four hex digits are required.\n'
- '\n'
- '6. Any Unicode character can be encoded this way. Exactly eight\n'
- ' hex digits are required.\n'
+ '5. In a string literal, hexadecimal and octal escapes denote the\n'
+ ' byte with the given value; it is not necessary that the byte\n'
+ ' encodes a character in the source character set. In a Unicode\n'
+ ' literal, these escapes denote a Unicode character with the '
+ 'given\n'
+ ' value.\n'
'\n'
'Unlike Standard C, all unrecognized escape sequences are left in '
'the\n'
- 'string unchanged, i.e., *the backslash is left in the result*. '
+ 'string unchanged, i.e., *the backslash is left in the string*. '
'(This\n'
'behavior is useful when debugging: if an escape sequence is '
'mistyped,\n'
'the resulting output is more easily recognized as broken.) It is '
'also\n'
- 'important to note that the escape sequences only recognized in '
- 'string\n'
- 'literals fall into the category of unrecognized escapes for '
- 'bytes\n'
- 'literals.\n'
+ 'important to note that the escape sequences marked as "(Unicode '
+ 'only)"\n'
+ 'in the table above fall into the category of unrecognized escapes '
+ 'for\n'
+ 'non-Unicode string literals.\n'
'\n'
- ' Changed in version 3.6: Unrecognized escape sequences produce '
- 'a\n'
- ' "DeprecationWarning". In a future Python version they will be '
+ 'When an "\'r\'" or "\'R\'" prefix is present, a character '
+ 'following a\n'
+ 'backslash is included in the string without change, and *all\n'
+ 'backslashes are left in the string*. For example, the string '
+ 'literal\n'
+ '"r"\\n"" consists of two characters: a backslash and a lowercase '
+ '"\'n\'".\n'
+ 'String quotes can be escaped with a backslash, but the backslash\n'
+ 'remains in the string; for example, "r"\\""" is a valid string '
+ 'literal\n'
+ 'consisting of two characters: a backslash and a double quote; '
+ '"r"\\""\n'
+ 'is not a valid string literal (even a raw string cannot end in an '
+ 'odd\n'
+ 'number of backslashes). Specifically, *a raw string cannot end '
+ 'in a\n'
+ 'single backslash* (since the backslash would escape the '
+ 'following\n'
+ 'quote character). Note also that a single backslash followed by '
'a\n'
- ' "SyntaxWarning" and eventually a "SyntaxError".\n'
+ 'newline is interpreted as those two characters as part of the '
+ 'string,\n'
+ '*not* as a line continuation.\n'
'\n'
- 'Even in a raw literal, quotes can be escaped with a backslash, '
- 'but the\n'
- 'backslash remains in the result; for example, "r"\\""" is a '
- 'valid\n'
- 'string literal consisting of two characters: a backslash and a '
- 'double\n'
- 'quote; "r"\\"" is not a valid string literal (even a raw string '
- 'cannot\n'
- 'end in an odd number of backslashes). Specifically, *a raw '
- 'literal\n'
- 'cannot end in a single backslash* (since the backslash would '
- 'escape\n'
- 'the following quote character). Note also that a single '
- 'backslash\n'
- 'followed by a newline is interpreted as those two characters as '
- 'part\n'
- 'of the literal, *not* as a line continuation.\n',
- 'subscriptions': 'Subscriptions\n'
+ 'When an "\'r\'" or "\'R\'" prefix is used in conjunction with a '
+ '"\'u\'" or\n'
+ '"\'U\'" prefix, then the "\\uXXXX" and "\\UXXXXXXXX" escape '
+ 'sequences are\n'
+ 'processed while *all other backslashes are left in the string*. '
+ 'For\n'
+ 'example, the string literal "ur"\\u0062\\n"" consists of three '
+ 'Unicode\n'
+ "characters: 'LATIN SMALL LETTER B', 'REVERSE SOLIDUS', and "
+ "'LATIN\n"
+ "SMALL LETTER N'. Backslashes can be escaped with a preceding\n"
+ 'backslash; however, both remain in the string. As a result, '
+ '"\\uXXXX"\n'
+ 'escape sequences are only recognized when there are an odd number '
+ 'of\n'
+ 'backslashes.\n',
+ 'subscriptions': '\n'
+ 'Subscriptions\n'
'*************\n'
'\n'
'A subscription selects an item of a sequence (string, tuple '
@@ -10844,15 +9943,8 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
' subscription ::= primary "[" expression_list "]"\n'
'\n'
- 'The primary must evaluate to an object that supports '
- 'subscription\n'
- '(lists or dictionaries for example). User-defined objects '
- 'can support\n'
- 'subscription by defining a "__getitem__()" method.\n'
- '\n'
- 'For built-in objects, there are two types of objects that '
- 'support\n'
- 'subscription:\n'
+ 'The primary must evaluate to an object of a sequence or '
+ 'mapping type.\n'
'\n'
'If the primary is a mapping, the expression list must '
'evaluate to an\n'
@@ -10864,54 +9956,48 @@ topics = {'assert': 'The "assert" statement\n'
'exactly one\n'
'item.)\n'
'\n'
- 'If the primary is a sequence, the expression list must '
- 'evaluate to an\n'
- 'integer or a slice (as discussed in the following '
- 'section).\n'
- '\n'
- 'The formal syntax makes no special provision for negative '
- 'indices in\n'
- 'sequences; however, built-in sequences all provide a '
- '"__getitem__()"\n'
- 'method that interprets negative indices by adding the '
- 'length of the\n'
- 'sequence to the index (so that "x[-1]" selects the last '
- 'item of "x").\n'
+ 'If the primary is a sequence, the expression (list) must '
+ 'evaluate to a\n'
+ 'plain integer. If this value is negative, the length of '
+ 'the sequence\n'
+ 'is added to it (so that, e.g., "x[-1]" selects the last '
+ 'item of "x".)\n'
'The resulting value must be a nonnegative integer less than '
'the number\n'
'of items in the sequence, and the subscription selects the '
'item whose\n'
- 'index is that value (counting from zero). Since the support '
- 'for\n'
- 'negative indices and slicing occurs in the object’s '
- '"__getitem__()"\n'
- 'method, subclasses overriding this method will need to '
- 'explicitly add\n'
- 'that support.\n'
- '\n'
- 'A string’s items are characters. A character is not a '
+ 'index is that value (counting from zero).\n'
+ '\n'
+ "A string's items are characters. A character is not a "
'separate data\n'
'type but a string of exactly one character.\n',
- 'truth': 'Truth Value Testing\n'
+ 'truth': '\n'
+ 'Truth Value Testing\n'
'*******************\n'
'\n'
'Any object can be tested for truth value, for use in an "if" or\n'
- '"while" condition or as operand of the Boolean operations below.\n'
+ '"while" condition or as operand of the Boolean operations below. '
+ 'The\n'
+ 'following values are considered false:\n'
'\n'
- 'By default, an object is considered true unless its class defines\n'
- 'either a "__bool__()" method that returns "False" or a "__len__()"\n'
- 'method that returns zero, when called with the object. [1] Here '
- 'are\n'
- 'most of the built-in objects considered false:\n'
+ '* "None"\n'
'\n'
- '* constants defined to be false: "None" and "False".\n'
+ '* "False"\n'
'\n'
- '* zero of any numeric type: "0", "0.0", "0j", "Decimal(0)",\n'
- ' "Fraction(0, 1)"\n'
+ '* zero of any numeric type, for example, "0", "0L", "0.0", "0j".\n'
'\n'
- '* empty sequences and collections: "\'\'", "()", "[]", "{}", '
- '"set()",\n'
- ' "range(0)"\n'
+ '* any empty sequence, for example, "\'\'", "()", "[]".\n'
+ '\n'
+ '* any empty mapping, for example, "{}".\n'
+ '\n'
+ '* instances of user-defined classes, if the class defines a\n'
+ ' "__nonzero__()" or "__len__()" method, when that method returns '
+ 'the\n'
+ ' integer zero or "bool" value "False". [1]\n'
+ '\n'
+ 'All other values are considered true --- so objects of many types '
+ 'are\n'
+ 'always true.\n'
'\n'
'Operations and built-in functions that have a Boolean result '
'always\n'
@@ -10919,7 +10005,8 @@ topics = {'assert': 'The "assert" statement\n'
'otherwise stated. (Important exception: the Boolean operations '
'"or"\n'
'and "and" always return one of their operands.)\n',
- 'try': 'The "try" statement\n'
+ 'try': '\n'
+ 'The "try" statement\n'
'*******************\n'
'\n'
'The "try" statement specifies exception handlers and/or cleanup code\n'
@@ -10927,13 +10014,18 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
' try_stmt ::= try1_stmt | try2_stmt\n'
' try1_stmt ::= "try" ":" suite\n'
- ' ("except" [expression ["as" identifier]] ":" '
+ ' ("except" [expression [("as" | ",") identifier]] ":" '
'suite)+\n'
' ["else" ":" suite]\n'
' ["finally" ":" suite]\n'
' try2_stmt ::= "try" ":" suite\n'
' "finally" ":" suite\n'
'\n'
+ 'Changed in version 2.5: In previous versions of Python,\n'
+ '"try"..."except"..."finally" did not work. "try"..."except" had to '
+ 'be\n'
+ 'nested in "try"..."finally".\n'
+ '\n'
'The "except" clause(s) specify one or more exception handlers. When '
'no\n'
'exception occurs in the "try" clause, no exception handler is\n'
@@ -10946,10 +10038,10 @@ topics = {'assert': 'The "assert" statement\n'
'less except clause, if present, must be last; it matches any\n'
'exception. For an except clause with an expression, that expression\n'
'is evaluated, and the clause matches the exception if the resulting\n'
- 'object is “compatible” with the exception. An object is compatible\n'
+ 'object is "compatible" with the exception. An object is compatible\n'
'with an exception if it is the class or a base class of the '
'exception\n'
- 'object or a tuple containing an item compatible with the exception.\n'
+ 'object, or a tuple containing an item compatible with the exception.\n'
'\n'
'If no except clause matches the exception, the search for an '
'exception\n'
@@ -10966,70 +10058,48 @@ topics = {'assert': 'The "assert" statement\n'
'the exception).\n'
'\n'
'When a matching except clause is found, the exception is assigned to\n'
- 'the target specified after the "as" keyword in that except clause, '
- 'if\n'
- 'present, and the except clause’s suite is executed. All except\n'
- 'clauses must have an executable block. When the end of this block '
- 'is\n'
- 'reached, execution continues normally after the entire try '
- 'statement.\n'
- '(This means that if two nested handlers exist for the same '
- 'exception,\n'
- 'and the exception occurs in the try clause of the inner handler, the\n'
- 'outer handler will not handle the exception.)\n'
- '\n'
- 'When an exception has been assigned using "as target", it is cleared\n'
- 'at the end of the except clause. This is as if\n'
- '\n'
- ' except E as N:\n'
- ' foo\n'
- '\n'
- 'was translated to\n'
- '\n'
- ' except E as N:\n'
- ' try:\n'
- ' foo\n'
- ' finally:\n'
- ' del N\n'
- '\n'
- 'This means the exception must be assigned to a different name to be\n'
- 'able to refer to it after the except clause. Exceptions are cleared\n'
- 'because with the traceback attached to them, they form a reference\n'
- 'cycle with the stack frame, keeping all locals in that frame alive\n'
- 'until the next garbage collection occurs.\n'
+ 'the target specified in that except clause, if present, and the '
+ 'except\n'
+ "clause's suite is executed. All except clauses must have an\n"
+ 'executable block. When the end of this block is reached, execution\n'
+ 'continues normally after the entire try statement. (This means that\n'
+ 'if two nested handlers exist for the same exception, and the '
+ 'exception\n'
+ 'occurs in the try clause of the inner handler, the outer handler '
+ 'will\n'
+ 'not handle the exception.)\n'
'\n'
- 'Before an except clause’s suite is executed, details about the\n'
- 'exception are stored in the "sys" module and can be accessed via\n'
- '"sys.exc_info()". "sys.exc_info()" returns a 3-tuple consisting of '
- 'the\n'
- 'exception class, the exception instance and a traceback object (see\n'
- 'section The standard type hierarchy) identifying the point in the\n'
- 'program where the exception occurred. "sys.exc_info()" values are\n'
- 'restored to their previous values (before the call) when returning\n'
- 'from a function that handled an exception.\n'
+ "Before an except clause's suite is executed, details about the\n"
+ 'exception are assigned to three variables in the "sys" module:\n'
+ '"sys.exc_type" receives the object identifying the exception;\n'
+ '"sys.exc_value" receives the exception\'s parameter;\n'
+ '"sys.exc_traceback" receives a traceback object (see section The\n'
+ 'standard type hierarchy) identifying the point in the program where\n'
+ 'the exception occurred. These details are also available through the\n'
+ '"sys.exc_info()" function, which returns a tuple "(exc_type,\n'
+ 'exc_value, exc_traceback)". Use of the corresponding variables is\n'
+ 'deprecated in favor of this function, since their use is unsafe in a\n'
+ 'threaded program. As of Python 1.5, the variables are restored to\n'
+ 'their previous values (before the call) when returning from a '
+ 'function\n'
+ 'that handled an exception.\n'
'\n'
- 'The optional "else" clause is executed if the control flow leaves '
- 'the\n'
- '"try" suite, no exception was raised, and no "return", "continue", '
- 'or\n'
- '"break" statement was executed. Exceptions in the "else" clause are\n'
+ 'The optional "else" clause is executed if and when control flows off\n'
+ 'the end of the "try" clause. [2] Exceptions in the "else" clause are\n'
'not handled by the preceding "except" clauses.\n'
'\n'
- 'If "finally" is present, it specifies a ‘cleanup’ handler. The '
+ 'If "finally" is present, it specifies a \'cleanup\' handler. The '
'"try"\n'
'clause is executed, including any "except" and "else" clauses. If '
'an\n'
'exception occurs in any of the clauses and is not handled, the\n'
'exception is temporarily saved. The "finally" clause is executed. '
'If\n'
- 'there is a saved exception it is re-raised at the end of the '
- '"finally"\n'
- 'clause. If the "finally" clause raises another exception, the saved\n'
- 'exception is set as the context of the new exception. If the '
- '"finally"\n'
- 'clause executes a "return", "break" or "continue" statement, the '
- 'saved\n'
- 'exception is discarded:\n'
+ 'there is a saved exception, it is re-raised at the end of the\n'
+ '"finally" clause. If the "finally" clause raises another exception '
+ 'or\n'
+ 'executes a "return" or "break" statement, the saved exception is\n'
+ 'discarded:\n'
'\n'
' >>> def f():\n'
' ... try:\n'
@@ -11044,8 +10114,12 @@ topics = {'assert': 'The "assert" statement\n'
'execution of the "finally" clause.\n'
'\n'
'When a "return", "break" or "continue" statement is executed in the\n'
- '"try" suite of a "try"…"finally" statement, the "finally" clause is\n'
- 'also executed ‘on the way out.’\n'
+ '"try" suite of a "try"..."finally" statement, the "finally" clause '
+ 'is\n'
+ 'also executed \'on the way out.\' A "continue" statement is illegal '
+ 'in\n'
+ 'the "finally" clause. (The reason is a problem with the current\n'
+ 'implementation --- this restriction may be lifted in the future).\n'
'\n'
'The return value of a function is determined by the last "return"\n'
'statement executed. Since the "finally" clause always executes, a\n'
@@ -11065,12 +10139,9 @@ topics = {'assert': 'The "assert" statement\n'
'Additional information on exceptions can be found in section\n'
'Exceptions, and information on using the "raise" statement to '
'generate\n'
- 'exceptions may be found in section The raise statement.\n'
- '\n'
- 'Changed in version 3.8: Prior to Python 3.8, a "continue" statement\n'
- 'was illegal in the "finally" clause due to a problem with the\n'
- 'implementation.\n',
- 'types': 'The standard type hierarchy\n'
+ 'exceptions may be found in section The raise statement.\n',
+ 'types': '\n'
+ 'The standard type hierarchy\n'
'***************************\n'
'\n'
'Below is a list of the types that are built into Python. '
@@ -11079,12 +10150,10 @@ topics = {'assert': 'The "assert" statement\n'
'implementation) can define additional types. Future versions of\n'
'Python may add types to the type hierarchy (e.g., rational '
'numbers,\n'
- 'efficiently stored arrays of integers, etc.), although such '
- 'additions\n'
- 'will often be provided via the standard library instead.\n'
+ 'efficiently stored arrays of integers, etc.).\n'
'\n'
'Some of the type descriptions below contain a paragraph listing\n'
- '‘special attributes.’ These are attributes that provide access to '
+ "'special attributes.' These are attributes that provide access to "
'the\n'
'implementation and are not intended for general use. Their '
'definition\n'
@@ -11097,27 +10166,30 @@ topics = {'assert': 'The "assert" statement\n'
'It\n'
' is used to signify the absence of a value in many situations, '
'e.g.,\n'
- ' it is returned from functions that don’t explicitly return\n'
+ " it is returned from functions that don't explicitly return\n"
' anything. Its truth value is false.\n'
'\n'
'NotImplemented\n'
' This type has a single value. There is a single object with '
'this\n'
' value. This object is accessed through the built-in name\n'
- ' "NotImplemented". Numeric methods and rich comparison methods\n'
- ' should return this value if they do not implement the operation '
- 'for\n'
- ' the operands provided. (The interpreter will then try the\n'
- ' reflected operation, or some other fallback, depending on the\n'
- ' operator.) Its truth value is true.\n'
- '\n'
- ' See Implementing the arithmetic operations for more details.\n'
+ ' "NotImplemented". Numeric methods and rich comparison methods '
+ 'may\n'
+ ' return this value if they do not implement the operation for '
+ 'the\n'
+ ' operands provided. (The interpreter will then try the '
+ 'reflected\n'
+ ' operation, or some other fallback, depending on the operator.) '
+ 'Its\n'
+ ' truth value is true.\n'
'\n'
'Ellipsis\n'
' This type has a single value. There is a single object with '
'this\n'
- ' value. This object is accessed through the literal "..." or the\n'
- ' built-in name "Ellipsis". Its truth value is true.\n'
+ ' value. This object is accessed through the built-in name\n'
+ ' "Ellipsis". It is used to indicate the presence of the "..." '
+ 'syntax\n'
+ ' in a slice. Its truth value is true.\n'
'\n'
'"numbers.Number"\n'
' These are created by numeric literals and returned as results '
@@ -11139,37 +10211,59 @@ topics = {'assert': 'The "assert" statement\n'
'integers\n'
' (positive and negative).\n'
'\n'
- ' There are two types of integers:\n'
+ ' There are three types of integers:\n'
'\n'
- ' Integers ("int")\n'
+ ' Plain integers\n'
+ ' These represent numbers in the range -2147483648 through\n'
+ ' 2147483647. (The range may be larger on machines with a\n'
+ ' larger natural word size, but not smaller.) When the '
+ 'result\n'
+ ' of an operation would fall outside this range, the result '
+ 'is\n'
+ ' normally returned as a long integer (in some cases, the\n'
+ ' exception "OverflowError" is raised instead). For the\n'
+ ' purpose of shift and mask operations, integers are assumed '
+ 'to\n'
+ " have a binary, 2's complement notation using 32 or more "
+ 'bits,\n'
+ ' and hiding no bits from the user (i.e., all 4294967296\n'
+ ' different bit patterns correspond to different values).\n'
'\n'
+ ' Long integers\n'
' These represent numbers in an unlimited range, subject to\n'
' available (virtual) memory only. For the purpose of '
'shift\n'
' and mask operations, a binary representation is assumed, '
'and\n'
- ' negative numbers are represented in a variant of 2’s\n'
+ " negative numbers are represented in a variant of 2's\n"
' complement which gives the illusion of an infinite string '
'of\n'
' sign bits extending to the left.\n'
'\n'
- ' Booleans ("bool")\n'
+ ' Booleans\n'
' These represent the truth values False and True. The two\n'
' objects representing the values "False" and "True" are '
'the\n'
' only Boolean objects. The Boolean type is a subtype of '
- 'the\n'
- ' integer type, and Boolean values behave like the values 0 '
- 'and\n'
- ' 1, respectively, in almost all contexts, the exception '
- 'being\n'
+ 'plain\n'
+ ' integers, and Boolean values behave like the values 0 and '
+ '1,\n'
+ ' respectively, in almost all contexts, the exception being\n'
' that when converted to a string, the strings ""False"" or\n'
' ""True"" are returned, respectively.\n'
'\n'
' The rules for integer representation are intended to give '
'the\n'
' most meaningful interpretation of shift and mask operations\n'
- ' involving negative integers.\n'
+ ' involving negative integers and the least surprises when\n'
+ ' switching between the plain and long integer domains. Any\n'
+ ' operation, if it yields a result in the plain integer '
+ 'domain,\n'
+ ' will yield the same result in the long integer domain or '
+ 'when\n'
+ ' using mixed operands. The switch between domains is '
+ 'transparent\n'
+ ' to the programmer.\n'
'\n'
' "numbers.Real" ("float")\n'
' These represent machine-level double precision floating '
@@ -11187,7 +10281,7 @@ topics = {'assert': 'The "assert" statement\n'
'floating\n'
' point numbers.\n'
'\n'
- ' "numbers.Complex" ("complex")\n'
+ ' "numbers.Complex"\n'
' These represent complex numbers as a pair of machine-level\n'
' double precision floating point numbers. The same caveats '
'apply\n'
@@ -11202,7 +10296,7 @@ topics = {'assert': 'The "assert" statement\n'
'items\n'
' of a sequence. When the length of a sequence is *n*, the index '
'set\n'
- ' contains the numbers 0, 1, …, *n*-1. Item *i* of sequence *a* '
+ ' contains the numbers 0, 1, ..., *n*-1. Item *i* of sequence *a* '
'is\n'
' selected by "a[i]".\n'
'\n'
@@ -11212,8 +10306,8 @@ topics = {'assert': 'The "assert" statement\n'
'implies\n'
' that the index set is renumbered so that it starts at 0.\n'
'\n'
- ' Some sequences also support “extended slicing” with a third '
- '“step”\n'
+ ' Some sequences also support "extended slicing" with a third '
+ '"step"\n'
' parameter: "a[i:j:k]" selects all items of *a* with index *x* '
'where\n'
' "x = i + n*k", *n* ">=" "0" and *i* "<=" *x* "<" *j*.\n'
@@ -11234,30 +10328,57 @@ topics = {'assert': 'The "assert" statement\n'
' The following types are immutable sequences:\n'
'\n'
' Strings\n'
- ' A string is a sequence of values that represent Unicode '
- 'code\n'
- ' points. All the code points in the range "U+0000 - '
- 'U+10FFFF"\n'
- ' can be represented in a string. Python doesn’t have a '
- '"char"\n'
- ' type; instead, every code point in the string is '
- 'represented\n'
- ' as a string object with length "1". The built-in '
- 'function\n'
- ' "ord()" converts a code point from its string form to an\n'
- ' integer in the range "0 - 10FFFF"; "chr()" converts an\n'
- ' integer in the range "0 - 10FFFF" to the corresponding '
- 'length\n'
- ' "1" string object. "str.encode()" can be used to convert '
- 'a\n'
- ' "str" to "bytes" using the given text encoding, and\n'
- ' "bytes.decode()" can be used to achieve the opposite.\n'
+ ' The items of a string are characters. There is no '
+ 'separate\n'
+ ' character type; a character is represented by a string of '
+ 'one\n'
+ ' item. Characters represent (at least) 8-bit bytes. The\n'
+ ' built-in functions "chr()" and "ord()" convert between\n'
+ ' characters and nonnegative integers representing the byte\n'
+ ' values. Bytes with the values 0--127 usually represent '
+ 'the\n'
+ ' corresponding ASCII values, but the interpretation of '
+ 'values\n'
+ ' is up to the program. The string data type is also used '
+ 'to\n'
+ ' represent arrays of bytes, e.g., to hold data read from a\n'
+ ' file.\n'
+ '\n'
+ ' (On systems whose native character set is not ASCII, '
+ 'strings\n'
+ ' may use EBCDIC in their internal representation, provided '
+ 'the\n'
+ ' functions "chr()" and "ord()" implement a mapping between\n'
+ ' ASCII and EBCDIC, and string comparison preserves the '
+ 'ASCII\n'
+ ' order. Or perhaps someone can propose a better rule?)\n'
+ '\n'
+ ' Unicode\n'
+ ' The items of a Unicode object are Unicode code units. A\n'
+ ' Unicode code unit is represented by a Unicode object of '
+ 'one\n'
+ ' item and can hold either a 16-bit or 32-bit value\n'
+ ' representing a Unicode ordinal (the maximum value for the\n'
+ ' ordinal is given in "sys.maxunicode", and depends on how\n'
+ ' Python is configured at compile time). Surrogate pairs '
+ 'may\n'
+ ' be present in the Unicode object, and will be reported as '
+ 'two\n'
+ ' separate items. The built-in functions "unichr()" and\n'
+ ' "ord()" convert between code units and nonnegative '
+ 'integers\n'
+ ' representing the Unicode ordinals as defined in the '
+ 'Unicode\n'
+ ' Standard 3.0. Conversion from and to other encodings are\n'
+ ' possible through the Unicode method "encode()" and the '
+ 'built-\n'
+ ' in function "unicode()".\n'
'\n'
' Tuples\n'
' The items of a tuple are arbitrary Python objects. Tuples '
'of\n'
' two or more items are formed by comma-separated lists of\n'
- ' expressions. A tuple of one item (a ‘singleton’) can be\n'
+ " expressions. A tuple of one item (a 'singleton') can be\n"
' formed by affixing a comma to an expression (an expression '
'by\n'
' itself does not create a tuple, since parentheses must be\n'
@@ -11265,17 +10386,6 @@ topics = {'assert': 'The "assert" statement\n'
'be\n'
' formed by an empty pair of parentheses.\n'
'\n'
- ' Bytes\n'
- ' A bytes object is an immutable array. The items are '
- '8-bit\n'
- ' bytes, represented by integers in the range 0 <= x < 256.\n'
- ' Bytes literals (like "b\'abc\'") and the built-in '
- '"bytes()"\n'
- ' constructor can be used to create bytes objects. Also, '
- 'bytes\n'
- ' objects can be decoded to strings via the "decode()" '
- 'method.\n'
- '\n'
' Mutable sequences\n'
' Mutable sequences can be changed after they are created. '
'The\n'
@@ -11300,12 +10410,12 @@ topics = {'assert': 'The "assert" statement\n'
' the built-in "bytearray()" constructor. Aside from being\n'
' mutable (and hence unhashable), byte arrays otherwise '
'provide\n'
- ' the same interface and functionality as immutable "bytes"\n'
+ ' the same interface and functionality as immutable bytes\n'
' objects.\n'
'\n'
' The extension module "array" provides an additional example '
'of a\n'
- ' mutable sequence type, as does the "collections" module.\n'
+ ' mutable sequence type.\n'
'\n'
'Set types\n'
' These represent unordered, finite sets of unique, immutable\n'
@@ -11363,7 +10473,7 @@ topics = {'assert': 'The "assert" statement\n'
'object\n'
' identity, the reason being that the efficient implementation '
'of\n'
- ' dictionaries requires a key’s hash value to remain constant.\n'
+ " dictionaries requires a key's hash value to remain constant.\n"
' Numeric types used for keys obey the normal rules for '
'numeric\n'
' comparison: if two numbers compare equal (e.g., "1" and '
@@ -11374,10 +10484,8 @@ topics = {'assert': 'The "assert" statement\n'
' Dictionaries are mutable; they can be created by the "{...}"\n'
' notation (see section Dictionary displays).\n'
'\n'
- ' The extension modules "dbm.ndbm" and "dbm.gnu" provide\n'
- ' additional examples of mapping types, as does the '
- '"collections"\n'
- ' module.\n'
+ ' The extension modules "dbm", "gdbm", and "bsddb" provide\n'
+ ' additional examples of mapping types.\n'
'\n'
'Callable types\n'
' These are the types to which the function call operation (see\n'
@@ -11388,115 +10496,92 @@ topics = {'assert': 'The "assert" statement\n'
' definition (see section Function definitions). It should be\n'
' called with an argument list containing the same number of '
'items\n'
- ' as the function’s formal parameter list.\n'
+ " as the function's formal parameter list.\n"
'\n'
' Special attributes:\n'
'\n'
' '
- '+---------------------------+---------------------------------+-------------+\n'
- ' | Attribute | Meaning '
+ '+-------------------------+---------------------------------+-------------+\n'
+ ' | Attribute | Meaning '
'| |\n'
' '
- '|===========================|=================================|=============|\n'
- ' | "__doc__" | The function’s documentation '
+ '+=========================+=================================+=============+\n'
+ ' | "__doc__" "func_doc" | The function\'s documentation '
'| Writable |\n'
- ' | | string, or "None" if '
+ ' | | string, or "None" if '
'| |\n'
- ' | | unavailable; not inherited by '
- '| |\n'
- ' | | subclasses. '
+ ' | | unavailable. '
'| |\n'
' '
- '+---------------------------+---------------------------------+-------------+\n'
- ' | "__name__" | The function’s name. '
+ '+-------------------------+---------------------------------+-------------+\n'
+ ' | "__name__" "func_name" | The function\'s name '
'| Writable |\n'
' '
- '+---------------------------+---------------------------------+-------------+\n'
- ' | "__qualname__" | The function’s *qualified '
- '| Writable |\n'
- ' | | name*. New in version 3.3. '
+ '+-------------------------+---------------------------------+-------------+\n'
+ ' | "__module__" | The name of the module the | '
+ 'Writable |\n'
+ ' | | function was defined in, or '
'| |\n'
- ' '
- '+---------------------------+---------------------------------+-------------+\n'
- ' | "__module__" | The name of the module the '
- '| Writable |\n'
- ' | | function was defined in, or '
- '| |\n'
- ' | | "None" if unavailable. '
+ ' | | "None" if unavailable. '
'| |\n'
' '
- '+---------------------------+---------------------------------+-------------+\n'
- ' | "__defaults__" | A tuple containing default '
- '| Writable |\n'
- ' | | argument values for those '
+ '+-------------------------+---------------------------------+-------------+\n'
+ ' | "__defaults__" | A tuple containing default | '
+ 'Writable |\n'
+ ' | "func_defaults" | argument values for those '
'| |\n'
- ' | | arguments that have defaults, '
+ ' | | arguments that have defaults, '
'| |\n'
- ' | | or "None" if no arguments have '
+ ' | | or "None" if no arguments have '
'| |\n'
- ' | | a default value. '
+ ' | | a default value. '
'| |\n'
' '
- '+---------------------------+---------------------------------+-------------+\n'
- ' | "__code__" | The code object representing '
- '| Writable |\n'
- ' | | the compiled function body. '
+ '+-------------------------+---------------------------------+-------------+\n'
+ ' | "__code__" "func_code" | The code object representing | '
+ 'Writable |\n'
+ ' | | the compiled function body. '
'| |\n'
' '
- '+---------------------------+---------------------------------+-------------+\n'
- ' | "__globals__" | A reference to the dictionary '
- '| Read-only |\n'
- ' | | that holds the function’s '
+ '+-------------------------+---------------------------------+-------------+\n'
+ ' | "__globals__" | A reference to the dictionary | '
+ 'Read-only |\n'
+ ' | "func_globals" | that holds the function\'s '
'| |\n'
- ' | | global variables — the global '
+ ' | | global variables --- the global '
'| |\n'
- ' | | namespace of the module in '
+ ' | | namespace of the module in '
'| |\n'
- ' | | which the function was defined. '
+ ' | | which the function was defined. '
'| |\n'
' '
- '+---------------------------+---------------------------------+-------------+\n'
- ' | "__dict__" | The namespace supporting '
- '| Writable |\n'
- ' | | arbitrary function attributes. '
+ '+-------------------------+---------------------------------+-------------+\n'
+ ' | "__dict__" "func_dict" | The namespace supporting | '
+ 'Writable |\n'
+ ' | | arbitrary function attributes. '
'| |\n'
' '
- '+---------------------------+---------------------------------+-------------+\n'
- ' | "__closure__" | "None" or a tuple of cells that '
- '| Read-only |\n'
- ' | | contain bindings for the '
- '| |\n'
- ' | | function’s free variables. See '
- '| |\n'
- ' | | below for information on the '
- '| |\n'
- ' | | "cell_contents" attribute. '
- '| |\n'
- ' '
- '+---------------------------+---------------------------------+-------------+\n'
- ' | "__annotations__" | A dict containing annotations '
- '| Writable |\n'
- ' | | of parameters. The keys of the '
- '| |\n'
- ' | | dict are the parameter names, '
+ '+-------------------------+---------------------------------+-------------+\n'
+ ' | "__closure__" | "None" or a tuple of cells that | '
+ 'Read-only |\n'
+ ' | "func_closure" | contain bindings for the '
'| |\n'
- ' | | and "\'return\'" for the '
- 'return | |\n'
- ' | | annotation, if provided. '
+ " | | function's free variables. "
'| |\n'
' '
- '+---------------------------+---------------------------------+-------------+\n'
- ' | "__kwdefaults__" | A dict containing defaults for '
- '| Writable |\n'
- ' | | keyword-only parameters. '
- '| |\n'
- ' '
- '+---------------------------+---------------------------------+-------------+\n'
+ '+-------------------------+---------------------------------+-------------+\n'
'\n'
- ' Most of the attributes labelled “Writable” check the type of '
+ ' Most of the attributes labelled "Writable" check the type of '
'the\n'
' assigned value.\n'
'\n'
+ ' Changed in version 2.4: "func_name" is now writable.\n'
+ '\n'
+ ' Changed in version 2.6: The double-underscore attributes\n'
+ ' "__closure__", "__code__", "__defaults__", and "__globals__"\n'
+ ' were introduced as aliases for the corresponding "func_*"\n'
+ ' attributes for forwards compatibility with Python 3.\n'
+ '\n'
' Function objects also support getting and setting arbitrary\n'
' attributes, which can be used, for example, to attach '
'metadata\n'
@@ -11509,30 +10594,35 @@ topics = {'assert': 'The "assert" statement\n'
' attributes on built-in functions may be supported in the\n'
' future.*\n'
'\n'
- ' A cell object has the attribute "cell_contents". This can be\n'
- ' used to get the value of the cell, as well as set the value.\n'
- '\n'
- ' Additional information about a function’s definition can be\n'
+ " Additional information about a function's definition can be\n"
' retrieved from its code object; see the description of '
'internal\n'
- ' types below. The "cell" type can be accessed in the "types"\n'
- ' module.\n'
+ ' types below.\n'
'\n'
- ' Instance methods\n'
- ' An instance method object combines a class, a class instance '
- 'and\n'
- ' any callable object (normally a user-defined function).\n'
+ ' User-defined methods\n'
+ ' A user-defined method object combines a class, a class '
+ 'instance\n'
+ ' (or "None") and any callable object (normally a user-defined\n'
+ ' function).\n'
'\n'
- ' Special read-only attributes: "__self__" is the class '
+ ' Special read-only attributes: "im_self" is the class '
'instance\n'
- ' object, "__func__" is the function object; "__doc__" is the\n'
- ' method’s documentation (same as "__func__.__doc__"); '
- '"__name__"\n'
- ' is the method name (same as "__func__.__name__"); '
- '"__module__"\n'
- ' is the name of the module the method was defined in, or '
- '"None"\n'
- ' if unavailable.\n'
+ ' object, "im_func" is the function object; "im_class" is the\n'
+ ' class of "im_self" for bound methods or the class that asked '
+ 'for\n'
+ ' the method for unbound methods; "__doc__" is the method\'s\n'
+ ' documentation (same as "im_func.__doc__"); "__name__" is the\n'
+ ' method name (same as "im_func.__name__"); "__module__" is '
+ 'the\n'
+ ' name of the module the method was defined in, or "None" if\n'
+ ' unavailable.\n'
+ '\n'
+ ' Changed in version 2.2: "im_self" used to refer to the class\n'
+ ' that defined the method.\n'
+ '\n'
+ ' Changed in version 2.6: For Python 3 forward-compatibility,\n'
+ ' "im_func" is also available as "__func__", and "im_self" as\n'
+ ' "__self__".\n'
'\n'
' Methods also support accessing (but not setting) the '
'arbitrary\n'
@@ -11541,40 +10631,67 @@ topics = {'assert': 'The "assert" statement\n'
' User-defined method objects may be created when getting an\n'
' attribute of a class (perhaps via an instance of that class), '
'if\n'
- ' that attribute is a user-defined function object or a class\n'
- ' method object.\n'
- '\n'
- ' When an instance method object is created by retrieving a '
- 'user-\n'
- ' defined function object from a class via one of its '
- 'instances,\n'
- ' its "__self__" attribute is the instance, and the method '
+ ' that attribute is a user-defined function object, an unbound\n'
+ ' user-defined method object, or a class method object. When '
+ 'the\n'
+ ' attribute is a user-defined method object, a new method '
'object\n'
- ' is said to be bound. The new method’s "__func__" attribute '
+ ' is only created if the class from which it is being retrieved '
'is\n'
- ' the original function object.\n'
+ ' the same as, or a derived class of, the class stored in the\n'
+ ' original method object; otherwise, the original method object '
+ 'is\n'
+ ' used as it is.\n'
'\n'
- ' When an instance method object is created by retrieving a '
- 'class\n'
- ' method object from a class or instance, its "__self__" '
+ ' When a user-defined method object is created by retrieving a\n'
+ ' user-defined function object from a class, its "im_self"\n'
+ ' attribute is "None" and the method object is said to be '
+ 'unbound.\n'
+ ' When one is created by retrieving a user-defined function '
+ 'object\n'
+ ' from a class via one of its instances, its "im_self" '
'attribute\n'
- ' is the class itself, and its "__func__" attribute is the\n'
- ' function object underlying the class method.\n'
+ ' is the instance, and the method object is said to be bound. '
+ 'In\n'
+ ' either case, the new method\'s "im_class" attribute is the '
+ 'class\n'
+ ' from which the retrieval takes place, and its "im_func"\n'
+ ' attribute is the original function object.\n'
'\n'
- ' When an instance method object is called, the underlying\n'
- ' function ("__func__") is called, inserting the class '
- 'instance\n'
- ' ("__self__") in front of the argument list. For instance, '
- 'when\n'
- ' "C" is a class which contains a definition for a function '
- '"f()",\n'
- ' and "x" is an instance of "C", calling "x.f(1)" is equivalent '
- 'to\n'
- ' calling "C.f(x, 1)".\n'
+ ' When a user-defined method object is created by retrieving\n'
+ ' another method object from a class or instance, the behaviour '
+ 'is\n'
+ ' the same as for a function object, except that the "im_func"\n'
+ ' attribute of the new instance is not the original method '
+ 'object\n'
+ ' but its "im_func" attribute.\n'
+ '\n'
+ ' When a user-defined method object is created by retrieving a\n'
+ ' class method object from a class or instance, its "im_self"\n'
+ ' attribute is the class itself, and its "im_func" attribute '
+ 'is\n'
+ ' the function object underlying the class method.\n'
+ '\n'
+ ' When an unbound user-defined method object is called, the\n'
+ ' underlying function ("im_func") is called, with the '
+ 'restriction\n'
+ ' that the first argument must be an instance of the proper '
+ 'class\n'
+ ' ("im_class") or of a derived class thereof.\n'
'\n'
- ' When an instance method object is derived from a class '
+ ' When a bound user-defined method object is called, the\n'
+ ' underlying function ("im_func") is called, inserting the '
+ 'class\n'
+ ' instance ("im_self") in front of the argument list. For\n'
+ ' instance, when "C" is a class which contains a definition for '
+ 'a\n'
+ ' function "f()", and "x" is an instance of "C", calling '
+ '"x.f(1)"\n'
+ ' is equivalent to calling "C.f(x, 1)".\n'
+ '\n'
+ ' When a user-defined method object is derived from a class '
'method\n'
- ' object, the “class instance” stored in "__self__" will '
+ ' object, the "class instance" stored in "im_self" will '
'actually\n'
' be the class itself, so that calling either "x.f(1)" or '
'"C.f(1)"\n'
@@ -11582,22 +10699,23 @@ topics = {'assert': 'The "assert" statement\n'
'underlying\n'
' function.\n'
'\n'
- ' Note that the transformation from function object to '
- 'instance\n'
- ' method object happens each time the attribute is retrieved '
- 'from\n'
- ' the instance. In some cases, a fruitful optimization is to\n'
- ' assign the attribute to a local variable and call that local\n'
- ' variable. Also notice that this transformation only happens '
- 'for\n'
- ' user-defined functions; other callable objects (and all non-\n'
- ' callable objects) are retrieved without transformation. It '
- 'is\n'
- ' also important to note that user-defined functions which are\n'
- ' attributes of a class instance are not converted to bound\n'
- ' methods; this *only* happens when the function is an '
- 'attribute\n'
- ' of the class.\n'
+ ' Note that the transformation from function object to (unbound '
+ 'or\n'
+ ' bound) method object happens each time the attribute is\n'
+ ' retrieved from the class or instance. In some cases, a '
+ 'fruitful\n'
+ ' optimization is to assign the attribute to a local variable '
+ 'and\n'
+ ' call that local variable. Also notice that this '
+ 'transformation\n'
+ ' only happens for user-defined functions; other callable '
+ 'objects\n'
+ ' (and all non-callable objects) are retrieved without\n'
+ ' transformation. It is also important to note that '
+ 'user-defined\n'
+ ' functions which are attributes of a class instance are not\n'
+ ' converted to bound methods; this *only* happens when the\n'
+ ' function is an attribute of the class.\n'
'\n'
' Generator functions\n'
' A function or method which uses the "yield" statement (see\n'
@@ -11607,46 +10725,14 @@ topics = {'assert': 'The "assert" statement\n'
'object\n'
' which can be used to execute the body of the function: '
'calling\n'
- ' the iterator’s "iterator.__next__()" method will cause the\n'
- ' function to execute until it provides a value using the '
- '"yield"\n'
- ' statement. When the function executes a "return" statement '
- 'or\n'
- ' falls off the end, a "StopIteration" exception is raised and '
- 'the\n'
- ' iterator will have reached the end of the set of values to '
- 'be\n'
- ' returned.\n'
- '\n'
- ' Coroutine functions\n'
- ' A function or method which is defined using "async def" is\n'
- ' called a *coroutine function*. Such a function, when '
- 'called,\n'
- ' returns a *coroutine* object. It may contain "await"\n'
- ' expressions, as well as "async with" and "async for" '
- 'statements.\n'
- ' See also the Coroutine Objects section.\n'
- '\n'
- ' Asynchronous generator functions\n'
- ' A function or method which is defined using "async def" and\n'
- ' which uses the "yield" statement is called a *asynchronous\n'
- ' generator function*. Such a function, when called, returns '
- 'an\n'
- ' asynchronous iterator object which can be used in an "async '
- 'for"\n'
- ' statement to execute the body of the function.\n'
- '\n'
- ' Calling the asynchronous iterator’s "aiterator.__anext__()"\n'
- ' method will return an *awaitable* which when awaited will\n'
+ ' the iterator\'s "next()" method will cause the function to\n'
' execute until it provides a value using the "yield" '
- 'expression.\n'
- ' When the function executes an empty "return" statement or '
- 'falls\n'
- ' off the end, a "StopAsyncIteration" exception is raised and '
+ 'statement.\n'
+ ' When the function executes a "return" statement or falls off '
'the\n'
- ' asynchronous iterator will have reached the end of the set '
- 'of\n'
- ' values to be yielded.\n'
+ ' end, a "StopIteration" exception is raised and the iterator '
+ 'will\n'
+ ' have reached the end of the set of values to be returned.\n'
'\n'
' Built-in functions\n'
' A built-in function object is a wrapper around a C function.\n'
@@ -11655,9 +10741,9 @@ topics = {'assert': 'The "assert" statement\n'
'of\n'
' the arguments are determined by the C function. Special '
'read-\n'
- ' only attributes: "__doc__" is the function’s documentation\n'
+ ' only attributes: "__doc__" is the function\'s documentation\n'
' string, or "None" if unavailable; "__name__" is the '
- 'function’s\n'
+ "function's\n"
' name; "__self__" is set to "None" (but see the next item);\n'
' "__module__" is the name of the module the function was '
'defined\n'
@@ -11673,56 +10759,47 @@ topics = {'assert': 'The "assert" statement\n'
'the\n'
' object denoted by *alist*.\n'
'\n'
- ' Classes\n'
- ' Classes are callable. These objects normally act as '
- 'factories\n'
- ' for new instances of themselves, but variations are possible '
- 'for\n'
- ' class types that override "__new__()". The arguments of the\n'
- ' call are passed to "__new__()" and, in the typical case, to\n'
- ' "__init__()" to initialize the new instance.\n'
+ ' Class Types\n'
+ ' Class types, or "new-style classes," are callable. These\n'
+ ' objects normally act as factories for new instances of\n'
+ ' themselves, but variations are possible for class types that\n'
+ ' override "__new__()". The arguments of the call are passed '
+ 'to\n'
+ ' "__new__()" and, in the typical case, to "__init__()" to\n'
+ ' initialize the new instance.\n'
+ '\n'
+ ' Classic Classes\n'
+ ' Class objects are described below. When a class object is\n'
+ ' called, a new class instance (also described below) is '
+ 'created\n'
+ " and returned. This implies a call to the class's "
+ '"__init__()"\n'
+ ' method if it has one. Any arguments are passed on to the\n'
+ ' "__init__()" method. If there is no "__init__()" method, '
+ 'the\n'
+ ' class must be called without arguments.\n'
'\n'
- ' Class Instances\n'
- ' Instances of arbitrary classes can be made callable by '
- 'defining\n'
- ' a "__call__()" method in their class.\n'
+ ' Class instances\n'
+ ' Class instances are described below. Class instances are\n'
+ ' callable only when the class has a "__call__()" method;\n'
+ ' "x(arguments)" is a shorthand for "x.__call__(arguments)".\n'
'\n'
'Modules\n'
- ' Modules are a basic organizational unit of Python code, and are\n'
- ' created by the import system as invoked either by the "import"\n'
- ' statement, or by calling functions such as\n'
- ' "importlib.import_module()" and built-in "__import__()". A '
- 'module\n'
- ' object has a namespace implemented by a dictionary object (this '
- 'is\n'
- ' the dictionary referenced by the "__globals__" attribute of\n'
- ' functions defined in the module). Attribute references are\n'
- ' translated to lookups in this dictionary, e.g., "m.x" is '
- 'equivalent\n'
- ' to "m.__dict__["x"]". A module object does not contain the code\n'
- ' object used to initialize the module (since it isn’t needed '
- 'once\n'
- ' the initialization is done).\n'
- '\n'
- ' Attribute assignment updates the module’s namespace dictionary,\n'
+ ' Modules are imported by the "import" statement (see section The\n'
+ ' import statement). A module object has a namespace implemented '
+ 'by a\n'
+ ' dictionary object (this is the dictionary referenced by the\n'
+ ' func_globals attribute of functions defined in the module).\n'
+ ' Attribute references are translated to lookups in this '
+ 'dictionary,\n'
+ ' e.g., "m.x" is equivalent to "m.__dict__["x"]". A module object\n'
+ ' does not contain the code object used to initialize the module\n'
+ " (since it isn't needed once the initialization is done).\n"
+ '\n'
+ " Attribute assignment updates the module's namespace dictionary,\n"
' e.g., "m.x = 1" is equivalent to "m.__dict__["x"] = 1".\n'
'\n'
- ' Predefined (writable) attributes: "__name__" is the module’s '
- 'name;\n'
- ' "__doc__" is the module’s documentation string, or "None" if\n'
- ' unavailable; "__annotations__" (optional) is a dictionary\n'
- ' containing *variable annotations* collected during module body\n'
- ' execution; "__file__" is the pathname of the file from which '
- 'the\n'
- ' module was loaded, if it was loaded from a file. The "__file__"\n'
- ' attribute may be missing for certain types of modules, such as '
- 'C\n'
- ' modules that are statically linked into the interpreter; for\n'
- ' extension modules loaded dynamically from a shared library, it '
- 'is\n'
- ' the pathname of the shared library file.\n'
- '\n'
- ' Special read-only attribute: "__dict__" is the module’s '
+ ' Special read-only attribute: "__dict__" is the module\'s '
'namespace\n'
' as a dictionary object.\n'
'\n'
@@ -11735,42 +10812,66 @@ topics = {'assert': 'The "assert" statement\n'
'the\n'
' module around while using its dictionary directly.\n'
'\n'
- 'Custom classes\n'
- ' Custom class types are typically created by class definitions '
- '(see\n'
- ' section Class definitions). A class has a namespace implemented '
- 'by\n'
- ' a dictionary object. Class attribute references are translated '
- 'to\n'
- ' lookups in this dictionary, e.g., "C.x" is translated to\n'
- ' "C.__dict__["x"]" (although there are a number of hooks which '
- 'allow\n'
- ' for other means of locating attributes). When the attribute name '
- 'is\n'
- ' not found there, the attribute search continues in the base\n'
- ' classes. This search of the base classes uses the C3 method\n'
- ' resolution order which behaves correctly even in the presence '
+ ' Predefined (writable) attributes: "__name__" is the module\'s '
+ 'name;\n'
+ ' "__doc__" is the module\'s documentation string, or "None" if\n'
+ ' unavailable; "__file__" is the pathname of the file from which '
+ 'the\n'
+ ' module was loaded, if it was loaded from a file. The "__file__"\n'
+ ' attribute is not present for C modules that are statically '
+ 'linked\n'
+ ' into the interpreter; for extension modules loaded dynamically '
+ 'from\n'
+ ' a shared library, it is the pathname of the shared library '
+ 'file.\n'
+ '\n'
+ 'Classes\n'
+ ' Both class types (new-style classes) and class objects (old-\n'
+ ' style/classic classes) are typically created by class '
+ 'definitions\n'
+ ' (see section Class definitions). A class has a namespace\n'
+ ' implemented by a dictionary object. Class attribute references '
+ 'are\n'
+ ' translated to lookups in this dictionary, e.g., "C.x" is '
+ 'translated\n'
+ ' to "C.__dict__["x"]" (although for new-style classes in '
+ 'particular\n'
+ ' there are a number of hooks which allow for other means of '
+ 'locating\n'
+ ' attributes). When the attribute name is not found there, the\n'
+ ' attribute search continues in the base classes. For old-style\n'
+ ' classes, the search is depth-first, left-to-right in the order '
'of\n'
- ' ‘diamond’ inheritance structures where there are multiple\n'
- ' inheritance paths leading back to a common ancestor. Additional\n'
- ' details on the C3 MRO used by Python can be found in the\n'
- ' documentation accompanying the 2.3 release at\n'
+ ' occurrence in the base class list. New-style classes use the '
+ 'more\n'
+ ' complex C3 method resolution order which behaves correctly even '
+ 'in\n'
+ " the presence of 'diamond' inheritance structures where there "
+ 'are\n'
+ ' multiple inheritance paths leading back to a common ancestor.\n'
+ ' Additional details on the C3 MRO used by new-style classes can '
+ 'be\n'
+ ' found in the documentation accompanying the 2.3 release at\n'
' https://www.python.org/download/releases/2.3/mro/.\n'
'\n'
' When a class attribute reference (for class "C", say) would '
'yield a\n'
- ' class method object, it is transformed into an instance method\n'
- ' object whose "__self__" attribute is "C". When it would yield '
+ ' user-defined function object or an unbound user-defined method\n'
+ ' object whose associated class is either "C" or one of its base\n'
+ ' classes, it is transformed into an unbound user-defined method\n'
+ ' object whose "im_class" attribute is "C". When it would yield a\n'
+ ' class method object, it is transformed into a bound '
+ 'user-defined\n'
+ ' method object whose "im_self" attribute is "C". When it would\n'
+ ' yield a static method object, it is transformed into the object\n'
+ ' wrapped by the static method object. See section Implementing\n'
+ ' Descriptors for another way in which attributes retrieved from '
'a\n'
- ' static method object, it is transformed into the object wrapped '
- 'by\n'
- ' the static method object. See section Implementing Descriptors '
- 'for\n'
- ' another way in which attributes retrieved from a class may '
- 'differ\n'
- ' from those actually contained in its "__dict__".\n'
+ ' class may differ from those actually contained in its '
+ '"__dict__"\n'
+ ' (note that only new-style classes support descriptors).\n'
'\n'
- ' Class attribute assignments update the class’s dictionary, '
+ " Class attribute assignments update the class's dictionary, "
'never\n'
' the dictionary of a base class.\n'
'\n'
@@ -11782,16 +10883,13 @@ topics = {'assert': 'The "assert" statement\n'
'is\n'
' the module name in which the class was defined; "__dict__" is '
'the\n'
- ' dictionary containing the class’s namespace; "__bases__" is a '
+ ' dictionary containing the class\'s namespace; "__bases__" is a '
'tuple\n'
- ' containing the base classes, in the order of their occurrence '
- 'in\n'
- ' the base class list; "__doc__" is the class’s documentation '
- 'string,\n'
- ' or "None" if undefined; "__annotations__" (optional) is a\n'
- ' dictionary containing *variable annotations* collected during '
- 'class\n'
- ' body execution.\n'
+ ' (possibly empty or a singleton) containing the base classes, in '
+ 'the\n'
+ ' order of their occurrence in the base class list; "__doc__" is '
+ 'the\n'
+ ' class\'s documentation string, or "None" if undefined.\n'
'\n'
'Class instances\n'
' A class instance is created by calling a class object (see '
@@ -11799,26 +10897,29 @@ topics = {'assert': 'The "assert" statement\n'
' A class instance has a namespace implemented as a dictionary '
'which\n'
' is the first place in which attribute references are searched.\n'
- ' When an attribute is not found there, and the instance’s class '
+ " When an attribute is not found there, and the instance's class "
'has\n'
' an attribute by that name, the search continues with the class\n'
' attributes. If a class attribute is found that is a '
'user-defined\n'
- ' function object, it is transformed into an instance method '
- 'object\n'
- ' whose "__self__" attribute is the instance. Static method and\n'
- ' class method objects are also transformed; see above under\n'
- ' “Classes”. See section Implementing Descriptors for another way '
- 'in\n'
- ' which attributes of a class retrieved via its instances may '
- 'differ\n'
- ' from the objects actually stored in the class’s "__dict__". If '
- 'no\n'
- ' class attribute is found, and the object’s class has a\n'
- ' "__getattr__()" method, that is called to satisfy the lookup.\n'
- '\n'
- ' Attribute assignments and deletions update the instance’s\n'
- ' dictionary, never a class’s dictionary. If the class has a\n'
+ ' function object or an unbound user-defined method object whose\n'
+ ' associated class is the class (call it "C") of the instance for\n'
+ ' which the attribute reference was initiated or one of its bases, '
+ 'it\n'
+ ' is transformed into a bound user-defined method object whose\n'
+ ' "im_class" attribute is "C" and whose "im_self" attribute is '
+ 'the\n'
+ ' instance. Static method and class method objects are also\n'
+ ' transformed, as if they had been retrieved from class "C"; see\n'
+ ' above under "Classes". See section Implementing Descriptors for\n'
+ ' another way in which attributes of a class retrieved via its\n'
+ ' instances may differ from the objects actually stored in the\n'
+ ' class\'s "__dict__". If no class attribute is found, and the\n'
+ ' object\'s class has a "__getattr__()" method, that is called to\n'
+ ' satisfy the lookup.\n'
+ '\n'
+ " Attribute assignments and deletions update the instance's\n"
+ " dictionary, never a class's dictionary. If the class has a\n"
' "__setattr__()" or "__delattr__()" method, this is called '
'instead\n'
' of updating the instance dictionary directly.\n'
@@ -11829,23 +10930,21 @@ topics = {'assert': 'The "assert" statement\n'
' Special method names.\n'
'\n'
' Special attributes: "__dict__" is the attribute dictionary;\n'
- ' "__class__" is the instance’s class.\n'
- '\n'
- 'I/O objects (also known as file objects)\n'
- ' A *file object* represents an open file. Various shortcuts are\n'
- ' available to create file objects: the "open()" built-in '
- 'function,\n'
- ' and also "os.popen()", "os.fdopen()", and the "makefile()" '
- 'method\n'
- ' of socket objects (and perhaps by other functions or methods\n'
- ' provided by extension modules).\n'
+ ' "__class__" is the instance\'s class.\n'
'\n'
- ' The objects "sys.stdin", "sys.stdout" and "sys.stderr" are\n'
- ' initialized to file objects corresponding to the interpreter’s\n'
- ' standard input, output and error streams; they are all open in '
- 'text\n'
- ' mode and therefore follow the interface defined by the\n'
- ' "io.TextIOBase" abstract class.\n'
+ 'Files\n'
+ ' A file object represents an open file. File objects are created '
+ 'by\n'
+ ' the "open()" built-in function, and also by "os.popen()",\n'
+ ' "os.fdopen()", and the "makefile()" method of socket objects '
+ '(and\n'
+ ' perhaps by other functions or methods provided by extension\n'
+ ' modules). The objects "sys.stdin", "sys.stdout" and '
+ '"sys.stderr"\n'
+ ' are initialized to file objects corresponding to the '
+ "interpreter's\n"
+ ' standard input, output and error streams. See File Objects for\n'
+ ' complete documentation of file objects.\n'
'\n'
'Internal types\n'
' A few types used internally by the interpreter are exposed to '
@@ -11859,7 +10958,7 @@ topics = {'assert': 'The "assert" statement\n'
' or *bytecode*. The difference between a code object and a\n'
' function object is that the function object contains an '
'explicit\n'
- ' reference to the function’s globals (the module in which it '
+ " reference to the function's globals (the module in which it "
'was\n'
' defined), while a code object contains no context; also the\n'
' default argument values are stored in the function object, '
@@ -11874,36 +10973,33 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
' Special read-only attributes: "co_name" gives the function '
'name;\n'
- ' "co_argcount" is the total number of positional arguments\n'
- ' (including positional-only arguments and arguments with '
- 'default\n'
- ' values); "co_posonlyargcount" is the number of '
- 'positional-only\n'
- ' arguments (including arguments with default values);\n'
- ' "co_kwonlyargcount" is the number of keyword-only arguments\n'
- ' (including arguments with default values); "co_nlocals" is '
- 'the\n'
- ' number of local variables used by the function (including\n'
- ' arguments); "co_varnames" is a tuple containing the names of '
- 'the\n'
- ' local variables (starting with the argument names);\n'
- ' "co_cellvars" is a tuple containing the names of local '
- 'variables\n'
- ' that are referenced by nested functions; "co_freevars" is a\n'
- ' tuple containing the names of free variables; "co_code" is a\n'
- ' string representing the sequence of bytecode instructions;\n'
- ' "co_consts" is a tuple containing the literals used by the\n'
- ' bytecode; "co_names" is a tuple containing the names used by '
+ ' "co_argcount" is the number of positional arguments '
+ '(including\n'
+ ' arguments with default values); "co_nlocals" is the number '
+ 'of\n'
+ ' local variables used by the function (including arguments);\n'
+ ' "co_varnames" is a tuple containing the names of the local\n'
+ ' variables (starting with the argument names); "co_cellvars" '
+ 'is a\n'
+ ' tuple containing the names of local variables that are\n'
+ ' referenced by nested functions; "co_freevars" is a tuple\n'
+ ' containing the names of free variables; "co_code" is a '
+ 'string\n'
+ ' representing the sequence of bytecode instructions; '
+ '"co_consts"\n'
+ ' is a tuple containing the literals used by the bytecode;\n'
+ ' "co_names" is a tuple containing the names used by the '
+ 'bytecode;\n'
+ ' "co_filename" is the filename from which the code was '
+ 'compiled;\n'
+ ' "co_firstlineno" is the first line number of the function;\n'
+ ' "co_lnotab" is a string encoding the mapping from bytecode\n'
+ ' offsets to line numbers (for details see the source code of '
'the\n'
- ' bytecode; "co_filename" is the filename from which the code '
- 'was\n'
- ' compiled; "co_firstlineno" is the first line number of the\n'
- ' function; "co_lnotab" is a string encoding the mapping from\n'
- ' bytecode offsets to line numbers (for details see the source\n'
- ' code of the interpreter); "co_stacksize" is the required '
- 'stack\n'
- ' size (including local variables); "co_flags" is an integer\n'
- ' encoding a number of flags for the interpreter.\n'
+ ' interpreter); "co_stacksize" is the required stack size\n'
+ ' (including local variables); "co_flags" is an integer '
+ 'encoding a\n'
+ ' number of flags for the interpreter.\n'
'\n'
' The following flag bits are defined for "co_flags": bit '
'"0x04"\n'
@@ -11935,9 +11031,7 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
' Frame objects\n'
' Frame objects represent execution frames. They may occur in\n'
- ' traceback objects (see below), and are also passed to '
- 'registered\n'
- ' trace functions.\n'
+ ' traceback objects (see below).\n'
'\n'
' Special read-only attributes: "f_back" is to the previous '
'stack\n'
@@ -11946,68 +11040,49 @@ topics = {'assert': 'The "assert" statement\n'
'this\n'
' frame; "f_locals" is the dictionary used to look up local\n'
' variables; "f_globals" is used for global variables;\n'
- ' "f_builtins" is used for built-in (intrinsic) names; '
- '"f_lasti"\n'
- ' gives the precise instruction (this is an index into the\n'
- ' bytecode string of the code object).\n'
+ ' "f_builtins" is used for built-in (intrinsic) names;\n'
+ ' "f_restricted" is a flag indicating whether the function is\n'
+ ' executing in restricted execution mode; "f_lasti" gives the\n'
+ ' precise instruction (this is an index into the bytecode '
+ 'string\n'
+ ' of the code object).\n'
'\n'
' Special writable attributes: "f_trace", if not "None", is a\n'
- ' function called for various events during code execution '
- '(this\n'
- ' is used by the debugger). Normally an event is triggered for\n'
- ' each new source line - this can be disabled by setting\n'
- ' "f_trace_lines" to "False".\n'
- '\n'
- ' Implementations *may* allow per-opcode events to be requested '
- 'by\n'
- ' setting "f_trace_opcodes" to "True". Note that this may lead '
- 'to\n'
- ' undefined interpreter behaviour if exceptions raised by the\n'
- ' trace function escape to the function being traced.\n'
- '\n'
- ' "f_lineno" is the current line number of the frame — writing '
- 'to\n'
- ' this from within a trace function jumps to the given line '
- '(only\n'
- ' for the bottom-most frame). A debugger can implement a Jump\n'
- ' command (aka Set Next Statement) by writing to f_lineno.\n'
- '\n'
- ' Frame objects support one method:\n'
- '\n'
- ' frame.clear()\n'
- '\n'
- ' This method clears all references to local variables held '
- 'by\n'
- ' the frame. Also, if the frame belonged to a generator, '
+ ' function called at the start of each source code line (this '
+ 'is\n'
+ ' used by the debugger); "f_exc_type", "f_exc_value",\n'
+ ' "f_exc_traceback" represent the last exception raised in the\n'
+ ' parent frame provided another exception was ever raised in '
'the\n'
- ' generator is finalized. This helps break reference '
- 'cycles\n'
- ' involving frame objects (for example when catching an\n'
- ' exception and storing its traceback for later use).\n'
- '\n'
- ' "RuntimeError" is raised if the frame is currently '
- 'executing.\n'
- '\n'
- ' New in version 3.4.\n'
+ ' current frame (in all other cases they are "None"); '
+ '"f_lineno"\n'
+ ' is the current line number of the frame --- writing to this '
+ 'from\n'
+ ' within a trace function jumps to the given line (only for '
+ 'the\n'
+ ' bottom-most frame). A debugger can implement a Jump command\n'
+ ' (aka Set Next Statement) by writing to f_lineno.\n'
'\n'
' Traceback objects\n'
' Traceback objects represent a stack trace of an exception. '
'A\n'
- ' traceback object is implicitly created when an exception '
- 'occurs,\n'
- ' and may also be explicitly created by calling\n'
- ' "types.TracebackType".\n'
- '\n'
- ' For implicitly created tracebacks, when the search for an\n'
- ' exception handler unwinds the execution stack, at each '
- 'unwound\n'
- ' level a traceback object is inserted in front of the current\n'
- ' traceback. When an exception handler is entered, the stack\n'
- ' trace is made available to the program. (See section The try\n'
- ' statement.) It is accessible as the third item of the tuple\n'
- ' returned by "sys.exc_info()", and as the "__traceback__"\n'
- ' attribute of the caught exception.\n'
- '\n'
+ ' traceback object is created when an exception occurs. When '
+ 'the\n'
+ ' search for an exception handler unwinds the execution stack, '
+ 'at\n'
+ ' each unwound level a traceback object is inserted in front '
+ 'of\n'
+ ' the current traceback. When an exception handler is '
+ 'entered,\n'
+ ' the stack trace is made available to the program. (See '
+ 'section\n'
+ ' The try statement.) It is accessible as "sys.exc_traceback", '
+ 'and\n'
+ ' also as the third item of the tuple returned by\n'
+ ' "sys.exc_info()". The latter is the preferred interface, '
+ 'since\n'
+ ' it works correctly when the program is using multiple '
+ 'threads.\n'
' When the program contains no suitable handler, the stack '
'trace\n'
' is written (nicely formatted) to the standard error stream; '
@@ -12016,41 +11091,31 @@ topics = {'assert': 'The "assert" statement\n'
'the\n'
' user as "sys.last_traceback".\n'
'\n'
- ' For explicitly created tracebacks, it is up to the creator '
- 'of\n'
- ' the traceback to determine how the "tb_next" attributes '
- 'should\n'
- ' be linked to form a full stack trace.\n'
- '\n'
- ' Special read-only attributes: "tb_frame" points to the '
- 'execution\n'
- ' frame of the current level; "tb_lineno" gives the line '
- 'number\n'
- ' where the exception occurred; "tb_lasti" indicates the '
- 'precise\n'
- ' instruction. The line number and last instruction in the\n'
- ' traceback may differ from the line number of its frame object '
- 'if\n'
- ' the exception occurred in a "try" statement with no matching\n'
- ' except clause or with a finally clause.\n'
- '\n'
- ' Special writable attribute: "tb_next" is the next level in '
+ ' Special read-only attributes: "tb_next" is the next level in '
'the\n'
' stack trace (towards the frame where the exception occurred), '
'or\n'
- ' "None" if there is no next level.\n'
- '\n'
- ' Changed in version 3.7: Traceback objects can now be '
- 'explicitly\n'
- ' instantiated from Python code, and the "tb_next" attribute '
- 'of\n'
- ' existing instances can be updated.\n'
+ ' "None" if there is no next level; "tb_frame" points to the\n'
+ ' execution frame of the current level; "tb_lineno" gives the '
+ 'line\n'
+ ' number where the exception occurred; "tb_lasti" indicates '
+ 'the\n'
+ ' precise instruction. The line number and last instruction '
+ 'in\n'
+ ' the traceback may differ from the line number of its frame\n'
+ ' object if the exception occurred in a "try" statement with '
+ 'no\n'
+ ' matching except clause or with a finally clause.\n'
'\n'
' Slice objects\n'
- ' Slice objects are used to represent slices for '
- '"__getitem__()"\n'
- ' methods. They are also created by the built-in "slice()"\n'
- ' function.\n'
+ ' Slice objects are used to represent slices when *extended '
+ 'slice\n'
+ ' syntax* is used. This is a slice using two colons, or '
+ 'multiple\n'
+ ' slices or ellipses separated by commas, e.g., "a[i:j:step]",\n'
+ ' "a[i:j, k:l]", or "a[..., i:j]". They are also created by '
+ 'the\n'
+ ' built-in "slice()" function.\n'
'\n'
' Special read-only attributes: "start" is the lower bound; '
'"stop"\n'
@@ -12063,15 +11128,19 @@ topics = {'assert': 'The "assert" statement\n'
' slice.indices(self, length)\n'
'\n'
' This method takes a single integer argument *length* and\n'
- ' computes information about the slice that the slice '
- 'object\n'
- ' would describe if applied to a sequence of *length* '
- 'items.\n'
- ' It returns a tuple of three integers; respectively these '
- 'are\n'
- ' the *start* and *stop* indices and the *step* or stride\n'
- ' length of the slice. Missing or out-of-bounds indices are\n'
- ' handled in a manner consistent with regular slices.\n'
+ ' computes information about the extended slice that the '
+ 'slice\n'
+ ' object would describe if applied to a sequence of '
+ '*length*\n'
+ ' items. It returns a tuple of three integers; '
+ 'respectively\n'
+ ' these are the *start* and *stop* indices and the *step* '
+ 'or\n'
+ ' stride length of the slice. Missing or out-of-bounds '
+ 'indices\n'
+ ' are handled in a manner consistent with regular slices.\n'
+ '\n'
+ ' New in version 2.3.\n'
'\n'
' Static method objects\n'
' Static method objects provide a way of defeating the\n'
@@ -12097,10 +11166,11 @@ topics = {'assert': 'The "assert" statement\n'
' is retrieved from classes and class instances. The behaviour '
'of\n'
' class method objects upon such retrieval is described above,\n'
- ' under “User-defined methods”. Class method objects are '
+ ' under "User-defined methods". Class method objects are '
'created\n'
' by the built-in "classmethod()" constructor.\n',
- 'typesfunctions': 'Functions\n'
+ 'typesfunctions': '\n'
+ 'Functions\n'
'*********\n'
'\n'
'Function objects are created by function definitions. The '
@@ -12117,19 +11187,20 @@ topics = {'assert': 'The "assert" statement\n'
'different object types.\n'
'\n'
'See Function definitions for more information.\n',
- 'typesmapping': 'Mapping Types — "dict"\n'
- '**********************\n'
+ 'typesmapping': '\n'
+ 'Mapping Types --- "dict"\n'
+ '************************\n'
'\n'
'A *mapping* object maps *hashable* values to arbitrary '
'objects.\n'
'Mappings are mutable objects. There is currently only one '
'standard\n'
'mapping type, the *dictionary*. (For other containers see '
- 'the built-\n'
+ 'the built\n'
'in "list", "set", and "tuple" classes, and the "collections" '
'module.)\n'
'\n'
- 'A dictionary’s keys are *almost* arbitrary values. Values '
+ "A dictionary's keys are *almost* arbitrary values. Values "
'that are\n'
'not *hashable*, that is, values containing lists, '
'dictionaries or\n'
@@ -12200,8 +11271,7 @@ topics = {'assert': 'The "assert" statement\n'
" >>> c = dict(zip(['one', 'two', 'three'], [1, 2, 3]))\n"
" >>> d = dict([('two', 2), ('one', 1), ('three', 3)])\n"
" >>> e = dict({'three': 3, 'one': 1, 'two': 2})\n"
- " >>> f = dict({'one': 1, 'three': 3}, two=2)\n"
- ' >>> a == b == c == d == e == f\n'
+ ' >>> a == b == c == d == e\n'
' True\n'
'\n'
' Providing keyword arguments as in the first example only '
@@ -12210,15 +11280,16 @@ topics = {'assert': 'The "assert" statement\n'
'valid keys\n'
' can be used.\n'
'\n'
+ ' New in version 2.2.\n'
+ '\n'
+ ' Changed in version 2.3: Support for building a dictionary '
+ 'from\n'
+ ' keyword arguments added.\n'
+ '\n'
' These are the operations that dictionaries support (and '
'therefore,\n'
' custom mapping types should support too):\n'
'\n'
- ' list(d)\n'
- '\n'
- ' Return a list of all the keys used in the dictionary '
- '*d*.\n'
- '\n'
' len(d)\n'
'\n'
' Return the number of items in the dictionary *d*.\n'
@@ -12259,6 +11330,10 @@ topics = {'assert': 'The "assert" statement\n'
'method is used\n'
' by "collections.defaultdict".\n'
'\n'
+ ' New in version 2.5: Recognition of __missing__ methods '
+ 'of dict\n'
+ ' subclasses.\n'
+ '\n'
' d[key] = value\n'
'\n'
' Set "d[key]" to *value*.\n'
@@ -12273,15 +11348,19 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
' Return "True" if *d* has a key *key*, else "False".\n'
'\n'
+ ' New in version 2.2.\n'
+ '\n'
' key not in d\n'
'\n'
' Equivalent to "not key in d".\n'
'\n'
+ ' New in version 2.2.\n'
+ '\n'
' iter(d)\n'
'\n'
' Return an iterator over the keys of the dictionary. '
'This is a\n'
- ' shortcut for "iter(d.keys())".\n'
+ ' shortcut for "iterkeys()".\n'
'\n'
' clear()\n'
'\n'
@@ -12291,21 +11370,17 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
' Return a shallow copy of the dictionary.\n'
'\n'
- ' classmethod fromkeys(iterable[, value])\n'
+ ' fromkeys(seq[, value])\n'
'\n'
- ' Create a new dictionary with keys from *iterable* and '
- 'values set\n'
- ' to *value*.\n'
+ ' Create a new dictionary with keys from *seq* and '
+ 'values set to\n'
+ ' *value*.\n'
'\n'
' "fromkeys()" is a class method that returns a new '
'dictionary.\n'
- ' *value* defaults to "None". All of the values refer '
- 'to just a\n'
- ' single instance, so it generally doesn’t make sense '
- 'for *value*\n'
- ' to be a mutable object such as an empty list. To get '
- 'distinct\n'
- ' values, use a dict comprehension instead.\n'
+ ' *value* defaults to "None".\n'
+ '\n'
+ ' New in version 2.3.\n'
'\n'
' get(key[, default])\n'
'\n'
@@ -12315,16 +11390,90 @@ topics = {'assert': 'The "assert" statement\n'
'"None", so\n'
' that this method never raises a "KeyError".\n'
'\n'
+ ' has_key(key)\n'
+ '\n'
+ ' Test for the presence of *key* in the dictionary. '
+ '"has_key()"\n'
+ ' is deprecated in favor of "key in d".\n'
+ '\n'
' items()\n'
'\n'
- ' Return a new view of the dictionary’s items ("(key, '
- 'value)"\n'
- ' pairs). See the documentation of view objects.\n'
+ ' Return a copy of the dictionary\'s list of "(key, '
+ 'value)" pairs.\n'
+ '\n'
+ ' **CPython implementation detail:** Keys and values are '
+ 'listed in\n'
+ ' an arbitrary order which is non-random, varies across '
+ 'Python\n'
+ " implementations, and depends on the dictionary's "
+ 'history of\n'
+ ' insertions and deletions.\n'
+ '\n'
+ ' If "items()", "keys()", "values()", "iteritems()", '
+ '"iterkeys()",\n'
+ ' and "itervalues()" are called with no intervening '
+ 'modifications\n'
+ ' to the dictionary, the lists will directly '
+ 'correspond. This\n'
+ ' allows the creation of "(value, key)" pairs using '
+ '"zip()":\n'
+ ' "pairs = zip(d.values(), d.keys())". The same '
+ 'relationship\n'
+ ' holds for the "iterkeys()" and "itervalues()" methods: '
+ '"pairs =\n'
+ ' zip(d.itervalues(), d.iterkeys())" provides the same '
+ 'value for\n'
+ ' "pairs". Another way to create the same list is "pairs '
+ '= [(v, k)\n'
+ ' for (k, v) in d.iteritems()]".\n'
+ '\n'
+ ' iteritems()\n'
+ '\n'
+ ' Return an iterator over the dictionary\'s "(key, '
+ 'value)" pairs.\n'
+ ' See the note for "dict.items()".\n'
+ '\n'
+ ' Using "iteritems()" while adding or deleting entries '
+ 'in the\n'
+ ' dictionary may raise a "RuntimeError" or fail to '
+ 'iterate over\n'
+ ' all entries.\n'
+ '\n'
+ ' New in version 2.2.\n'
+ '\n'
+ ' iterkeys()\n'
+ '\n'
+ " Return an iterator over the dictionary's keys. See "
+ 'the note for\n'
+ ' "dict.items()".\n'
+ '\n'
+ ' Using "iterkeys()" while adding or deleting entries in '
+ 'the\n'
+ ' dictionary may raise a "RuntimeError" or fail to '
+ 'iterate over\n'
+ ' all entries.\n'
+ '\n'
+ ' New in version 2.2.\n'
+ '\n'
+ ' itervalues()\n'
+ '\n'
+ " Return an iterator over the dictionary's values. See "
+ 'the note\n'
+ ' for "dict.items()".\n'
+ '\n'
+ ' Using "itervalues()" while adding or deleting entries '
+ 'in the\n'
+ ' dictionary may raise a "RuntimeError" or fail to '
+ 'iterate over\n'
+ ' all entries.\n'
+ '\n'
+ ' New in version 2.2.\n'
'\n'
' keys()\n'
'\n'
- ' Return a new view of the dictionary’s keys. See the\n'
- ' documentation of view objects.\n'
+ " Return a copy of the dictionary's list of keys. See "
+ 'the note\n'
+ ' for "dict.items()".\n'
'\n'
' pop(key[, default])\n'
'\n'
@@ -12334,29 +11483,19 @@ topics = {'assert': 'The "assert" statement\n'
'*key* is\n'
' not in the dictionary, a "KeyError" is raised.\n'
'\n'
+ ' New in version 2.3.\n'
+ '\n'
' popitem()\n'
'\n'
- ' Remove and return a "(key, value)" pair from the '
- 'dictionary.\n'
- ' Pairs are returned in LIFO (last-in, first-out) '
- 'order.\n'
+ ' Remove and return an arbitrary "(key, value)" pair '
+ 'from the\n'
+ ' dictionary.\n'
'\n'
' "popitem()" is useful to destructively iterate over a\n'
' dictionary, as often used in set algorithms. If the '
'dictionary\n'
' is empty, calling "popitem()" raises a "KeyError".\n'
'\n'
- ' Changed in version 3.7: LIFO order is now guaranteed. '
- 'In prior\n'
- ' versions, "popitem()" would return an arbitrary '
- 'key/value pair.\n'
- '\n'
- ' reversed(d)\n'
- '\n'
- ' Return a reverse iterator over the keys of the '
- 'dictionary. This\n'
- ' is a shortcut for "reversed(d.keys())".\n'
- '\n'
' setdefault(key[, default])\n'
'\n'
' If *key* is in the dictionary, return its value. If '
@@ -12381,83 +11520,55 @@ topics = {'assert': 'The "assert" statement\n'
'"d.update(red=1,\n'
' blue=2)".\n'
'\n'
+ ' Changed in version 2.4: Allowed the argument to be an '
+ 'iterable\n'
+ ' of key/value pairs and allowed keyword arguments.\n'
+ '\n'
' values()\n'
'\n'
- ' Return a new view of the dictionary’s values. See '
- 'the\n'
+ " Return a copy of the dictionary's list of values. See "
+ 'the note\n'
+ ' for "dict.items()".\n'
+ '\n'
+ ' viewitems()\n'
+ '\n'
+ ' Return a new view of the dictionary\'s items ("(key, '
+ 'value)"\n'
+ ' pairs). See below for documentation of view objects.\n'
+ '\n'
+ ' New in version 2.7.\n'
+ '\n'
+ ' viewkeys()\n'
+ '\n'
+ " Return a new view of the dictionary's keys. See below "
+ 'for\n'
' documentation of view objects.\n'
'\n'
- ' An equality comparison between one "dict.values()" '
- 'view and\n'
- ' another will always return "False". This also applies '
- 'when\n'
- ' comparing "dict.values()" to itself:\n'
+ ' New in version 2.7.\n'
+ '\n'
+ ' viewvalues()\n'
'\n'
- " >>> d = {'a': 1}\n"
- ' >>> d.values() == d.values()\n'
- ' False\n'
+ " Return a new view of the dictionary's values. See "
+ 'below for\n'
+ ' documentation of view objects.\n'
+ '\n'
+ ' New in version 2.7.\n'
'\n'
' Dictionaries compare equal if and only if they have the '
'same "(key,\n'
- ' value)" pairs (regardless of ordering). Order comparisons '
- '(‘<’,\n'
- ' ‘<=’, ‘>=’, ‘>’) raise "TypeError".\n'
- '\n'
- ' Dictionaries preserve insertion order. Note that '
- 'updating a key\n'
- ' does not affect the order. Keys added after deletion are '
- 'inserted\n'
- ' at the end.\n'
- '\n'
- ' >>> d = {"one": 1, "two": 2, "three": 3, "four": 4}\n'
- ' >>> d\n'
- " {'one': 1, 'two': 2, 'three': 3, 'four': 4}\n"
- ' >>> list(d)\n'
- " ['one', 'two', 'three', 'four']\n"
- ' >>> list(d.values())\n'
- ' [1, 2, 3, 4]\n'
- ' >>> d["one"] = 42\n'
- ' >>> d\n'
- " {'one': 42, 'two': 2, 'three': 3, 'four': 4}\n"
- ' >>> del d["two"]\n'
- ' >>> d["two"] = None\n'
- ' >>> d\n'
- " {'one': 42, 'three': 3, 'four': 4, 'two': None}\n"
- '\n'
- ' Changed in version 3.7: Dictionary order is guaranteed to '
- 'be\n'
- ' insertion order. This behavior was an implementation '
- 'detail of\n'
- ' CPython from 3.6.\n'
- '\n'
- ' Dictionaries and dictionary views are reversible.\n'
- '\n'
- ' >>> d = {"one": 1, "two": 2, "three": 3, "four": 4}\n'
- ' >>> d\n'
- " {'one': 1, 'two': 2, 'three': 3, 'four': 4}\n"
- ' >>> list(reversed(d))\n'
- " ['four', 'three', 'two', 'one']\n"
- ' >>> list(reversed(d.values()))\n'
- ' [4, 3, 2, 1]\n'
- ' >>> list(reversed(d.items()))\n'
- " [('four', 4), ('three', 3), ('two', 2), ('one', 1)]\n"
- '\n'
- ' Changed in version 3.8: Dictionaries are now reversible.\n'
- '\n'
- 'See also: "types.MappingProxyType" can be used to create a '
- 'read-only\n'
- ' view of a "dict".\n'
+ ' value)" pairs.\n'
'\n'
'\n'
'Dictionary view objects\n'
'=======================\n'
'\n'
- 'The objects returned by "dict.keys()", "dict.values()" and\n'
- '"dict.items()" are *view objects*. They provide a dynamic '
- 'view on the\n'
- 'dictionary’s entries, which means that when the dictionary '
- 'changes,\n'
- 'the view reflects these changes.\n'
+ 'The objects returned by "dict.viewkeys()", '
+ '"dict.viewvalues()" and\n'
+ '"dict.viewitems()" are *view objects*. They provide a '
+ 'dynamic view on\n'
+ "the dictionary's entries, which means that when the "
+ 'dictionary\n'
+ 'changes, the view reflects these changes.\n'
'\n'
'Dictionary views can be iterated over to yield their '
'respective data,\n'
@@ -12473,62 +11584,80 @@ topics = {'assert': 'The "assert" statement\n'
'(represented as\n'
' tuples of "(key, value)") in the dictionary.\n'
'\n'
- ' Keys and values are iterated over in insertion order. '
- 'This allows\n'
- ' the creation of "(value, key)" pairs using "zip()": '
- '"pairs =\n'
- ' zip(d.values(), d.keys())". Another way to create the '
- 'same list is\n'
- ' "pairs = [(v, k) for (k, v) in d.items()]".\n'
+ ' Keys and values are iterated over in an arbitrary order '
+ 'which is\n'
+ ' non-random, varies across Python implementations, and '
+ 'depends on\n'
+ " the dictionary's history of insertions and deletions. If "
+ 'keys,\n'
+ ' values and items views are iterated over with no '
+ 'intervening\n'
+ ' modifications to the dictionary, the order of items will '
+ 'directly\n'
+ ' correspond. This allows the creation of "(value, key)" '
+ 'pairs using\n'
+ ' "zip()": "pairs = zip(d.values(), d.keys())". Another '
+ 'way to\n'
+ ' create the same list is "pairs = [(v, k) for (k, v) in '
+ 'd.items()]".\n'
'\n'
' Iterating views while adding or deleting entries in the '
'dictionary\n'
' may raise a "RuntimeError" or fail to iterate over all '
'entries.\n'
'\n'
- ' Changed in version 3.7: Dictionary order is guaranteed to '
- 'be\n'
- ' insertion order.\n'
- '\n'
'x in dictview\n'
'\n'
- ' Return "True" if *x* is in the underlying dictionary’s '
+ ' Return "True" if *x* is in the underlying dictionary\'s '
'keys, values\n'
' or items (in the latter case, *x* should be a "(key, '
'value)"\n'
' tuple).\n'
'\n'
- 'reversed(dictview)\n'
+ 'Keys views are set-like since their entries are unique and '
+ 'hashable.\n'
+ 'If all values are hashable, so that (key, value) pairs are '
+ 'unique and\n'
+ 'hashable, then the items view is also set-like. (Values '
+ 'views are not\n'
+ 'treated as set-like since the entries are generally not '
+ 'unique.) Then\n'
+ 'these set operations are available ("other" refers either to '
+ 'another\n'
+ 'view or a set):\n'
'\n'
- ' Return a reverse iterator over the keys, values or items '
- 'of the\n'
- ' dictionary. The view will be iterated in reverse order of '
- 'the\n'
- ' insertion.\n'
+ 'dictview & other\n'
'\n'
- ' Changed in version 3.8: Dictionary views are now '
- 'reversible.\n'
+ ' Return the intersection of the dictview and the other '
+ 'object as a\n'
+ ' new set.\n'
'\n'
- 'Keys views are set-like since their entries are unique and '
- 'hashable.\n'
- 'If all values are hashable, so that "(key, value)" pairs are '
- 'unique\n'
- 'and hashable, then the items view is also set-like. (Values '
- 'views are\n'
- 'not treated as set-like since the entries are generally not '
- 'unique.)\n'
- 'For set-like views, all of the operations defined for the '
- 'abstract\n'
- 'base class "collections.abc.Set" are available (for example, '
- '"==",\n'
- '"<", or "^").\n'
+ 'dictview | other\n'
+ '\n'
+ ' Return the union of the dictview and the other object as '
+ 'a new set.\n'
+ '\n'
+ 'dictview - other\n'
+ '\n'
+ ' Return the difference between the dictview and the other '
+ 'object\n'
+ " (all elements in *dictview* that aren't in *other*) as a "
+ 'new set.\n'
+ '\n'
+ 'dictview ^ other\n'
+ '\n'
+ ' Return the symmetric difference (all elements either in '
+ '*dictview*\n'
+ ' or *other*, but not in both) of the dictview and the '
+ 'other object\n'
+ ' as a new set.\n'
'\n'
'An example of dictionary view usage:\n'
'\n'
" >>> dishes = {'eggs': 2, 'sausage': 1, 'bacon': 1, "
"'spam': 500}\n"
- ' >>> keys = dishes.keys()\n'
- ' >>> values = dishes.values()\n'
+ ' >>> keys = dishes.viewkeys()\n'
+ ' >>> values = dishes.viewvalues()\n'
'\n'
' >>> # iteration\n'
' >>> n = 0\n'
@@ -12537,10 +11666,10 @@ topics = {'assert': 'The "assert" statement\n'
' >>> print(n)\n'
' 504\n'
'\n'
- ' >>> # keys and values are iterated over in the same order '
- '(insertion order)\n'
+ ' >>> # keys and values are iterated over in the same '
+ 'order\n'
' >>> list(keys)\n'
- " ['eggs', 'sausage', 'bacon', 'spam']\n"
+ " ['eggs', 'bacon', 'sausage', 'spam']\n"
' >>> list(values)\n'
' [2, 1, 1, 500]\n'
'\n'
@@ -12548,14 +11677,13 @@ topics = {'assert': 'The "assert" statement\n'
" >>> del dishes['eggs']\n"
" >>> del dishes['sausage']\n"
' >>> list(keys)\n'
- " ['bacon', 'spam']\n"
+ " ['spam', 'bacon']\n"
'\n'
' >>> # set operations\n'
" >>> keys & {'eggs', 'bacon', 'salad'}\n"
- " {'bacon'}\n"
- " >>> keys ^ {'sausage', 'juice'}\n"
- " {'juice', 'sausage', 'bacon', 'spam'}\n",
- 'typesmethods': 'Methods\n'
+ " {'bacon'}\n",
+ 'typesmethods': '\n'
+ 'Methods\n'
'*******\n'
'\n'
'Methods are functions that are called using the attribute '
@@ -12566,35 +11694,43 @@ topics = {'assert': 'The "assert" statement\n'
'with the\n'
'types that support them.\n'
'\n'
- 'If you access a method (a function defined in a class '
- 'namespace)\n'
- 'through an instance, you get a special object: a *bound '
- 'method* (also\n'
- 'called *instance method*) object. When called, it will add '
- 'the "self"\n'
- 'argument to the argument list. Bound methods have two '
- 'special read-\n'
- 'only attributes: "m.__self__" is the object on which the '
+ 'The implementation adds two special read-only attributes to '
+ 'class\n'
+ 'instance methods: "m.im_self" is the object on which the '
'method\n'
- 'operates, and "m.__func__" is the function implementing the '
+ 'operates, and "m.im_func" is the function implementing the '
'method.\n'
'Calling "m(arg-1, arg-2, ..., arg-n)" is completely '
'equivalent to\n'
- 'calling "m.__func__(m.__self__, arg-1, arg-2, ..., arg-n)".\n'
- '\n'
- 'Like function objects, bound method objects support getting '
+ 'calling "m.im_func(m.im_self, arg-1, arg-2, ..., arg-n)".\n'
+ '\n'
+ 'Class instance methods are either *bound* or *unbound*, '
+ 'referring to\n'
+ 'whether the method was accessed through an instance or a '
+ 'class,\n'
+ 'respectively. When a method is unbound, its "im_self" '
+ 'attribute will\n'
+ 'be "None" and if called, an explicit "self" object must be '
+ 'passed as\n'
+ 'the first argument. In this case, "self" must be an '
+ 'instance of the\n'
+ "unbound method's class (or a subclass of that class), "
+ 'otherwise a\n'
+ '"TypeError" is raised.\n'
+ '\n'
+ 'Like function objects, methods objects support getting '
'arbitrary\n'
- 'attributes. However, since method attributes are actually '
+ 'attributes. However, since method attributes are actually '
'stored on\n'
- 'the underlying function object ("meth.__func__"), setting '
+ 'the underlying function object ("meth.im_func"), setting '
'method\n'
- 'attributes on bound methods is disallowed. Attempting to '
- 'set an\n'
- 'attribute on a method results in an "AttributeError" being '
- 'raised. In\n'
- 'order to set a method attribute, you need to explicitly set '
- 'it on the\n'
- 'underlying function object:\n'
+ 'attributes on either bound or unbound methods is '
+ 'disallowed.\n'
+ 'Attempting to set an attribute on a method results in an\n'
+ '"AttributeError" being raised. In order to set a method '
+ 'attribute,\n'
+ 'you need to explicitly set it on the underlying function '
+ 'object:\n'
'\n'
' >>> class C:\n'
' ... def method(self):\n'
@@ -12605,20 +11741,21 @@ topics = {'assert': 'The "assert" statement\n'
'the method\n'
' Traceback (most recent call last):\n'
' File "<stdin>", line 1, in <module>\n'
- " AttributeError: 'method' object has no attribute "
+ " AttributeError: 'instancemethod' object has no attribute "
"'whoami'\n"
- " >>> c.method.__func__.whoami = 'my name is method'\n"
+ " >>> c.method.im_func.whoami = 'my name is method'\n"
' >>> c.method.whoami\n'
" 'my name is method'\n"
'\n'
'See The standard type hierarchy for more information.\n',
- 'typesmodules': 'Modules\n'
+ 'typesmodules': '\n'
+ 'Modules\n'
'*******\n'
'\n'
'The only special operation on a module is attribute access: '
'"m.name",\n'
'where *m* is a module and *name* accesses a name defined in '
- '*m*’s\n'
+ "*m*'s\n"
'symbol table. Module attributes can be assigned to. (Note '
'that the\n'
'"import" statement is not, strictly speaking, an operation '
@@ -12631,14 +11768,14 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
'A special attribute of every module is "__dict__". This is '
'the\n'
- 'dictionary containing the module’s symbol table. Modifying '
+ "dictionary containing the module's symbol table. Modifying "
'this\n'
- 'dictionary will actually change the module’s symbol table, '
+ "dictionary will actually change the module's symbol table, "
'but direct\n'
'assignment to the "__dict__" attribute is not possible (you '
'can write\n'
'"m.__dict__[\'a\'] = 1", which defines "m.a" to be "1", but '
- 'you can’t\n'
+ "you can't\n"
'write "m.__dict__ = {}"). Modifying "__dict__" directly is '
'not\n'
'recommended.\n'
@@ -12649,117 +11786,145 @@ topics = {'assert': 'The "assert" statement\n'
'written as\n'
'"<module \'os\' from '
'\'/usr/local/lib/pythonX.Y/os.pyc\'>".\n',
- 'typesseq': 'Sequence Types — "list", "tuple", "range"\n'
- '*****************************************\n'
- '\n'
- 'There are three basic sequence types: lists, tuples, and range\n'
- 'objects. Additional sequence types tailored for processing of '
- 'binary\n'
- 'data and text strings are described in dedicated sections.\n'
+ 'typesseq': '\n'
+ 'Sequence Types --- "str", "unicode", "list", "tuple", '
+ '"bytearray", "buffer", "xrange"\n'
+ '*************************************************************************************\n'
'\n'
+ 'There are seven sequence types: strings, Unicode strings, '
+ 'lists,\n'
+ 'tuples, bytearrays, buffers, and xrange objects.\n'
'\n'
- 'Common Sequence Operations\n'
- '==========================\n'
+ 'For other containers see the built in "dict" and "set" classes, '
+ 'and\n'
+ 'the "collections" module.\n'
+ '\n'
+ 'String literals are written in single or double quotes: '
+ '"\'xyzzy\'",\n'
+ '""frobozz"". See String literals for more about string '
+ 'literals.\n'
+ 'Unicode strings are much like strings, but are specified in the '
+ 'syntax\n'
+ 'using a preceding "\'u\'" character: "u\'abc\'", "u"def"". In '
+ 'addition to\n'
+ 'the functionality described here, there are also '
+ 'string-specific\n'
+ 'methods described in the String Methods section. Lists are '
+ 'constructed\n'
+ 'with square brackets, separating items with commas: "[a, b, '
+ 'c]".\n'
+ 'Tuples are constructed by the comma operator (not within square\n'
+ 'brackets), with or without enclosing parentheses, but an empty '
+ 'tuple\n'
+ 'must have the enclosing parentheses, such as "a, b, c" or "()". '
+ 'A\n'
+ 'single item tuple must have a trailing comma, such as "(d,)".\n'
+ '\n'
+ 'Bytearray objects are created with the built-in function\n'
+ '"bytearray()".\n'
+ '\n'
+ 'Buffer objects are not directly supported by Python syntax, but '
+ 'can be\n'
+ 'created by calling the built-in function "buffer()". They '
+ "don't\n"
+ 'support concatenation or repetition.\n'
+ '\n'
+ 'Objects of type xrange are similar to buffers in that there is '
+ 'no\n'
+ 'specific syntax to create them, but they are created using the\n'
+ '"xrange()" function. They don\'t support slicing, concatenation '
+ 'or\n'
+ 'repetition, and using "in", "not in", "min()" or "max()" on them '
+ 'is\n'
+ 'inefficient.\n'
'\n'
- 'The operations in the following table are supported by most '
- 'sequence\n'
- 'types, both mutable and immutable. The '
- '"collections.abc.Sequence" ABC\n'
- 'is provided to make it easier to correctly implement these '
- 'operations\n'
- 'on custom sequence types.\n'
+ 'Most sequence types support the following operations. The "in" '
+ 'and\n'
+ '"not in" operations have the same priorities as the comparison\n'
+ 'operations. The "+" and "*" operations have the same priority '
+ 'as the\n'
+ 'corresponding numeric operations. [3] Additional methods are '
+ 'provided\n'
+ 'for Mutable Sequence Types.\n'
'\n'
'This table lists the sequence operations sorted in ascending '
'priority.\n'
- 'In the table, *s* and *t* are sequences of the same type, *n*, '
- '*i*,\n'
- '*j* and *k* are integers and *x* is an arbitrary object that '
- 'meets any\n'
- 'type and value restrictions imposed by *s*.\n'
- '\n'
- 'The "in" and "not in" operations have the same priorities as '
- 'the\n'
- 'comparison operations. The "+" (concatenation) and "*" '
- '(repetition)\n'
- 'operations have the same priority as the corresponding numeric\n'
- 'operations. [3]\n'
- '\n'
- '+----------------------------+----------------------------------+------------+\n'
- '| Operation | Result '
- '| Notes |\n'
- '|============================|==================================|============|\n'
- '| "x in s" | "True" if an item of *s* is '
- '| (1) |\n'
- '| | equal to *x*, else "False" '
+ 'In the table, *s* and *t* are sequences of the same type; *n*, '
+ '*i* and\n'
+ '*j* are integers:\n'
+ '\n'
+ '+--------------------+----------------------------------+------------+\n'
+ '| Operation | Result | '
+ 'Notes |\n'
+ '+====================+==================================+============+\n'
+ '| "x in s" | "True" if an item of *s* is | '
+ '(1) |\n'
+ '| | equal to *x*, else "False" '
'| |\n'
- '+----------------------------+----------------------------------+------------+\n'
- '| "x not in s" | "False" if an item of *s* is '
- '| (1) |\n'
- '| | equal to *x*, else "True" '
+ '+--------------------+----------------------------------+------------+\n'
+ '| "x not in s" | "False" if an item of *s* is | '
+ '(1) |\n'
+ '| | equal to *x*, else "True" '
'| |\n'
- '+----------------------------+----------------------------------+------------+\n'
- '| "s + t" | the concatenation of *s* and *t* '
- '| (6)(7) |\n'
- '+----------------------------+----------------------------------+------------+\n'
- '| "s * n" or "n * s" | equivalent to adding *s* to '
- '| (2)(7) |\n'
- '| | itself *n* times '
+ '+--------------------+----------------------------------+------------+\n'
+ '| "s + t" | the concatenation of *s* and *t* | '
+ '(6) |\n'
+ '+--------------------+----------------------------------+------------+\n'
+ '| "s * n, n * s" | equivalent to adding *s* to | '
+ '(2) |\n'
+ '| | itself *n* times '
'| |\n'
- '+----------------------------+----------------------------------+------------+\n'
- '| "s[i]" | *i*th item of *s*, origin 0 '
- '| (3) |\n'
- '+----------------------------+----------------------------------+------------+\n'
- '| "s[i:j]" | slice of *s* from *i* to *j* '
- '| (3)(4) |\n'
- '+----------------------------+----------------------------------+------------+\n'
- '| "s[i:j:k]" | slice of *s* from *i* to *j* '
- '| (3)(5) |\n'
- '| | with step *k* '
+ '+--------------------+----------------------------------+------------+\n'
+ '| "s[i]" | *i*th item of *s*, origin 0 | '
+ '(3) |\n'
+ '+--------------------+----------------------------------+------------+\n'
+ '| "s[i:j]" | slice of *s* from *i* to *j* | '
+ '(3)(4) |\n'
+ '+--------------------+----------------------------------+------------+\n'
+ '| "s[i:j:k]" | slice of *s* from *i* to *j* | '
+ '(3)(5) |\n'
+ '| | with step *k* '
'| |\n'
- '+----------------------------+----------------------------------+------------+\n'
- '| "len(s)" | length of *s* '
+ '+--------------------+----------------------------------+------------+\n'
+ '| "len(s)" | length of *s* '
'| |\n'
- '+----------------------------+----------------------------------+------------+\n'
- '| "min(s)" | smallest item of *s* '
+ '+--------------------+----------------------------------+------------+\n'
+ '| "min(s)" | smallest item of *s* '
'| |\n'
- '+----------------------------+----------------------------------+------------+\n'
- '| "max(s)" | largest item of *s* '
+ '+--------------------+----------------------------------+------------+\n'
+ '| "max(s)" | largest item of *s* '
'| |\n'
- '+----------------------------+----------------------------------+------------+\n'
- '| "s.index(x[, i[, j]])" | index of the first occurrence of '
- '| (8) |\n'
- '| | *x* in *s* (at or after index '
+ '+--------------------+----------------------------------+------------+\n'
+ '| "s.index(x)" | index of the first occurrence of '
'| |\n'
- '| | *i* and before index *j*) '
+ '| | *x* in *s* '
'| |\n'
- '+----------------------------+----------------------------------+------------+\n'
- '| "s.count(x)" | total number of occurrences of '
+ '+--------------------+----------------------------------+------------+\n'
+ '| "s.count(x)" | total number of occurrences of '
'| |\n'
- '| | *x* in *s* '
+ '| | *x* in *s* '
'| |\n'
- '+----------------------------+----------------------------------+------------+\n'
- '\n'
- 'Sequences of the same type also support comparisons. In '
- 'particular,\n'
- 'tuples and lists are compared lexicographically by comparing\n'
- 'corresponding elements. This means that to compare equal, every\n'
- 'element must compare equal and the two sequences must be of the '
- 'same\n'
- 'type and have the same length. (For full details see '
- 'Comparisons in\n'
- 'the language reference.)\n'
+ '+--------------------+----------------------------------+------------+\n'
'\n'
- 'Notes:\n'
+ 'Sequence types also support comparisons. In particular, tuples '
+ 'and\n'
+ 'lists are compared lexicographically by comparing corresponding\n'
+ 'elements. This means that to compare equal, every element must '
+ 'compare\n'
+ 'equal and the two sequences must be of the same type and have '
+ 'the same\n'
+ 'length. (For full details see Comparisons in the language '
+ 'reference.)\n'
'\n'
- '1. While the "in" and "not in" operations are used only for '
- 'simple\n'
- ' containment testing in the general case, some specialised '
- 'sequences\n'
- ' (such as "str", "bytes" and "bytearray") also use them for\n'
- ' subsequence testing:\n'
+ 'Notes:\n'
'\n'
- ' >>> "gg" in "eggs"\n'
- ' True\n'
+ '1. When *s* is a string or Unicode string object the "in" and '
+ '"not\n'
+ ' in" operations act like a substring test. In Python '
+ 'versions\n'
+ ' before 2.3, *x* had to be a string of length 1. In Python 2.3 '
+ 'and\n'
+ ' beyond, *x* may be a string of any length.\n'
'\n'
'2. Values of *n* less than "0" are treated as "0" (which yields '
'an\n'
@@ -12769,12 +11934,12 @@ topics = {'assert': 'The "assert" statement\n'
'times.\n'
' This often haunts new Python programmers; consider:\n'
'\n'
- ' >>> lists = [[]] * 3\n'
- ' >>> lists\n'
- ' [[], [], []]\n'
- ' >>> lists[0].append(3)\n'
- ' >>> lists\n'
- ' [[3], [3], [3]]\n'
+ ' >>> lists = [[]] * 3\n'
+ ' >>> lists\n'
+ ' [[], [], []]\n'
+ ' >>> lists[0].append(3)\n'
+ ' >>> lists\n'
+ ' [[3], [3], [3]]\n'
'\n'
' What has happened is that "[[]]" is a one-element list '
'containing\n'
@@ -12784,12 +11949,12 @@ topics = {'assert': 'The "assert" statement\n'
' "lists" modifies this single list. You can create a list of\n'
' different lists this way:\n'
'\n'
- ' >>> lists = [[] for i in range(3)]\n'
- ' >>> lists[0].append(3)\n'
- ' >>> lists[1].append(5)\n'
- ' >>> lists[2].append(7)\n'
- ' >>> lists\n'
- ' [[3], [5], [7]]\n'
+ ' >>> lists = [[] for i in range(3)]\n'
+ ' >>> lists[0].append(3)\n'
+ ' >>> lists[1].append(5)\n'
+ ' >>> lists[2].append(7)\n'
+ ' >>> lists\n'
+ ' [[3], [5], [7]]\n'
'\n'
' Further explanation is available in the FAQ entry How do I '
'create a\n'
@@ -12824,99 +11989,981 @@ topics = {'assert': 'The "assert" statement\n'
'*j* are\n'
' reduced to "len(s) - 1" if they are greater. If *i* or *j* '
'are\n'
- ' omitted or "None", they become “end” values (which end '
+ ' omitted or "None", they become "end" values (which end '
'depends on\n'
' the sign of *k*). Note, *k* cannot be zero. If *k* is '
'"None", it\n'
' is treated like "1".\n'
'\n'
- '6. Concatenating immutable sequences always results in a new\n'
- ' object. This means that building up a sequence by repeated\n'
- ' concatenation will have a quadratic runtime cost in the '
- 'total\n'
- ' sequence length. To get a linear runtime cost, you must '
- 'switch to\n'
- ' one of the alternatives below:\n'
+ '6. **CPython implementation detail:** If *s* and *t* are both\n'
+ ' strings, some Python implementations such as CPython can '
+ 'usually\n'
+ ' perform an in-place optimization for assignments of the form '
+ '"s = s\n'
+ ' + t" or "s += t". When applicable, this optimization makes\n'
+ ' quadratic run-time much less likely. This optimization is '
+ 'both\n'
+ ' version and implementation dependent. For performance '
+ 'sensitive\n'
+ ' code, it is preferable to use the "str.join()" method which '
+ 'assures\n'
+ ' consistent linear concatenation performance across versions '
+ 'and\n'
+ ' implementations.\n'
+ '\n'
+ ' Changed in version 2.4: Formerly, string concatenation never\n'
+ ' occurred in-place.\n'
+ '\n'
'\n'
- ' * if concatenating "str" objects, you can build a list and '
+ 'String Methods\n'
+ '==============\n'
+ '\n'
+ 'Below are listed the string methods which both 8-bit strings '
+ 'and\n'
+ 'Unicode objects support. Some of them are also available on\n'
+ '"bytearray" objects.\n'
+ '\n'
+ "In addition, Python's strings support the sequence type methods\n"
+ 'described in the Sequence Types --- str, unicode, list, tuple,\n'
+ 'bytearray, buffer, xrange section. To output formatted strings '
'use\n'
- ' "str.join()" at the end or else write to an "io.StringIO"\n'
- ' instance and retrieve its value when complete\n'
- '\n'
- ' * if concatenating "bytes" objects, you can similarly use\n'
- ' "bytes.join()" or "io.BytesIO", or you can do in-place\n'
- ' concatenation with a "bytearray" object. "bytearray" '
- 'objects are\n'
- ' mutable and have an efficient overallocation mechanism\n'
- '\n'
- ' * if concatenating "tuple" objects, extend a "list" instead\n'
- '\n'
- ' * for other types, investigate the relevant class '
- 'documentation\n'
- '\n'
- '7. Some sequence types (such as "range") only support item\n'
- ' sequences that follow specific patterns, and hence don’t '
- 'support\n'
- ' sequence concatenation or repetition.\n'
- '\n'
- '8. "index" raises "ValueError" when *x* is not found in *s*. '
- 'Not\n'
- ' all implementations support passing the additional arguments '
- '*i*\n'
- ' and *j*. These arguments allow efficient searching of '
- 'subsections\n'
- ' of the sequence. Passing the extra arguments is roughly '
- 'equivalent\n'
- ' to using "s[i:j].index(x)", only without copying any data and '
- 'with\n'
- ' the returned index being relative to the start of the '
+ 'template strings or the "%" operator described in the String\n'
+ 'Formatting Operations section. Also, see the "re" module for '
+ 'string\n'
+ 'functions based on regular expressions.\n'
+ '\n'
+ 'str.capitalize()\n'
+ '\n'
+ ' Return a copy of the string with its first character '
+ 'capitalized\n'
+ ' and the rest lowercased.\n'
+ '\n'
+ ' For 8-bit strings, this method is locale-dependent.\n'
+ '\n'
+ 'str.center(width[, fillchar])\n'
+ '\n'
+ ' Return centered in a string of length *width*. Padding is '
+ 'done\n'
+ ' using the specified *fillchar* (default is a space).\n'
+ '\n'
+ ' Changed in version 2.4: Support for the *fillchar* argument.\n'
+ '\n'
+ 'str.count(sub[, start[, end]])\n'
+ '\n'
+ ' Return the number of non-overlapping occurrences of substring '
+ '*sub*\n'
+ ' in the range [*start*, *end*]. Optional arguments *start* '
+ 'and\n'
+ ' *end* are interpreted as in slice notation.\n'
+ '\n'
+ 'str.decode([encoding[, errors]])\n'
+ '\n'
+ ' Decodes the string using the codec registered for '
+ '*encoding*.\n'
+ ' *encoding* defaults to the default string encoding. *errors* '
+ 'may\n'
+ ' be given to set a different error handling scheme. The '
+ 'default is\n'
+ ' "\'strict\'", meaning that encoding errors raise '
+ '"UnicodeError".\n'
+ ' Other possible values are "\'ignore\'", "\'replace\'" and any '
+ 'other\n'
+ ' name registered via "codecs.register_error()", see section '
+ 'Codec\n'
+ ' Base Classes.\n'
+ '\n'
+ ' New in version 2.2.\n'
+ '\n'
+ ' Changed in version 2.3: Support for other error handling '
+ 'schemes\n'
+ ' added.\n'
+ '\n'
+ ' Changed in version 2.7: Support for keyword arguments added.\n'
+ '\n'
+ 'str.encode([encoding[, errors]])\n'
+ '\n'
+ ' Return an encoded version of the string. Default encoding is '
+ 'the\n'
+ ' current default string encoding. *errors* may be given to '
+ 'set a\n'
+ ' different error handling scheme. The default for *errors* '
+ 'is\n'
+ ' "\'strict\'", meaning that encoding errors raise a '
+ '"UnicodeError".\n'
+ ' Other possible values are "\'ignore\'", "\'replace\'",\n'
+ ' "\'xmlcharrefreplace\'", "\'backslashreplace\'" and any other '
+ 'name\n'
+ ' registered via "codecs.register_error()", see section Codec '
+ 'Base\n'
+ ' Classes. For a list of possible encodings, see section '
+ 'Standard\n'
+ ' Encodings.\n'
+ '\n'
+ ' New in version 2.0.\n'
+ '\n'
+ ' Changed in version 2.3: Support for "\'xmlcharrefreplace\'" '
+ 'and\n'
+ ' "\'backslashreplace\'" and other error handling schemes '
+ 'added.\n'
+ '\n'
+ ' Changed in version 2.7: Support for keyword arguments added.\n'
+ '\n'
+ 'str.endswith(suffix[, start[, end]])\n'
+ '\n'
+ ' Return "True" if the string ends with the specified '
+ '*suffix*,\n'
+ ' otherwise return "False". *suffix* can also be a tuple of '
+ 'suffixes\n'
+ ' to look for. With optional *start*, test beginning at that\n'
+ ' position. With optional *end*, stop comparing at that '
+ 'position.\n'
+ '\n'
+ ' Changed in version 2.5: Accept tuples as *suffix*.\n'
+ '\n'
+ 'str.expandtabs([tabsize])\n'
+ '\n'
+ ' Return a copy of the string where all tab characters are '
+ 'replaced\n'
+ ' by one or more spaces, depending on the current column and '
+ 'the\n'
+ ' given tab size. Tab positions occur every *tabsize* '
+ 'characters\n'
+ ' (default is 8, giving tab positions at columns 0, 8, 16 and '
+ 'so on).\n'
+ ' To expand the string, the current column is set to zero and '
+ 'the\n'
+ ' string is examined character by character. If the character '
+ 'is a\n'
+ ' tab ("\\t"), one or more space characters are inserted in the '
+ 'result\n'
+ ' until the current column is equal to the next tab position. '
+ '(The\n'
+ ' tab character itself is not copied.) If the character is a '
+ 'newline\n'
+ ' ("\\n") or return ("\\r"), it is copied and the current '
+ 'column is\n'
+ ' reset to zero. Any other character is copied unchanged and '
+ 'the\n'
+ ' current column is incremented by one regardless of how the\n'
+ ' character is represented when printed.\n'
+ '\n'
+ " >>> '01\\t012\\t0123\\t01234'.expandtabs()\n"
+ " '01 012 0123 01234'\n"
+ " >>> '01\\t012\\t0123\\t01234'.expandtabs(4)\n"
+ " '01 012 0123 01234'\n"
+ '\n'
+ 'str.find(sub[, start[, end]])\n'
+ '\n'
+ ' Return the lowest index in the string where substring *sub* '
+ 'is\n'
+ ' found within the slice "s[start:end]". Optional arguments '
+ '*start*\n'
+ ' and *end* are interpreted as in slice notation. Return "-1" '
+ 'if\n'
+ ' *sub* is not found.\n'
+ '\n'
+ ' Note: The "find()" method should be used only if you need to '
+ 'know\n'
+ ' the position of *sub*. To check if *sub* is a substring or '
+ 'not,\n'
+ ' use the "in" operator:\n'
+ '\n'
+ " >>> 'Py' in 'Python'\n"
+ ' True\n'
+ '\n'
+ 'str.format(*args, **kwargs)\n'
+ '\n'
+ ' Perform a string formatting operation. The string on which '
+ 'this\n'
+ ' method is called can contain literal text or replacement '
+ 'fields\n'
+ ' delimited by braces "{}". Each replacement field contains '
+ 'either\n'
+ ' the numeric index of a positional argument, or the name of a\n'
+ ' keyword argument. Returns a copy of the string where each\n'
+ ' replacement field is replaced with the string value of the\n'
+ ' corresponding argument.\n'
+ '\n'
+ ' >>> "The sum of 1 + 2 is {0}".format(1+2)\n'
+ " 'The sum of 1 + 2 is 3'\n"
+ '\n'
+ ' See Format String Syntax for a description of the various\n'
+ ' formatting options that can be specified in format strings.\n'
+ '\n'
+ ' This method of string formatting is the new standard in '
+ 'Python 3,\n'
+ ' and should be preferred to the "%" formatting described in '
+ 'String\n'
+ ' Formatting Operations in new code.\n'
+ '\n'
+ ' New in version 2.6.\n'
+ '\n'
+ 'str.index(sub[, start[, end]])\n'
+ '\n'
+ ' Like "find()", but raise "ValueError" when the substring is '
+ 'not\n'
+ ' found.\n'
+ '\n'
+ 'str.isalnum()\n'
+ '\n'
+ ' Return true if all characters in the string are alphanumeric '
+ 'and\n'
+ ' there is at least one character, false otherwise.\n'
+ '\n'
+ ' For 8-bit strings, this method is locale-dependent.\n'
+ '\n'
+ 'str.isalpha()\n'
+ '\n'
+ ' Return true if all characters in the string are alphabetic '
+ 'and\n'
+ ' there is at least one character, false otherwise.\n'
+ '\n'
+ ' For 8-bit strings, this method is locale-dependent.\n'
+ '\n'
+ 'str.isdigit()\n'
+ '\n'
+ ' Return true if all characters in the string are digits and '
+ 'there is\n'
+ ' at least one character, false otherwise.\n'
+ '\n'
+ ' For 8-bit strings, this method is locale-dependent.\n'
+ '\n'
+ 'str.islower()\n'
+ '\n'
+ ' Return true if all cased characters [4] in the string are '
+ 'lowercase\n'
+ ' and there is at least one cased character, false otherwise.\n'
+ '\n'
+ ' For 8-bit strings, this method is locale-dependent.\n'
+ '\n'
+ 'str.isspace()\n'
+ '\n'
+ ' Return true if there are only whitespace characters in the '
+ 'string\n'
+ ' and there is at least one character, false otherwise.\n'
+ '\n'
+ ' For 8-bit strings, this method is locale-dependent.\n'
+ '\n'
+ 'str.istitle()\n'
+ '\n'
+ ' Return true if the string is a titlecased string and there is '
+ 'at\n'
+ ' least one character, for example uppercase characters may '
+ 'only\n'
+ ' follow uncased characters and lowercase characters only cased '
+ 'ones.\n'
+ ' Return false otherwise.\n'
+ '\n'
+ ' For 8-bit strings, this method is locale-dependent.\n'
+ '\n'
+ 'str.isupper()\n'
+ '\n'
+ ' Return true if all cased characters [4] in the string are '
+ 'uppercase\n'
+ ' and there is at least one cased character, false otherwise.\n'
+ '\n'
+ ' For 8-bit strings, this method is locale-dependent.\n'
+ '\n'
+ 'str.join(iterable)\n'
+ '\n'
+ ' Return a string which is the concatenation of the strings in\n'
+ ' *iterable*. A "TypeError" will be raised if there are any '
+ 'non-\n'
+ ' string values in *iterable*, including "bytes" objects. The\n'
+ ' separator between elements is the string providing this '
+ 'method.\n'
+ '\n'
+ 'str.ljust(width[, fillchar])\n'
+ '\n'
+ ' Return the string left justified in a string of length '
+ '*width*.\n'
+ ' Padding is done using the specified *fillchar* (default is a\n'
+ ' space). The original string is returned if *width* is less '
+ 'than or\n'
+ ' equal to "len(s)".\n'
+ '\n'
+ ' Changed in version 2.4: Support for the *fillchar* argument.\n'
+ '\n'
+ 'str.lower()\n'
+ '\n'
+ ' Return a copy of the string with all the cased characters '
+ '[4]\n'
+ ' converted to lowercase.\n'
+ '\n'
+ ' For 8-bit strings, this method is locale-dependent.\n'
+ '\n'
+ 'str.lstrip([chars])\n'
+ '\n'
+ ' Return a copy of the string with leading characters removed. '
+ 'The\n'
+ ' *chars* argument is a string specifying the set of characters '
+ 'to be\n'
+ ' removed. If omitted or "None", the *chars* argument defaults '
+ 'to\n'
+ ' removing whitespace. The *chars* argument is not a prefix; '
+ 'rather,\n'
+ ' all combinations of its values are stripped:\n'
+ '\n'
+ " >>> ' spacious '.lstrip()\n"
+ " 'spacious '\n"
+ " >>> 'www.example.com'.lstrip('cmowz.')\n"
+ " 'example.com'\n"
+ '\n'
+ ' Changed in version 2.2.2: Support for the *chars* argument.\n'
+ '\n'
+ 'str.partition(sep)\n'
+ '\n'
+ ' Split the string at the first occurrence of *sep*, and return '
+ 'a\n'
+ ' 3-tuple containing the part before the separator, the '
+ 'separator\n'
+ ' itself, and the part after the separator. If the separator '
+ 'is not\n'
+ ' found, return a 3-tuple containing the string itself, '
+ 'followed by\n'
+ ' two empty strings.\n'
+ '\n'
+ ' New in version 2.5.\n'
+ '\n'
+ 'str.replace(old, new[, count])\n'
+ '\n'
+ ' Return a copy of the string with all occurrences of substring '
+ '*old*\n'
+ ' replaced by *new*. If the optional argument *count* is '
+ 'given, only\n'
+ ' the first *count* occurrences are replaced.\n'
+ '\n'
+ 'str.rfind(sub[, start[, end]])\n'
+ '\n'
+ ' Return the highest index in the string where substring *sub* '
+ 'is\n'
+ ' found, such that *sub* is contained within "s[start:end]".\n'
+ ' Optional arguments *start* and *end* are interpreted as in '
+ 'slice\n'
+ ' notation. Return "-1" on failure.\n'
+ '\n'
+ 'str.rindex(sub[, start[, end]])\n'
+ '\n'
+ ' Like "rfind()" but raises "ValueError" when the substring '
+ '*sub* is\n'
+ ' not found.\n'
+ '\n'
+ 'str.rjust(width[, fillchar])\n'
+ '\n'
+ ' Return the string right justified in a string of length '
+ '*width*.\n'
+ ' Padding is done using the specified *fillchar* (default is a\n'
+ ' space). The original string is returned if *width* is less '
+ 'than or\n'
+ ' equal to "len(s)".\n'
+ '\n'
+ ' Changed in version 2.4: Support for the *fillchar* argument.\n'
+ '\n'
+ 'str.rpartition(sep)\n'
+ '\n'
+ ' Split the string at the last occurrence of *sep*, and return '
+ 'a\n'
+ ' 3-tuple containing the part before the separator, the '
+ 'separator\n'
+ ' itself, and the part after the separator. If the separator '
+ 'is not\n'
+ ' found, return a 3-tuple containing two empty strings, '
+ 'followed by\n'
+ ' the string itself.\n'
+ '\n'
+ ' New in version 2.5.\n'
+ '\n'
+ 'str.rsplit([sep[, maxsplit]])\n'
+ '\n'
+ ' Return a list of the words in the string, using *sep* as the\n'
+ ' delimiter string. If *maxsplit* is given, at most *maxsplit* '
+ 'splits\n'
+ ' are done, the *rightmost* ones. If *sep* is not specified '
+ 'or\n'
+ ' "None", any whitespace string is a separator. Except for '
+ 'splitting\n'
+ ' from the right, "rsplit()" behaves like "split()" which is\n'
+ ' described in detail below.\n'
+ '\n'
+ ' New in version 2.4.\n'
+ '\n'
+ 'str.rstrip([chars])\n'
+ '\n'
+ ' Return a copy of the string with trailing characters '
+ 'removed. The\n'
+ ' *chars* argument is a string specifying the set of characters '
+ 'to be\n'
+ ' removed. If omitted or "None", the *chars* argument defaults '
+ 'to\n'
+ ' removing whitespace. The *chars* argument is not a suffix; '
+ 'rather,\n'
+ ' all combinations of its values are stripped:\n'
+ '\n'
+ " >>> ' spacious '.rstrip()\n"
+ " ' spacious'\n"
+ " >>> 'mississippi'.rstrip('ipz')\n"
+ " 'mississ'\n"
+ '\n'
+ ' Changed in version 2.2.2: Support for the *chars* argument.\n'
+ '\n'
+ 'str.split([sep[, maxsplit]])\n'
+ '\n'
+ ' Return a list of the words in the string, using *sep* as the\n'
+ ' delimiter string. If *maxsplit* is given, at most '
+ '*maxsplit*\n'
+ ' splits are done (thus, the list will have at most '
+ '"maxsplit+1"\n'
+ ' elements). If *maxsplit* is not specified or "-1", then '
+ 'there is\n'
+ ' no limit on the number of splits (all possible splits are '
+ 'made).\n'
+ '\n'
+ ' If *sep* is given, consecutive delimiters are not grouped '
+ 'together\n'
+ ' and are deemed to delimit empty strings (for example,\n'
+ ' "\'1,,2\'.split(\',\')" returns "[\'1\', \'\', \'2\']"). The '
+ '*sep* argument\n'
+ ' may consist of multiple characters (for example,\n'
+ ' "\'1<>2<>3\'.split(\'<>\')" returns "[\'1\', \'2\', \'3\']"). '
+ 'Splitting an\n'
+ ' empty string with a specified separator returns "[\'\']".\n'
+ '\n'
+ ' If *sep* is not specified or is "None", a different '
+ 'splitting\n'
+ ' algorithm is applied: runs of consecutive whitespace are '
+ 'regarded\n'
+ ' as a single separator, and the result will contain no empty '
+ 'strings\n'
+ ' at the start or end if the string has leading or trailing\n'
+ ' whitespace. Consequently, splitting an empty string or a '
+ 'string\n'
+ ' consisting of just whitespace with a "None" separator returns '
+ '"[]".\n'
+ '\n'
+ ' For example, "\' 1 2 3 \'.split()" returns "[\'1\', '
+ '\'2\', \'3\']", and\n'
+ ' "\' 1 2 3 \'.split(None, 1)" returns "[\'1\', \'2 3 '
+ '\']".\n'
+ '\n'
+ 'str.splitlines([keepends])\n'
+ '\n'
+ ' Return a list of the lines in the string, breaking at line\n'
+ ' boundaries. This method uses the *universal newlines* '
+ 'approach to\n'
+ ' splitting lines. Line breaks are not included in the '
+ 'resulting list\n'
+ ' unless *keepends* is given and true.\n'
+ '\n'
+ ' Python recognizes ""\\r"", ""\\n"", and ""\\r\\n"" as line '
+ 'boundaries\n'
+ ' for 8-bit strings.\n'
+ '\n'
+ ' For example:\n'
+ '\n'
+ " >>> 'ab c\\n\\nde fg\\rkl\\r\\n'.splitlines()\n"
+ " ['ab c', '', 'de fg', 'kl']\n"
+ " >>> 'ab c\\n\\nde fg\\rkl\\r\\n'.splitlines(True)\n"
+ " ['ab c\\n', '\\n', 'de fg\\r', 'kl\\r\\n']\n"
+ '\n'
+ ' Unlike "split()" when a delimiter string *sep* is given, '
+ 'this\n'
+ ' method returns an empty list for the empty string, and a '
+ 'terminal\n'
+ ' line break does not result in an extra line:\n'
+ '\n'
+ ' >>> "".splitlines()\n'
+ ' []\n'
+ ' >>> "One line\\n".splitlines()\n'
+ " ['One line']\n"
+ '\n'
+ ' For comparison, "split(\'\\n\')" gives:\n'
+ '\n'
+ " >>> ''.split('\\n')\n"
+ " ['']\n"
+ " >>> 'Two lines\\n'.split('\\n')\n"
+ " ['Two lines', '']\n"
+ '\n'
+ 'unicode.splitlines([keepends])\n'
+ '\n'
+ ' Return a list of the lines in the string, like '
+ '"str.splitlines()".\n'
+ ' However, the Unicode method splits on the following line\n'
+ ' boundaries, which are a superset of the *universal newlines*\n'
+ ' recognized for 8-bit strings.\n'
+ '\n'
+ ' +-------------------------+-------------------------------+\n'
+ ' | Representation | Description |\n'
+ ' +=========================+===============================+\n'
+ ' | "\\n" | Line Feed |\n'
+ ' +-------------------------+-------------------------------+\n'
+ ' | "\\r" | Carriage Return |\n'
+ ' +-------------------------+-------------------------------+\n'
+ ' | "\\r\\n" | Carriage Return + Line Feed '
+ '|\n'
+ ' +-------------------------+-------------------------------+\n'
+ ' | "\\v" or "\\x0b" | Line Tabulation '
+ '|\n'
+ ' +-------------------------+-------------------------------+\n'
+ ' | "\\f" or "\\x0c" | Form Feed '
+ '|\n'
+ ' +-------------------------+-------------------------------+\n'
+ ' | "\\x1c" | File Separator |\n'
+ ' +-------------------------+-------------------------------+\n'
+ ' | "\\x1d" | Group Separator |\n'
+ ' +-------------------------+-------------------------------+\n'
+ ' | "\\x1e" | Record Separator |\n'
+ ' +-------------------------+-------------------------------+\n'
+ ' | "\\x85" | Next Line (C1 Control Code) |\n'
+ ' +-------------------------+-------------------------------+\n'
+ ' | "\\u2028" | Line Separator |\n'
+ ' +-------------------------+-------------------------------+\n'
+ ' | "\\u2029" | Paragraph Separator |\n'
+ ' +-------------------------+-------------------------------+\n'
+ '\n'
+ ' Changed in version 2.7: "\\v" and "\\f" added to list of '
+ 'line\n'
+ ' boundaries.\n'
+ '\n'
+ 'str.startswith(prefix[, start[, end]])\n'
+ '\n'
+ ' Return "True" if string starts with the *prefix*, otherwise '
+ 'return\n'
+ ' "False". *prefix* can also be a tuple of prefixes to look '
+ 'for.\n'
+ ' With optional *start*, test string beginning at that '
+ 'position.\n'
+ ' With optional *end*, stop comparing string at that position.\n'
+ '\n'
+ ' Changed in version 2.5: Accept tuples as *prefix*.\n'
+ '\n'
+ 'str.strip([chars])\n'
+ '\n'
+ ' Return a copy of the string with the leading and trailing\n'
+ ' characters removed. The *chars* argument is a string '
+ 'specifying the\n'
+ ' set of characters to be removed. If omitted or "None", the '
+ '*chars*\n'
+ ' argument defaults to removing whitespace. The *chars* '
+ 'argument is\n'
+ ' not a prefix or suffix; rather, all combinations of its '
+ 'values are\n'
+ ' stripped:\n'
+ '\n'
+ " >>> ' spacious '.strip()\n"
+ " 'spacious'\n"
+ " >>> 'www.example.com'.strip('cmowz.')\n"
+ " 'example'\n"
+ '\n'
+ ' Changed in version 2.2.2: Support for the *chars* argument.\n'
+ '\n'
+ 'str.swapcase()\n'
+ '\n'
+ ' Return a copy of the string with uppercase characters '
+ 'converted to\n'
+ ' lowercase and vice versa.\n'
+ '\n'
+ ' For 8-bit strings, this method is locale-dependent.\n'
+ '\n'
+ 'str.title()\n'
+ '\n'
+ ' Return a titlecased version of the string where words start '
+ 'with an\n'
+ ' uppercase character and the remaining characters are '
+ 'lowercase.\n'
+ '\n'
+ ' The algorithm uses a simple language-independent definition '
+ 'of a\n'
+ ' word as groups of consecutive letters. The definition works '
+ 'in\n'
+ ' many contexts but it means that apostrophes in contractions '
+ 'and\n'
+ ' possessives form word boundaries, which may not be the '
+ 'desired\n'
+ ' result:\n'
+ '\n'
+ ' >>> "they\'re bill\'s friends from the UK".title()\n'
+ ' "They\'Re Bill\'S Friends From The Uk"\n'
+ '\n'
+ ' A workaround for apostrophes can be constructed using '
+ 'regular\n'
+ ' expressions:\n'
+ '\n'
+ ' >>> import re\n'
+ ' >>> def titlecase(s):\n'
+ ' ... return re.sub(r"[A-Za-z]+(\'[A-Za-z]+)?",\n'
+ ' ... lambda mo: mo.group(0)[0].upper() +\n'
+ ' ... mo.group(0)[1:].lower(),\n'
+ ' ... s)\n'
+ ' ...\n'
+ ' >>> titlecase("they\'re bill\'s friends.")\n'
+ ' "They\'re Bill\'s Friends."\n'
+ '\n'
+ ' For 8-bit strings, this method is locale-dependent.\n'
+ '\n'
+ 'str.translate(table[, deletechars])\n'
+ '\n'
+ ' Return a copy of the string where all characters occurring in '
+ 'the\n'
+ ' optional argument *deletechars* are removed, and the '
+ 'remaining\n'
+ ' characters have been mapped through the given translation '
+ 'table,\n'
+ ' which must be a string of length 256.\n'
+ '\n'
+ ' You can use the "maketrans()" helper function in the '
+ '"string"\n'
+ ' module to create a translation table. For string objects, set '
+ 'the\n'
+ ' *table* argument to "None" for translations that only delete\n'
+ ' characters:\n'
+ '\n'
+ " >>> 'read this short text'.translate(None, 'aeiou')\n"
+ " 'rd ths shrt txt'\n"
+ '\n'
+ ' New in version 2.6: Support for a "None" *table* argument.\n'
+ '\n'
+ ' For Unicode objects, the "translate()" method does not accept '
+ 'the\n'
+ ' optional *deletechars* argument. Instead, it returns a copy '
+ 'of the\n'
+ ' *s* where all characters have been mapped through the given\n'
+ ' translation table which must be a mapping of Unicode ordinals '
+ 'to\n'
+ ' Unicode ordinals, Unicode strings or "None". Unmapped '
+ 'characters\n'
+ ' are left untouched. Characters mapped to "None" are deleted. '
+ 'Note,\n'
+ ' a more flexible approach is to create a custom character '
+ 'mapping\n'
+ ' codec using the "codecs" module (see "encodings.cp1251" for '
+ 'an\n'
+ ' example).\n'
+ '\n'
+ 'str.upper()\n'
+ '\n'
+ ' Return a copy of the string with all the cased characters '
+ '[4]\n'
+ ' converted to uppercase. Note that "str.upper().isupper()" '
+ 'might be\n'
+ ' "False" if "s" contains uncased characters or if the Unicode\n'
+ ' category of the resulting character(s) is not "Lu" (Letter,\n'
+ ' uppercase), but e.g. "Lt" (Letter, titlecase).\n'
+ '\n'
+ ' For 8-bit strings, this method is locale-dependent.\n'
+ '\n'
+ 'str.zfill(width)\n'
+ '\n'
+ ' Return the numeric string left filled with zeros in a string '
+ 'of\n'
+ ' length *width*. A sign prefix is handled correctly. The '
+ 'original\n'
+ ' string is returned if *width* is less than or equal to '
+ '"len(s)".\n'
+ '\n'
+ ' New in version 2.2.2.\n'
+ '\n'
+ 'The following methods are present only on unicode objects:\n'
+ '\n'
+ 'unicode.isnumeric()\n'
+ '\n'
+ ' Return "True" if there are only numeric characters in S, '
+ '"False"\n'
+ ' otherwise. Numeric characters include digit characters, and '
+ 'all\n'
+ ' characters that have the Unicode numeric value property, '
+ 'e.g.\n'
+ ' U+2155, VULGAR FRACTION ONE FIFTH.\n'
+ '\n'
+ 'unicode.isdecimal()\n'
+ '\n'
+ ' Return "True" if there are only decimal characters in S, '
+ '"False"\n'
+ ' otherwise. Decimal characters include digit characters, and '
+ 'all\n'
+ ' characters that can be used to form decimal-radix numbers, '
+ 'e.g.\n'
+ ' U+0660, ARABIC-INDIC DIGIT ZERO.\n'
+ '\n'
+ '\n'
+ 'String Formatting Operations\n'
+ '============================\n'
+ '\n'
+ 'String and Unicode objects have one unique built-in operation: '
+ 'the "%"\n'
+ 'operator (modulo). This is also known as the string '
+ '*formatting* or\n'
+ '*interpolation* operator. Given "format % values" (where '
+ '*format* is\n'
+ 'a string or Unicode object), "%" conversion specifications in '
+ '*format*\n'
+ 'are replaced with zero or more elements of *values*. The effect '
+ 'is\n'
+ 'similar to the using "sprintf()" in the C language. If *format* '
+ 'is a\n'
+ 'Unicode object, or if any of the objects being converted using '
+ 'the\n'
+ '"%s" conversion are Unicode objects, the result will also be a '
+ 'Unicode\n'
+ 'object.\n'
+ '\n'
+ 'If *format* requires a single argument, *values* may be a single '
+ 'non-\n'
+ 'tuple object. [5] Otherwise, *values* must be a tuple with '
+ 'exactly\n'
+ 'the number of items specified by the format string, or a single\n'
+ 'mapping object (for example, a dictionary).\n'
+ '\n'
+ 'A conversion specifier contains two or more characters and has '
+ 'the\n'
+ 'following components, which must occur in this order:\n'
+ '\n'
+ '1. The "\'%\'" character, which marks the start of the '
+ 'specifier.\n'
+ '\n'
+ '2. Mapping key (optional), consisting of a parenthesised '
'sequence\n'
- ' rather than the start of the slice.\n'
+ ' of characters (for example, "(somename)").\n'
'\n'
+ '3. Conversion flags (optional), which affect the result of some\n'
+ ' conversion types.\n'
'\n'
- 'Immutable Sequence Types\n'
- '========================\n'
+ '4. Minimum field width (optional). If specified as an "\'*\'"\n'
+ ' (asterisk), the actual width is read from the next element of '
+ 'the\n'
+ ' tuple in *values*, and the object to convert comes after the\n'
+ ' minimum field width and optional precision.\n'
+ '\n'
+ '5. Precision (optional), given as a "\'.\'" (dot) followed by '
+ 'the\n'
+ ' precision. If specified as "\'*\'" (an asterisk), the actual '
+ 'width\n'
+ ' is read from the next element of the tuple in *values*, and '
+ 'the\n'
+ ' value to convert comes after the precision.\n'
'\n'
- 'The only operation that immutable sequence types generally '
- 'implement\n'
- 'that is not also implemented by mutable sequence types is '
- 'support for\n'
- 'the "hash()" built-in.\n'
+ '6. Length modifier (optional).\n'
+ '\n'
+ '7. Conversion type.\n'
+ '\n'
+ 'When the right argument is a dictionary (or other mapping type), '
+ 'then\n'
+ 'the formats in the string *must* include a parenthesised mapping '
+ 'key\n'
+ 'into that dictionary inserted immediately after the "\'%\'" '
+ 'character.\n'
+ 'The mapping key selects the value to be formatted from the '
+ 'mapping.\n'
+ 'For example:\n'
+ '\n'
+ ">>> print '%(language)s has %(number)03d quote types.' % \\\n"
+ '... {"language": "Python", "number": 2}\n'
+ 'Python has 002 quote types.\n'
+ '\n'
+ 'In this case no "*" specifiers may occur in a format (since '
+ 'they\n'
+ 'require a sequential parameter list).\n'
+ '\n'
+ 'The conversion flag characters are:\n'
+ '\n'
+ '+-----------+-----------------------------------------------------------------------+\n'
+ '| Flag | '
+ 'Meaning '
+ '|\n'
+ '+===========+=======================================================================+\n'
+ '| "\'#\'" | The value conversion will use the "alternate '
+ 'form" (where defined |\n'
+ '| | '
+ 'below). '
+ '|\n'
+ '+-----------+-----------------------------------------------------------------------+\n'
+ '| "\'0\'" | The conversion will be zero padded for numeric '
+ 'values. |\n'
+ '+-----------+-----------------------------------------------------------------------+\n'
+ '| "\'-\'" | The converted value is left adjusted (overrides '
+ 'the "\'0\'" conversion |\n'
+ '| | if both are '
+ 'given). |\n'
+ '+-----------+-----------------------------------------------------------------------+\n'
+ '| "\' \'" | (a space) A blank should be left before a '
+ 'positive number (or empty |\n'
+ '| | string) produced by a signed '
+ 'conversion. |\n'
+ '+-----------+-----------------------------------------------------------------------+\n'
+ '| "\'+\'" | A sign character ("\'+\'" or "\'-\'") will '
+ 'precede the conversion |\n'
+ '| | (overrides a "space" '
+ 'flag). |\n'
+ '+-----------+-----------------------------------------------------------------------+\n'
+ '\n'
+ 'A length modifier ("h", "l", or "L") may be present, but is '
+ 'ignored as\n'
+ 'it is not necessary for Python -- so e.g. "%ld" is identical to '
+ '"%d".\n'
+ '\n'
+ 'The conversion types are:\n'
+ '\n'
+ '+--------------+-------------------------------------------------------+---------+\n'
+ '| Conversion | '
+ 'Meaning | Notes '
+ '|\n'
+ '+==============+=======================================================+=========+\n'
+ '| "\'d\'" | Signed integer '
+ 'decimal. | |\n'
+ '+--------------+-------------------------------------------------------+---------+\n'
+ '| "\'i\'" | Signed integer '
+ 'decimal. | |\n'
+ '+--------------+-------------------------------------------------------+---------+\n'
+ '| "\'o\'" | Signed octal '
+ 'value. | (1) |\n'
+ '+--------------+-------------------------------------------------------+---------+\n'
+ '| "\'u\'" | Obsolete type -- it is identical to '
+ '"\'d\'". | (7) |\n'
+ '+--------------+-------------------------------------------------------+---------+\n'
+ '| "\'x\'" | Signed hexadecimal '
+ '(lowercase). | (2) |\n'
+ '+--------------+-------------------------------------------------------+---------+\n'
+ '| "\'X\'" | Signed hexadecimal '
+ '(uppercase). | (2) |\n'
+ '+--------------+-------------------------------------------------------+---------+\n'
+ '| "\'e\'" | Floating point exponential format '
+ '(lowercase). | (3) |\n'
+ '+--------------+-------------------------------------------------------+---------+\n'
+ '| "\'E\'" | Floating point exponential format '
+ '(uppercase). | (3) |\n'
+ '+--------------+-------------------------------------------------------+---------+\n'
+ '| "\'f\'" | Floating point decimal '
+ 'format. | (3) |\n'
+ '+--------------+-------------------------------------------------------+---------+\n'
+ '| "\'F\'" | Floating point decimal '
+ 'format. | (3) |\n'
+ '+--------------+-------------------------------------------------------+---------+\n'
+ '| "\'g\'" | Floating point format. Uses lowercase '
+ 'exponential | (4) |\n'
+ '| | format if exponent is less than -4 or not less '
+ 'than | |\n'
+ '| | precision, decimal format '
+ 'otherwise. | |\n'
+ '+--------------+-------------------------------------------------------+---------+\n'
+ '| "\'G\'" | Floating point format. Uses uppercase '
+ 'exponential | (4) |\n'
+ '| | format if exponent is less than -4 or not less '
+ 'than | |\n'
+ '| | precision, decimal format '
+ 'otherwise. | |\n'
+ '+--------------+-------------------------------------------------------+---------+\n'
+ '| "\'c\'" | Single character (accepts integer or single '
+ 'character | |\n'
+ '| | '
+ 'string). | '
+ '|\n'
+ '+--------------+-------------------------------------------------------+---------+\n'
+ '| "\'r\'" | String (converts any Python object using '
+ 'repr()). | (5) |\n'
+ '+--------------+-------------------------------------------------------+---------+\n'
+ '| "\'s\'" | String (converts any Python object using '
+ '"str()"). | (6) |\n'
+ '+--------------+-------------------------------------------------------+---------+\n'
+ '| "\'%\'" | No argument is converted, results in a '
+ '"\'%\'" | |\n'
+ '| | character in the '
+ 'result. | |\n'
+ '+--------------+-------------------------------------------------------+---------+\n'
+ '\n'
+ 'Notes:\n'
+ '\n'
+ '1. The alternate form causes a leading zero ("\'0\'") to be '
+ 'inserted\n'
+ ' between left-hand padding and the formatting of the number if '
+ 'the\n'
+ ' leading character of the result is not already a zero.\n'
'\n'
- 'This support allows immutable sequences, such as "tuple" '
- 'instances, to\n'
- 'be used as "dict" keys and stored in "set" and "frozenset" '
- 'instances.\n'
+ '2. The alternate form causes a leading "\'0x\'" or "\'0X\'" '
+ '(depending\n'
+ ' on whether the "\'x\'" or "\'X\'" format was used) to be '
+ 'inserted\n'
+ ' before the first digit.\n'
'\n'
- 'Attempting to hash an immutable sequence that contains '
- 'unhashable\n'
- 'values will result in "TypeError".\n'
+ '3. The alternate form causes the result to always contain a '
+ 'decimal\n'
+ ' point, even if no digits follow it.\n'
+ '\n'
+ ' The precision determines the number of digits after the '
+ 'decimal\n'
+ ' point and defaults to 6.\n'
+ '\n'
+ '4. The alternate form causes the result to always contain a '
+ 'decimal\n'
+ ' point, and trailing zeroes are not removed as they would '
+ 'otherwise\n'
+ ' be.\n'
+ '\n'
+ ' The precision determines the number of significant digits '
+ 'before\n'
+ ' and after the decimal point and defaults to 6.\n'
+ '\n'
+ '5. The "%r" conversion was added in Python 2.0.\n'
+ '\n'
+ ' The precision determines the maximal number of characters '
+ 'used.\n'
+ '\n'
+ '6. If the object or format provided is a "unicode" string, the\n'
+ ' resulting string will also be "unicode".\n'
+ '\n'
+ ' The precision determines the maximal number of characters '
+ 'used.\n'
+ '\n'
+ '7. See **PEP 237**.\n'
+ '\n'
+ 'Since Python strings have an explicit length, "%s" conversions '
+ 'do not\n'
+ 'assume that "\'\\0\'" is the end of the string.\n'
+ '\n'
+ 'Changed in version 2.7: "%f" conversions for numbers whose '
+ 'absolute\n'
+ 'value is over 1e50 are no longer replaced by "%g" conversions.\n'
+ '\n'
+ 'Additional string operations are defined in standard modules '
+ '"string"\n'
+ 'and "re".\n'
+ '\n'
+ '\n'
+ 'XRange Type\n'
+ '===========\n'
+ '\n'
+ 'The "xrange" type is an immutable sequence which is commonly '
+ 'used for\n'
+ 'looping. The advantage of the "xrange" type is that an '
+ '"xrange"\n'
+ 'object will always take the same amount of memory, no matter the '
+ 'size\n'
+ 'of the range it represents. There are no consistent '
+ 'performance\n'
+ 'advantages.\n'
+ '\n'
+ 'XRange objects have very little behavior: they only support '
+ 'indexing,\n'
+ 'iteration, and the "len()" function.\n'
'\n'
'\n'
'Mutable Sequence Types\n'
'======================\n'
'\n'
- 'The operations in the following table are defined on mutable '
- 'sequence\n'
- 'types. The "collections.abc.MutableSequence" ABC is provided to '
- 'make\n'
- 'it easier to correctly implement these operations on custom '
- 'sequence\n'
- 'types.\n'
- '\n'
- 'In the table *s* is an instance of a mutable sequence type, *t* '
- 'is any\n'
- 'iterable object and *x* is an arbitrary object that meets any '
- 'type and\n'
- 'value restrictions imposed by *s* (for example, "bytearray" '
- 'only\n'
- 'accepts integers that meet the value restriction "0 <= x <= '
- '255").\n'
+ 'List and "bytearray" objects support additional operations that '
+ 'allow\n'
+ 'in-place modification of the object. Other mutable sequence '
+ 'types\n'
+ '(when added to the language) should also support these '
+ 'operations.\n'
+ 'Strings and tuples are immutable sequence types: such objects '
+ 'cannot\n'
+ 'be modified once created. The following operations are defined '
+ 'on\n'
+ 'mutable sequence types (where *x* is an arbitrary object):\n'
'\n'
'+--------------------------------+----------------------------------+-----------------------+\n'
'| Operation | '
'Result | Notes |\n'
- '|================================|==================================|=======================|\n'
+ '+================================+==================================+=======================+\n'
'| "s[i] = x" | item *i* of *s* is replaced '
'by | |\n'
'| | '
@@ -12942,443 +12989,192 @@ topics = {'assert': 'The "assert" statement\n'
'| | "s[i:j:k]" from the '
'list | |\n'
'+--------------------------------+----------------------------------+-----------------------+\n'
- '| "s.append(x)" | appends *x* to the end of '
- 'the | |\n'
- '| | sequence (same '
- 'as | |\n'
- '| | "s[len(s):len(s)] = '
- '[x]") | |\n'
- '+--------------------------------+----------------------------------+-----------------------+\n'
- '| "s.clear()" | removes all items from *s* '
- '(same | (5) |\n'
- '| | as "del '
- 's[:]") | |\n'
+ '| "s.append(x)" | same as "s[len(s):len(s)] = '
+ '[x]" | (2) |\n'
'+--------------------------------+----------------------------------+-----------------------+\n'
- '| "s.copy()" | creates a shallow copy of '
- '*s* | (5) |\n'
- '| | (same as '
- '"s[:]") | |\n'
- '+--------------------------------+----------------------------------+-----------------------+\n'
- '| "s.extend(t)" or "s += t" | extends *s* with the contents '
- 'of | |\n'
- '| | *t* (for the most part the '
- 'same | |\n'
- '| | as "s[len(s):len(s)] = '
- 't") | |\n'
+ '| "s.extend(t)" or "s += t" | for the most part the same '
+ 'as | (3) |\n'
+ '| | "s[len(s):len(s)] = '
+ 't" | |\n'
'+--------------------------------+----------------------------------+-----------------------+\n'
'| "s *= n" | updates *s* with its '
- 'contents | (6) |\n'
+ 'contents | (11) |\n'
'| | repeated *n* '
'times | |\n'
'+--------------------------------+----------------------------------+-----------------------+\n'
- '| "s.insert(i, x)" | inserts *x* into *s* at '
- 'the | |\n'
- '| | index given by *i* (same '
- 'as | |\n'
- '| | "s[i:i] = '
- '[x]") | |\n'
+ '| "s.count(x)" | return number of *i*\'s for '
+ 'which | |\n'
+ '| | "s[i] == '
+ 'x" | |\n'
+ '+--------------------------------+----------------------------------+-----------------------+\n'
+ '| "s.index(x[, i[, j]])" | return smallest *k* such '
+ 'that | (4) |\n'
+ '| | "s[k] == x" and "i <= k < '
+ 'j" | |\n'
+ '+--------------------------------+----------------------------------+-----------------------+\n'
+ '| "s.insert(i, x)" | same as "s[i:i] = '
+ '[x]" | (5) |\n'
'+--------------------------------+----------------------------------+-----------------------+\n'
- '| "s.pop([i])" | retrieves the item at *i* '
- 'and | (2) |\n'
- '| | also removes it from '
- '*s* | |\n'
+ '| "s.pop([i])" | same as "x = s[i]; del '
+ 's[i]; | (6) |\n'
+ '| | return '
+ 'x" | |\n'
'+--------------------------------+----------------------------------+-----------------------+\n'
- '| "s.remove(x)" | remove the first item from '
- '*s* | (3) |\n'
- '| | where "s[i]" is equal to '
- '*x* | |\n'
+ '| "s.remove(x)" | same as "del '
+ 's[s.index(x)]" | (4) |\n'
'+--------------------------------+----------------------------------+-----------------------+\n'
'| "s.reverse()" | reverses the items of *s* '
- 'in | (4) |\n'
+ 'in | (7) |\n'
'| | '
'place | |\n'
'+--------------------------------+----------------------------------+-----------------------+\n'
+ '| "s.sort([cmp[, key[, | sort the items of *s* in '
+ 'place | (7)(8)(9)(10) |\n'
+ '| reverse]]])" '
+ '| | |\n'
+ '+--------------------------------+----------------------------------+-----------------------+\n'
'\n'
'Notes:\n'
'\n'
- '1. *t* must have the same length as the slice it is replacing.\n'
- '\n'
- '2. The optional argument *i* defaults to "-1", so that by '
- 'default\n'
- ' the last item is removed and returned.\n'
- '\n'
- '3. "remove()" raises "ValueError" when *x* is not found in *s*.\n'
- '\n'
- '4. The "reverse()" method modifies the sequence in place for\n'
- ' economy of space when reversing a large sequence. To remind '
- 'users\n'
- ' that it operates by side effect, it does not return the '
- 'reversed\n'
- ' sequence.\n'
- '\n'
- '5. "clear()" and "copy()" are included for consistency with the\n'
- ' interfaces of mutable containers that don’t support slicing\n'
- ' operations (such as "dict" and "set"). "copy()" is not part '
- 'of the\n'
- ' "collections.abc.MutableSequence" ABC, but most concrete '
- 'mutable\n'
- ' sequence classes provide it.\n'
- '\n'
- ' New in version 3.3: "clear()" and "copy()" methods.\n'
- '\n'
- '6. The value *n* is an integer, or an object implementing\n'
- ' "__index__()". Zero and negative values of *n* clear the '
- 'sequence.\n'
- ' Items in the sequence are not copied; they are referenced '
- 'multiple\n'
- ' times, as explained for "s * n" under Common Sequence '
- 'Operations.\n'
+ '1. *t* must have the same length as the slice it is replacing.\n'
'\n'
+ '2. The C implementation of Python has historically accepted\n'
+ ' multiple parameters and implicitly joined them into a tuple; '
+ 'this\n'
+ ' no longer works in Python 2.0. Use of this misfeature has '
+ 'been\n'
+ ' deprecated since Python 1.4.\n'
'\n'
- 'Lists\n'
- '=====\n'
- '\n'
- 'Lists are mutable sequences, typically used to store collections '
- 'of\n'
- 'homogeneous items (where the precise degree of similarity will '
- 'vary by\n'
- 'application).\n'
- '\n'
- 'class list([iterable])\n'
- '\n'
- ' Lists may be constructed in several ways:\n'
- '\n'
- ' * Using a pair of square brackets to denote the empty list: '
- '"[]"\n'
- '\n'
- ' * Using square brackets, separating items with commas: '
- '"[a]",\n'
- ' "[a, b, c]"\n'
- '\n'
- ' * Using a list comprehension: "[x for x in iterable]"\n'
- '\n'
- ' * Using the type constructor: "list()" or "list(iterable)"\n'
+ '3. *t* can be any iterable object.\n'
'\n'
- ' The constructor builds a list whose items are the same and in '
+ '4. Raises "ValueError" when *x* is not found in *s*. When a\n'
+ ' negative index is passed as the second or third parameter to '
'the\n'
- ' same order as *iterable*’s items. *iterable* may be either '
- 'a\n'
- ' sequence, a container that supports iteration, or an '
- 'iterator\n'
- ' object. If *iterable* is already a list, a copy is made and\n'
- ' returned, similar to "iterable[:]". For example, '
- '"list(\'abc\')"\n'
- ' returns "[\'a\', \'b\', \'c\']" and "list( (1, 2, 3) )" '
- 'returns "[1, 2,\n'
- ' 3]". If no argument is given, the constructor creates a new '
- 'empty\n'
- ' list, "[]".\n'
- '\n'
- ' Many other operations also produce lists, including the '
- '"sorted()"\n'
- ' built-in.\n'
- '\n'
- ' Lists implement all of the common and mutable sequence '
- 'operations.\n'
- ' Lists also provide the following additional method:\n'
+ ' "index()" method, the list length is added, as for slice '
+ 'indices.\n'
+ ' If it is still negative, it is truncated to zero, as for '
+ 'slice\n'
+ ' indices.\n'
'\n'
- ' sort(*, key=None, reverse=False)\n'
+ ' Changed in version 2.3: Previously, "index()" didn\'t have '
+ 'arguments\n'
+ ' for specifying start and stop positions.\n'
'\n'
- ' This method sorts the list in place, using only "<" '
- 'comparisons\n'
- ' between items. Exceptions are not suppressed - if any '
- 'comparison\n'
- ' operations fail, the entire sort operation will fail (and '
+ '5. When a negative index is passed as the first parameter to '
'the\n'
- ' list will likely be left in a partially modified state).\n'
- '\n'
- ' "sort()" accepts two arguments that can only be passed by\n'
- ' keyword (keyword-only arguments):\n'
- '\n'
- ' *key* specifies a function of one argument that is used '
- 'to\n'
- ' extract a comparison key from each list element (for '
- 'example,\n'
- ' "key=str.lower"). The key corresponding to each item in '
- 'the list\n'
- ' is calculated once and then used for the entire sorting '
- 'process.\n'
- ' The default value of "None" means that list items are '
- 'sorted\n'
- ' directly without calculating a separate key value.\n'
- '\n'
- ' The "functools.cmp_to_key()" utility is available to '
- 'convert a\n'
- ' 2.x style *cmp* function to a *key* function.\n'
- '\n'
- ' *reverse* is a boolean value. If set to "True", then the '
- 'list\n'
- ' elements are sorted as if each comparison were reversed.\n'
- '\n'
- ' This method modifies the sequence in place for economy of '
- 'space\n'
- ' when sorting a large sequence. To remind users that it '
- 'operates\n'
- ' by side effect, it does not return the sorted sequence '
- '(use\n'
- ' "sorted()" to explicitly request a new sorted list '
- 'instance).\n'
- '\n'
- ' The "sort()" method is guaranteed to be stable. A sort '
- 'is\n'
- ' stable if it guarantees not to change the relative order '
- 'of\n'
- ' elements that compare equal — this is helpful for sorting '
- 'in\n'
- ' multiple passes (for example, sort by department, then by '
- 'salary\n'
- ' grade).\n'
- '\n'
- ' For sorting examples and a brief sorting tutorial, see '
- 'Sorting\n'
- ' HOW TO.\n'
- '\n'
- ' **CPython implementation detail:** While a list is being '
- 'sorted,\n'
- ' the effect of attempting to mutate, or even inspect, the '
- 'list is\n'
- ' undefined. The C implementation of Python makes the list '
- 'appear\n'
- ' empty for the duration, and raises "ValueError" if it can '
- 'detect\n'
- ' that the list has been mutated during a sort.\n'
- '\n'
- '\n'
- 'Tuples\n'
- '======\n'
- '\n'
- 'Tuples are immutable sequences, typically used to store '
- 'collections of\n'
- 'heterogeneous data (such as the 2-tuples produced by the '
- '"enumerate()"\n'
- 'built-in). Tuples are also used for cases where an immutable '
- 'sequence\n'
- 'of homogeneous data is needed (such as allowing storage in a '
- '"set" or\n'
- '"dict" instance).\n'
- '\n'
- 'class tuple([iterable])\n'
- '\n'
- ' Tuples may be constructed in a number of ways:\n'
- '\n'
- ' * Using a pair of parentheses to denote the empty tuple: '
- '"()"\n'
- '\n'
- ' * Using a trailing comma for a singleton tuple: "a," or '
- '"(a,)"\n'
+ ' "insert()" method, the list length is added, as for slice '
+ 'indices.\n'
+ ' If it is still negative, it is truncated to zero, as for '
+ 'slice\n'
+ ' indices.\n'
'\n'
- ' * Separating items with commas: "a, b, c" or "(a, b, c)"\n'
+ ' Changed in version 2.3: Previously, all negative indices '
+ 'were\n'
+ ' truncated to zero.\n'
'\n'
- ' * Using the "tuple()" built-in: "tuple()" or '
- '"tuple(iterable)"\n'
+ '6. The "pop()" method\'s optional argument *i* defaults to "-1", '
+ 'so\n'
+ ' that by default the last item is removed and returned.\n'
'\n'
- ' The constructor builds a tuple whose items are the same and '
- 'in the\n'
- ' same order as *iterable*’s items. *iterable* may be either '
- 'a\n'
- ' sequence, a container that supports iteration, or an '
- 'iterator\n'
- ' object. If *iterable* is already a tuple, it is returned\n'
- ' unchanged. For example, "tuple(\'abc\')" returns "(\'a\', '
- '\'b\', \'c\')"\n'
- ' and "tuple( [1, 2, 3] )" returns "(1, 2, 3)". If no argument '
- 'is\n'
- ' given, the constructor creates a new empty tuple, "()".\n'
+ '7. The "sort()" and "reverse()" methods modify the list in '
+ 'place\n'
+ ' for economy of space when sorting or reversing a large list. '
+ 'To\n'
+ " remind you that they operate by side effect, they don't "
+ 'return the\n'
+ ' sorted or reversed list.\n'
'\n'
- ' Note that it is actually the comma which makes a tuple, not '
+ '8. The "sort()" method takes optional arguments for controlling '
'the\n'
- ' parentheses. The parentheses are optional, except in the '
- 'empty\n'
- ' tuple case, or when they are needed to avoid syntactic '
- 'ambiguity.\n'
- ' For example, "f(a, b, c)" is a function call with three '
- 'arguments,\n'
- ' while "f((a, b, c))" is a function call with a 3-tuple as the '
- 'sole\n'
- ' argument.\n'
- '\n'
- ' Tuples implement all of the common sequence operations.\n'
- '\n'
- 'For heterogeneous collections of data where access by name is '
- 'clearer\n'
- 'than access by index, "collections.namedtuple()" may be a more\n'
- 'appropriate choice than a simple tuple object.\n'
+ ' comparisons.\n'
'\n'
+ ' *cmp* specifies a custom comparison function of two arguments '
+ '(list\n'
+ ' items) which should return a negative, zero or positive '
+ 'number\n'
+ ' depending on whether the first argument is considered smaller '
+ 'than,\n'
+ ' equal to, or larger than the second argument: "cmp=lambda '
+ 'x,y:\n'
+ ' cmp(x.lower(), y.lower())". The default value is "None".\n'
+ '\n'
+ ' *key* specifies a function of one argument that is used to '
+ 'extract\n'
+ ' a comparison key from each list element: "key=str.lower". '
+ 'The\n'
+ ' default value is "None".\n'
'\n'
- 'Ranges\n'
- '======\n'
+ ' *reverse* is a boolean value. If set to "True", then the '
+ 'list\n'
+ ' elements are sorted as if each comparison were reversed.\n'
'\n'
- 'The "range" type represents an immutable sequence of numbers and '
+ ' In general, the *key* and *reverse* conversion processes are '
+ 'much\n'
+ ' faster than specifying an equivalent *cmp* function. This '
'is\n'
- 'commonly used for looping a specific number of times in "for" '
- 'loops.\n'
- '\n'
- 'class range(stop)\n'
- 'class range(start, stop[, step])\n'
- '\n'
- ' The arguments to the range constructor must be integers '
- '(either\n'
- ' built-in "int" or any object that implements the "__index__"\n'
- ' special method). If the *step* argument is omitted, it '
- 'defaults to\n'
- ' "1". If the *start* argument is omitted, it defaults to "0". '
- 'If\n'
- ' *step* is zero, "ValueError" is raised.\n'
- '\n'
- ' For a positive *step*, the contents of a range "r" are '
- 'determined\n'
- ' by the formula "r[i] = start + step*i" where "i >= 0" and '
- '"r[i] <\n'
- ' stop".\n'
- '\n'
- ' For a negative *step*, the contents of the range are still\n'
- ' determined by the formula "r[i] = start + step*i", but the\n'
- ' constraints are "i >= 0" and "r[i] > stop".\n'
- '\n'
- ' A range object will be empty if "r[0]" does not meet the '
- 'value\n'
- ' constraint. Ranges do support negative indices, but these '
- 'are\n'
- ' interpreted as indexing from the end of the sequence '
- 'determined by\n'
- ' the positive indices.\n'
- '\n'
- ' Ranges containing absolute values larger than "sys.maxsize" '
- 'are\n'
- ' permitted but some features (such as "len()") may raise\n'
- ' "OverflowError".\n'
- '\n'
- ' Range examples:\n'
- '\n'
- ' >>> list(range(10))\n'
- ' [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\n'
- ' >>> list(range(1, 11))\n'
- ' [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n'
- ' >>> list(range(0, 30, 5))\n'
- ' [0, 5, 10, 15, 20, 25]\n'
- ' >>> list(range(0, 10, 3))\n'
- ' [0, 3, 6, 9]\n'
- ' >>> list(range(0, -10, -1))\n'
- ' [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]\n'
- ' >>> list(range(0))\n'
- ' []\n'
- ' >>> list(range(1, 0))\n'
- ' []\n'
- '\n'
- ' Ranges implement all of the common sequence operations '
- 'except\n'
- ' concatenation and repetition (due to the fact that range '
- 'objects\n'
- ' can only represent sequences that follow a strict pattern '
- 'and\n'
- ' repetition and concatenation will usually violate that '
- 'pattern).\n'
- '\n'
- ' start\n'
- '\n'
- ' The value of the *start* parameter (or "0" if the '
- 'parameter was\n'
- ' not supplied)\n'
- '\n'
- ' stop\n'
- '\n'
- ' The value of the *stop* parameter\n'
- '\n'
- ' step\n'
- '\n'
- ' The value of the *step* parameter (or "1" if the parameter '
- 'was\n'
- ' not supplied)\n'
+ ' because *cmp* is called multiple times for each list element '
+ 'while\n'
+ ' *key* and *reverse* touch each element only once. Use\n'
+ ' "functools.cmp_to_key()" to convert an old-style *cmp* '
+ 'function to\n'
+ ' a *key* function.\n'
+ '\n'
+ ' Changed in version 2.3: Support for "None" as an equivalent '
+ 'to\n'
+ ' omitting *cmp* was added.\n'
'\n'
- 'The advantage of the "range" type over a regular "list" or '
- '"tuple" is\n'
- 'that a "range" object will always take the same (small) amount '
- 'of\n'
- 'memory, no matter the size of the range it represents (as it '
- 'only\n'
- 'stores the "start", "stop" and "step" values, calculating '
- 'individual\n'
- 'items and subranges as needed).\n'
- '\n'
- 'Range objects implement the "collections.abc.Sequence" ABC, and\n'
- 'provide features such as containment tests, element index '
- 'lookup,\n'
- 'slicing and support for negative indices (see Sequence Types — '
- 'list,\n'
- 'tuple, range):\n'
- '\n'
- '>>> r = range(0, 20, 2)\n'
- '>>> r\n'
- 'range(0, 20, 2)\n'
- '>>> 11 in r\n'
- 'False\n'
- '>>> 10 in r\n'
- 'True\n'
- '>>> r.index(10)\n'
- '5\n'
- '>>> r[5]\n'
- '10\n'
- '>>> r[:5]\n'
- 'range(0, 10, 2)\n'
- '>>> r[-1]\n'
- '18\n'
- '\n'
- 'Testing range objects for equality with "==" and "!=" compares '
- 'them as\n'
- 'sequences. That is, two range objects are considered equal if '
- 'they\n'
- 'represent the same sequence of values. (Note that two range '
- 'objects\n'
- 'that compare equal might have different "start", "stop" and '
- '"step"\n'
- 'attributes, for example "range(0) == range(2, 1, 3)" or '
- '"range(0, 3,\n'
- '2) == range(0, 4, 2)".)\n'
- '\n'
- 'Changed in version 3.2: Implement the Sequence ABC. Support '
- 'slicing\n'
- 'and negative indices. Test "int" objects for membership in '
- 'constant\n'
- 'time instead of iterating through all items.\n'
- '\n'
- 'Changed in version 3.3: Define ‘==’ and ‘!=’ to compare range '
- 'objects\n'
- 'based on the sequence of values they define (instead of '
- 'comparing\n'
- 'based on object identity).\n'
- '\n'
- 'New in version 3.3: The "start", "stop" and "step" attributes.\n'
+ ' Changed in version 2.4: Support for *key* and *reverse* was '
+ 'added.\n'
'\n'
- 'See also:\n'
- '\n'
- ' * The linspace recipe shows how to implement a lazy version '
- 'of\n'
- ' range suitable for floating point applications.\n',
- 'typesseq-mutable': 'Mutable Sequence Types\n'
+ '9. Starting with Python 2.3, the "sort()" method is guaranteed '
+ 'to\n'
+ ' be stable. A sort is stable if it guarantees not to change '
+ 'the\n'
+ ' relative order of elements that compare equal --- this is '
+ 'helpful\n'
+ ' for sorting in multiple passes (for example, sort by '
+ 'department,\n'
+ ' then by salary grade).\n'
+ '\n'
+ '10. **CPython implementation detail:** While a list is being\n'
+ ' sorted, the effect of attempting to mutate, or even inspect, '
+ 'the\n'
+ ' list is undefined. The C implementation of Python 2.3 and '
+ 'newer\n'
+ ' makes the list appear empty for the duration, and raises\n'
+ ' "ValueError" if it can detect that the list has been '
+ 'mutated\n'
+ ' during a sort.\n'
+ '\n'
+ '11. The value *n* is an integer, or an object implementing\n'
+ ' "__index__()". Zero and negative values of *n* clear the\n'
+ ' sequence. Items in the sequence are not copied; they are\n'
+ ' referenced multiple times, as explained for "s * n" under '
+ 'Sequence\n'
+ ' Types --- str, unicode, list, tuple, bytearray, buffer, '
+ 'xrange.\n',
+ 'typesseq-mutable': '\n'
+ 'Mutable Sequence Types\n'
'**********************\n'
'\n'
- 'The operations in the following table are defined on '
- 'mutable sequence\n'
- 'types. The "collections.abc.MutableSequence" ABC is '
- 'provided to make\n'
- 'it easier to correctly implement these operations on '
- 'custom sequence\n'
- 'types.\n'
- '\n'
- 'In the table *s* is an instance of a mutable sequence '
- 'type, *t* is any\n'
- 'iterable object and *x* is an arbitrary object that '
- 'meets any type and\n'
- 'value restrictions imposed by *s* (for example, '
- '"bytearray" only\n'
- 'accepts integers that meet the value restriction "0 <= x '
- '<= 255").\n'
+ 'List and "bytearray" objects support additional '
+ 'operations that allow\n'
+ 'in-place modification of the object. Other mutable '
+ 'sequence types\n'
+ '(when added to the language) should also support these '
+ 'operations.\n'
+ 'Strings and tuples are immutable sequence types: such '
+ 'objects cannot\n'
+ 'be modified once created. The following operations are '
+ 'defined on\n'
+ 'mutable sequence types (where *x* is an arbitrary '
+ 'object):\n'
'\n'
'+--------------------------------+----------------------------------+-----------------------+\n'
'| Operation | '
'Result | Notes '
'|\n'
- '|================================|==================================|=======================|\n'
+ '+================================+==================================+=======================+\n'
'| "s[i] = x" | item *i* of *s* is '
'replaced by | |\n'
'| | '
@@ -13405,100 +13201,186 @@ topics = {'assert': 'The "assert" statement\n'
'| | "s[i:j:k]" from the '
'list | |\n'
'+--------------------------------+----------------------------------+-----------------------+\n'
- '| "s.append(x)" | appends *x* to the '
- 'end of the | |\n'
- '| | sequence (same '
- 'as | |\n'
- '| | "s[len(s):len(s)] = '
- '[x]") | |\n'
- '+--------------------------------+----------------------------------+-----------------------+\n'
- '| "s.clear()" | removes all items '
- 'from *s* (same | (5) |\n'
- '| | as "del '
- 's[:]") | |\n'
+ '| "s.append(x)" | same as '
+ '"s[len(s):len(s)] = [x]" | (2) |\n'
'+--------------------------------+----------------------------------+-----------------------+\n'
- '| "s.copy()" | creates a shallow '
- 'copy of *s* | (5) |\n'
- '| | (same as '
- '"s[:]") | |\n'
- '+--------------------------------+----------------------------------+-----------------------+\n'
- '| "s.extend(t)" or "s += t" | extends *s* with the '
- 'contents of | |\n'
- '| | *t* (for the most '
- 'part the same | |\n'
- '| | as "s[len(s):len(s)] '
- '= t") | |\n'
+ '| "s.extend(t)" or "s += t" | for the most part the '
+ 'same as | (3) |\n'
+ '| | "s[len(s):len(s)] = '
+ 't" | |\n'
'+--------------------------------+----------------------------------+-----------------------+\n'
'| "s *= n" | updates *s* with its '
- 'contents | (6) |\n'
+ 'contents | (11) |\n'
'| | repeated *n* '
'times | |\n'
'+--------------------------------+----------------------------------+-----------------------+\n'
- '| "s.insert(i, x)" | inserts *x* into *s* '
- 'at the | |\n'
- '| | index given by *i* '
- '(same as | |\n'
- '| | "s[i:i] = '
- '[x]") | |\n'
+ '| "s.count(x)" | return number of '
+ "*i*'s for which | |\n"
+ '| | "s[i] == '
+ 'x" | |\n'
+ '+--------------------------------+----------------------------------+-----------------------+\n'
+ '| "s.index(x[, i[, j]])" | return smallest *k* '
+ 'such that | (4) |\n'
+ '| | "s[k] == x" and "i <= '
+ 'k < j" | |\n'
+ '+--------------------------------+----------------------------------+-----------------------+\n'
+ '| "s.insert(i, x)" | same as "s[i:i] = '
+ '[x]" | (5) |\n'
'+--------------------------------+----------------------------------+-----------------------+\n'
- '| "s.pop([i])" | retrieves the item at '
- '*i* and | (2) |\n'
- '| | also removes it from '
- '*s* | |\n'
+ '| "s.pop([i])" | same as "x = s[i]; '
+ 'del s[i]; | (6) |\n'
+ '| | return '
+ 'x" | |\n'
'+--------------------------------+----------------------------------+-----------------------+\n'
- '| "s.remove(x)" | remove the first item '
- 'from *s* | (3) |\n'
- '| | where "s[i]" is equal '
- 'to *x* | |\n'
+ '| "s.remove(x)" | same as "del '
+ 's[s.index(x)]" | (4) |\n'
'+--------------------------------+----------------------------------+-----------------------+\n'
'| "s.reverse()" | reverses the items of '
- '*s* in | (4) |\n'
+ '*s* in | (7) |\n'
'| | '
'place | '
'|\n'
'+--------------------------------+----------------------------------+-----------------------+\n'
+ '| "s.sort([cmp[, key[, | sort the items of *s* '
+ 'in place | (7)(8)(9)(10) |\n'
+ '| reverse]]])" '
+ '| '
+ '| |\n'
+ '+--------------------------------+----------------------------------+-----------------------+\n'
'\n'
'Notes:\n'
'\n'
- '1. *t* must have the same length as the slice it is '
+ '1. *t* must have the same length as the slice it is '
'replacing.\n'
'\n'
- '2. The optional argument *i* defaults to "-1", so that '
- 'by default\n'
- ' the last item is removed and returned.\n'
+ '2. The C implementation of Python has historically '
+ 'accepted\n'
+ ' multiple parameters and implicitly joined them into a '
+ 'tuple; this\n'
+ ' no longer works in Python 2.0. Use of this '
+ 'misfeature has been\n'
+ ' deprecated since Python 1.4.\n'
+ '\n'
+ '3. *t* can be any iterable object.\n'
+ '\n'
+ '4. Raises "ValueError" when *x* is not found in *s*. '
+ 'When a\n'
+ ' negative index is passed as the second or third '
+ 'parameter to the\n'
+ ' "index()" method, the list length is added, as for '
+ 'slice indices.\n'
+ ' If it is still negative, it is truncated to zero, as '
+ 'for slice\n'
+ ' indices.\n'
+ '\n'
+ ' Changed in version 2.3: Previously, "index()" didn\'t '
+ 'have arguments\n'
+ ' for specifying start and stop positions.\n'
+ '\n'
+ '5. When a negative index is passed as the first '
+ 'parameter to the\n'
+ ' "insert()" method, the list length is added, as for '
+ 'slice indices.\n'
+ ' If it is still negative, it is truncated to zero, as '
+ 'for slice\n'
+ ' indices.\n'
+ '\n'
+ ' Changed in version 2.3: Previously, all negative '
+ 'indices were\n'
+ ' truncated to zero.\n'
+ '\n'
+ '6. The "pop()" method\'s optional argument *i* defaults '
+ 'to "-1", so\n'
+ ' that by default the last item is removed and '
+ 'returned.\n'
+ '\n'
+ '7. The "sort()" and "reverse()" methods modify the list '
+ 'in place\n'
+ ' for economy of space when sorting or reversing a '
+ 'large list. To\n'
+ ' remind you that they operate by side effect, they '
+ "don't return the\n"
+ ' sorted or reversed list.\n'
'\n'
- '3. "remove()" raises "ValueError" when *x* is not found '
- 'in *s*.\n'
+ '8. The "sort()" method takes optional arguments for '
+ 'controlling the\n'
+ ' comparisons.\n'
'\n'
- '4. The "reverse()" method modifies the sequence in place '
- 'for\n'
- ' economy of space when reversing a large sequence. To '
- 'remind users\n'
- ' that it operates by side effect, it does not return '
- 'the reversed\n'
- ' sequence.\n'
+ ' *cmp* specifies a custom comparison function of two '
+ 'arguments (list\n'
+ ' items) which should return a negative, zero or '
+ 'positive number\n'
+ ' depending on whether the first argument is considered '
+ 'smaller than,\n'
+ ' equal to, or larger than the second argument: '
+ '"cmp=lambda x,y:\n'
+ ' cmp(x.lower(), y.lower())". The default value is '
+ '"None".\n'
'\n'
- '5. "clear()" and "copy()" are included for consistency '
- 'with the\n'
- ' interfaces of mutable containers that don’t support '
- 'slicing\n'
- ' operations (such as "dict" and "set"). "copy()" is '
- 'not part of the\n'
- ' "collections.abc.MutableSequence" ABC, but most '
- 'concrete mutable\n'
- ' sequence classes provide it.\n'
+ ' *key* specifies a function of one argument that is '
+ 'used to extract\n'
+ ' a comparison key from each list element: '
+ '"key=str.lower". The\n'
+ ' default value is "None".\n'
'\n'
- ' New in version 3.3: "clear()" and "copy()" methods.\n'
+ ' *reverse* is a boolean value. If set to "True", then '
+ 'the list\n'
+ ' elements are sorted as if each comparison were '
+ 'reversed.\n'
'\n'
- '6. The value *n* is an integer, or an object '
+ ' In general, the *key* and *reverse* conversion '
+ 'processes are much\n'
+ ' faster than specifying an equivalent *cmp* function. '
+ 'This is\n'
+ ' because *cmp* is called multiple times for each list '
+ 'element while\n'
+ ' *key* and *reverse* touch each element only once. '
+ 'Use\n'
+ ' "functools.cmp_to_key()" to convert an old-style '
+ '*cmp* function to\n'
+ ' a *key* function.\n'
+ '\n'
+ ' Changed in version 2.3: Support for "None" as an '
+ 'equivalent to\n'
+ ' omitting *cmp* was added.\n'
+ '\n'
+ ' Changed in version 2.4: Support for *key* and '
+ '*reverse* was added.\n'
+ '\n'
+ '9. Starting with Python 2.3, the "sort()" method is '
+ 'guaranteed to\n'
+ ' be stable. A sort is stable if it guarantees not to '
+ 'change the\n'
+ ' relative order of elements that compare equal --- '
+ 'this is helpful\n'
+ ' for sorting in multiple passes (for example, sort by '
+ 'department,\n'
+ ' then by salary grade).\n'
+ '\n'
+ '10. **CPython implementation detail:** While a list is '
+ 'being\n'
+ ' sorted, the effect of attempting to mutate, or even '
+ 'inspect, the\n'
+ ' list is undefined. The C implementation of Python '
+ '2.3 and newer\n'
+ ' makes the list appear empty for the duration, and '
+ 'raises\n'
+ ' "ValueError" if it can detect that the list has been '
+ 'mutated\n'
+ ' during a sort.\n'
+ '\n'
+ '11. The value *n* is an integer, or an object '
'implementing\n'
- ' "__index__()". Zero and negative values of *n* clear '
- 'the sequence.\n'
- ' Items in the sequence are not copied; they are '
- 'referenced multiple\n'
- ' times, as explained for "s * n" under Common Sequence '
- 'Operations.\n',
- 'unary': 'Unary arithmetic and bitwise operations\n'
+ ' "__index__()". Zero and negative values of *n* '
+ 'clear the\n'
+ ' sequence. Items in the sequence are not copied; '
+ 'they are\n'
+ ' referenced multiple times, as explained for "s * n" '
+ 'under Sequence\n'
+ ' Types --- str, unicode, list, tuple, bytearray, '
+ 'buffer, xrange.\n',
+ 'unary': '\n'
+ 'Unary arithmetic and bitwise operations\n'
'***************************************\n'
'\n'
'All unary arithmetic and bitwise operations have the same '
@@ -13514,13 +13396,14 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
'The unary "~" (invert) operator yields the bitwise inversion of '
'its\n'
- 'integer argument. The bitwise inversion of "x" is defined as\n'
- '"-(x+1)". It only applies to integral numbers.\n'
+ 'plain or long integer argument. The bitwise inversion of "x" is\n'
+ 'defined as "-(x+1)". It only applies to integral numbers.\n'
'\n'
'In all three cases, if the argument does not have the proper type, '
'a\n'
'"TypeError" exception is raised.\n',
- 'while': 'The "while" statement\n'
+ 'while': '\n'
+ 'The "while" statement\n'
'*********************\n'
'\n'
'The "while" statement is used for repeated execution as long as an\n'
@@ -13539,32 +13422,34 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
'A "break" statement executed in the first suite terminates the '
'loop\n'
- 'without executing the "else" clause’s suite. A "continue" '
+ 'without executing the "else" clause\'s suite. A "continue" '
'statement\n'
'executed in the first suite skips the rest of the suite and goes '
'back\n'
'to testing the expression.\n',
- 'with': 'The "with" statement\n'
+ 'with': '\n'
+ 'The "with" statement\n'
'********************\n'
'\n'
+ 'New in version 2.5.\n'
+ '\n'
'The "with" statement is used to wrap the execution of a block with\n'
'methods defined by a context manager (see section With Statement\n'
- 'Context Managers). This allows common "try"…"except"…"finally" '
- 'usage\n'
- 'patterns to be encapsulated for convenient reuse.\n'
+ 'Context Managers). This allows common "try"..."except"..."finally"\n'
+ 'usage patterns to be encapsulated for convenient reuse.\n'
'\n'
' with_stmt ::= "with" with_item ("," with_item)* ":" suite\n'
' with_item ::= expression ["as" target]\n'
'\n'
- 'The execution of the "with" statement with one “item” proceeds as\n'
+ 'The execution of the "with" statement with one "item" proceeds as\n'
'follows:\n'
'\n'
'1. The context expression (the expression given in the "with_item")\n'
' is evaluated to obtain a context manager.\n'
'\n'
- '2. The context manager’s "__exit__()" is loaded for later use.\n'
+ '2. The context manager\'s "__exit__()" is loaded for later use.\n'
'\n'
- '3. The context manager’s "__enter__()" method is invoked.\n'
+ '3. The context manager\'s "__enter__()" method is invoked.\n'
'\n'
'4. If a target was included in the "with" statement, the return\n'
' value from "__enter__()" is assigned to it.\n'
@@ -13578,7 +13463,7 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
'5. The suite is executed.\n'
'\n'
- '6. The context manager’s "__exit__()" method is invoked. If an\n'
+ '6. The context manager\'s "__exit__()" method is invoked. If an\n'
' exception caused the suite to be exited, its type, value, and\n'
' traceback are passed as arguments to "__exit__()". Otherwise, '
'three\n'
@@ -13610,42 +13495,84 @@ topics = {'assert': 'The "assert" statement\n'
' with B() as b:\n'
' suite\n'
'\n'
- 'Changed in version 3.1: Support for multiple context expressions.\n'
+ 'Note: In Python 2.5, the "with" statement is only allowed when the\n'
+ ' "with_statement" feature has been enabled. It is always enabled '
+ 'in\n'
+ ' Python 2.6.\n'
+ '\n'
+ 'Changed in version 2.7: Support for multiple context expressions.\n'
'\n'
'See also:\n'
'\n'
- ' **PEP 343** - The “with” statement\n'
+ ' **PEP 343** - The "with" statement\n'
' The specification, background, and examples for the Python '
'"with"\n'
' statement.\n',
- 'yield': 'The "yield" statement\n'
+ 'yield': '\n'
+ 'The "yield" statement\n'
'*********************\n'
'\n'
' yield_stmt ::= yield_expression\n'
'\n'
- 'A "yield" statement is semantically equivalent to a yield '
- 'expression.\n'
- 'The yield statement can be used to omit the parentheses that would\n'
- 'otherwise be required in the equivalent yield expression '
- 'statement.\n'
- 'For example, the yield statements\n'
- '\n'
- ' yield <expr>\n'
- ' yield from <expr>\n'
+ 'The "yield" statement is only used when defining a generator '
+ 'function,\n'
+ 'and is only used in the body of the generator function. Using a\n'
+ '"yield" statement in a function definition is sufficient to cause '
+ 'that\n'
+ 'definition to create a generator function instead of a normal\n'
+ 'function.\n'
'\n'
- 'are equivalent to the yield expression statements\n'
+ 'When a generator function is called, it returns an iterator known '
+ 'as a\n'
+ 'generator iterator, or more commonly, a generator. The body of '
+ 'the\n'
+ "generator function is executed by calling the generator's "
+ '"next()"\n'
+ 'method repeatedly until it raises an exception.\n'
'\n'
- ' (yield <expr>)\n'
- ' (yield from <expr>)\n'
+ 'When a "yield" statement is executed, the state of the generator '
+ 'is\n'
+ 'frozen and the value of "expression_list" is returned to '
+ '"next()"\'s\n'
+ 'caller. By "frozen" we mean that all local state is retained,\n'
+ 'including the current bindings of local variables, the instruction\n'
+ 'pointer, and the internal evaluation stack: enough information is\n'
+ 'saved so that the next time "next()" is invoked, the function can\n'
+ 'proceed exactly as if the "yield" statement were just another '
+ 'external\n'
+ 'call.\n'
'\n'
- 'Yield expressions and statements are only used when defining a\n'
- '*generator* function, and are only used in the body of the '
- 'generator\n'
- 'function. Using yield in a function definition is sufficient to '
- 'cause\n'
- 'that definition to create a generator function instead of a normal\n'
- 'function.\n'
+ 'As of Python version 2.5, the "yield" statement is now allowed in '
+ 'the\n'
+ '"try" clause of a "try" ... "finally" construct. If the generator '
+ 'is\n'
+ 'not resumed before it is finalized (by reaching a zero reference '
+ 'count\n'
+ "or by being garbage collected), the generator-iterator's "
+ '"close()"\n'
+ 'method will be called, allowing any pending "finally" clauses to\n'
+ 'execute.\n'
'\n'
'For full details of "yield" semantics, refer to the Yield '
'expressions\n'
- 'section.\n'}
+ 'section.\n'
+ '\n'
+ 'Note: In Python 2.2, the "yield" statement was only allowed when '
+ 'the\n'
+ ' "generators" feature has been enabled. This "__future__" import\n'
+ ' statement was used to enable the feature:\n'
+ '\n'
+ ' from __future__ import generators\n'
+ '\n'
+ 'See also:\n'
+ '\n'
+ ' **PEP 255** - Simple Generators\n'
+ ' The proposal for adding generators and the "yield" statement '
+ 'to\n'
+ ' Python.\n'
+ '\n'
+ ' **PEP 342** - Coroutines via Enhanced Generators\n'
+ ' The proposal that, among other generator enhancements, '
+ 'proposed\n'
+ ' allowing "yield" to appear inside a "try" ... "finally" '
+ 'block.\n'}