| # Autogenerated by Sphinx on Tue Oct 13 08:05:49 2026 | |
| # as part of the release process. | |
| topics = { | |
| 'assert': r'''The "assert" statement | |
| ********************** | |
| Assert statements are a convenient way to insert debugging assertions | |
| into a program: | |
| assert_stmt: "assert" expression ["," expression] | |
| The simple form, "assert expression", is equivalent to | |
| if __debug__: | |
| if not expression: raise AssertionError | |
| The extended form, "assert expression1, expression2", is equivalent to | |
| if __debug__: | |
| if not expression1: raise AssertionError(expression2) | |
| These equivalences assume that "__debug__" and "AssertionError" refer | |
| to the built-in variables with those names. In the current | |
| implementation, the built-in variable "__debug__" is "True" under | |
| normal circumstances, "False" when optimization is requested (command | |
| line option "-O"). The current code generator emits no code for an | |
| "assert" statement when optimization is requested at compile time. | |
| Note that it is unnecessary to include the source code for the | |
| expression that failed in the error message; it will be displayed as | |
| part of the stack trace. | |
| Assignments to "__debug__" are illegal. The value for the built-in | |
| variable is determined when the interpreter starts. | |
| ''', | |
| 'assignment': r'''Assignment statements | |
| ********************* | |
| Assignment statements are used to (re)bind names to values and to | |
| modify attributes or items of mutable objects: | |
| assignment_stmt: (target_list "=")+ (starred_expression | yield_expression) | |
| target_list: target ("," target)* [","] | |
| target: identifier | |
| | "(" [target_list] ")" | |
| | "[" [target_list] "]" | |
| | attributeref | |
| | subscription | |
| | "*" target | |
| (See section Primaries for the syntax definitions for *attributeref* | |
| and *subscription*.) | |
| An assignment statement evaluates the expression list (remember that | |
| this can be a single expression or a comma-separated list, the latter | |
| yielding a tuple) and assigns the single resulting object to each of | |
| the target lists, from left to right. | |
| Assignment is defined recursively depending on the form of the target | |
| (list). When a target is part of a mutable object (an attribute | |
| reference or subscription), the mutable object must ultimately perform | |
| the assignment and decide about its validity, and may raise an | |
| exception if the assignment is unacceptable. The rules observed by | |
| various types and the exceptions raised are given with the definition | |
| of the object types (see section The standard type hierarchy). | |
| Assignment of an object to a target list, optionally enclosed in | |
| parentheses or square brackets, is recursively defined as follows. | |
| * If the target list is a single target with no trailing comma, | |
| optionally in parentheses, the object is assigned to that target. | |
| * Else: | |
| * If the target list contains one target prefixed with an asterisk, | |
| called a “starred” target: The object must be an iterable with at | |
| least as many items as there are targets in the target list, minus | |
| one. The first items of the iterable are assigned, from left to | |
| right, to the targets before the starred target. The final items | |
| of the iterable are assigned to the targets after the starred | |
| target. A list of the remaining items in the iterable is then | |
| assigned to the starred target (the list can be empty). | |
| * Else: The object must be an iterable with the same number of items | |
| as there are targets in the target list, and the items are | |
| assigned, from left to right, to the corresponding targets. | |
| Assignment of an object to a single target is recursively defined as | |
| follows. | |
| * If the target is an identifier (name): | |
| * If the name does not occur in a "global" or "nonlocal" statement | |
| in the current code block: the name is bound to the object in the | |
| current local namespace. | |
| * Otherwise: the name is bound to the object in the global namespace | |
| or the outer namespace determined by "nonlocal", respectively. | |
| The name is rebound if it was already bound. This may cause the | |
| reference count for the object previously bound to the name to reach | |
| zero, causing the object to be deallocated and its destructor (if it | |
| has one) to be called. | |
| * If the target is an attribute reference: The primary expression in | |
| the reference is evaluated. It should yield an object with | |
| assignable attributes; if this is not the case, "TypeError" is | |
| raised. That object is then asked to assign the assigned object to | |
| the given attribute; if it cannot perform the assignment, it raises | |
| an exception (usually but not necessarily "AttributeError"). | |
| Note: If the object is a class instance and the attribute reference | |
| occurs on both sides of the assignment operator, the right-hand side | |
| expression, "a.x" can access either an instance attribute or (if no | |
| instance attribute exists) a class attribute. The left-hand side | |
| target "a.x" is always set as an instance attribute, creating it if | |
| necessary. Thus, the two occurrences of "a.x" do not necessarily | |
| refer to the same attribute: if the right-hand side expression | |
| refers to a class attribute, the left-hand side creates a new | |
| instance attribute as the target of the assignment: | |
| class Cls: | |
| x = 3 # class variable | |
| inst = Cls() | |
| inst.x = inst.x + 1 # writes inst.x as 4 leaving Cls.x as 3 | |
| This description does not necessarily apply to descriptor | |
| attributes, such as properties created with "@property". | |
| * If the target is a subscription: The primary expression in the | |
| reference is evaluated. Next, the subscript expression is evaluated. | |
| Then, the primary’s "__setitem__()" method is called with two | |
| arguments: the subscript and the assigned object. | |
| Typically, "__setitem__()" is defined on mutable sequence objects | |
| (such as lists) and mapping objects (such as dictionaries), and | |
| behaves as follows. | |
| If the primary is a mutable sequence object (such as a list), the | |
| subscript must yield an integer. If it is negative, the sequence’s | |
| length is added to it. The resulting value must be a nonnegative | |
| integer less than the sequence’s length, and the sequence is asked | |
| to assign the assigned object to its item with that index. If the | |
| index is out of range, "IndexError" is raised (assignment to a | |
| subscripted sequence cannot add new items to a list). | |
| If the primary is a mapping object (such as a dictionary), the | |
| subscript must have a type compatible with the mapping’s key type, | |
| and the mapping is then asked to create a key/value pair which maps | |
| the subscript to the assigned object. This can either replace an | |
| existing key/value pair with the same key value, or insert a new | |
| key/value pair (if no key with the same value existed). | |
| If the target is a slicing: The primary expression should evaluate | |
| to a mutable sequence object (such as a list). The assigned object | |
| should be *iterable*. The slicing’s lower and upper bounds should be | |
| integers; if they are "None" (or not present), the defaults are zero | |
| and the sequence’s length. If either bound is negative, the | |
| sequence’s length is added to it. The resulting bounds are clipped | |
| to lie between zero and the sequence’s length, inclusive. Finally, | |
| the sequence object is asked to replace the slice with the items of | |
| the assigned sequence. The length of the slice may be different | |
| from the length of the assigned sequence, thus changing the length | |
| of the target sequence, if the target sequence allows it. | |
| Although the definition of assignment implies that overlaps between | |
| the left-hand side and the right-hand side are ‘simultaneous’ (for | |
| example "a, b = b, a" swaps two variables), overlaps *within* the | |
| collection of assigned-to variables occur left-to-right, sometimes | |
| resulting in confusion. For instance, the following program prints | |
| "[0, 2]": | |
| x = [0, 1] | |
| i = 0 | |
| i, x[i] = 1, 2 # i is updated, then x[i] is updated | |
| print(x) | |
| See also: | |
| **PEP 3132** - Extended Iterable Unpacking | |
| The specification for the "*target" feature. | |
| Augmented assignment statements | |
| =============================== | |
| Augmented assignment is the combination, in a single statement, of a | |
| binary operation and an assignment statement: | |
| augmented_assignment_stmt: augtarget augop (expression_list | yield_expression) | |
| augtarget: identifier | attributeref | subscription | |
| augop: "+=" | "-=" | "*=" | "@=" | "/=" | "//=" | "%=" | "**=" | |
| | ">>=" | "<<=" | "&=" | "^=" | "|=" | |
| (See section Primaries for the syntax definitions of the last three | |
| symbols.) | |
| An augmented assignment evaluates the target (which, unlike normal | |
| assignment statements, cannot be an unpacking) and the expression | |
| list, performs the binary operation specific to the type of assignment | |
| on the two operands, and assigns the result to the original target. | |
| The target is only evaluated once. | |
| An augmented assignment statement like "x += 1" can be rewritten as "x | |
| = x + 1" to achieve a similar, but not exactly equal effect. In the | |
| augmented version, "x" is only evaluated once. Also, when possible, | |
| the actual operation is performed *in-place*, meaning that rather than | |
| creating a new object and assigning that to the target, the old object | |
| is modified instead. | |
| Unlike normal assignments, augmented assignments evaluate the left- | |
| hand side *before* evaluating the right-hand side. For example, "a[i] | |
| += f(x)" first looks-up "a[i]", then it evaluates "f(x)" and performs | |
| the addition, and lastly, it writes the result back to "a[i]". | |
| With the exception of assigning to tuples and multiple targets in a | |
| single statement, the assignment done by augmented assignment | |
| statements is handled the same way as normal assignments. Similarly, | |
| with the exception of the possible *in-place* behavior, the binary | |
| operation performed by augmented assignment is the same as the normal | |
| binary operations. | |
| For targets which are attribute references, the same caveat about | |
| class and instance attributes applies as for regular assignments. | |
| Annotated assignment statements | |
| =============================== | |
| *Annotation* assignment is the combination, in a single statement, of | |
| a variable or attribute annotation and an optional assignment | |
| statement: | |
| annotated_assignment_stmt: augtarget ":" expression | |
| ["=" (starred_expression | yield_expression)] | |
| The difference from normal Assignment statements is that only a single | |
| target is allowed. | |
| The assignment target is considered “simple” if it consists of a | |
| single name that is not enclosed in parentheses. For simple assignment | |
| targets, if in class or module scope, the annotations are gathered in | |
| a lazily evaluated annotation scope. The annotations can be evaluated | |
| using the "__annotations__" attribute of a class or module, or using | |
| the facilities in the "annotationlib" module. | |
| If the assignment target is not simple (an attribute, subscript node, | |
| or parenthesized name), the annotation is never evaluated. | |
| If a name is annotated in a function scope, then this name is local | |
| for that scope. Annotations are never evaluated and stored in function | |
| scopes. | |
| If the right hand side is present, an annotated assignment performs | |
| the actual assignment as if there was no annotation present. If the | |
| right hand side is not present for an expression target, then the | |
| interpreter evaluates the target except for the last "__setitem__()" | |
| or "__setattr__()" call. | |
| See also: | |
| **PEP 526** - Syntax for Variable Annotations | |
| The proposal that added syntax for annotating the types of | |
| variables (including class variables and instance variables), | |
| instead of expressing them through comments. | |
| **PEP 484** - Type hints | |
| The proposal that added the "typing" module to provide a standard | |
| syntax for type annotations that can be used in static analysis | |
| tools and IDEs. | |
| Changed in version 3.8: Now annotated assignments allow the same | |
| expressions in the right hand side as regular assignments. Previously, | |
| some expressions (like un-parenthesized tuple expressions) caused a | |
| syntax error. | |
| Changed in version 3.14: Annotations are now lazily evaluated in a | |
| separate annotation scope. If the assignment target is not simple, | |
| annotations are never evaluated. | |
| ''', | |
| 'assignment-expressions': r'''Assignment expressions | |
| ********************** | |
| assignment_expression: [identifier ":="] expression | |
| An assignment expression (sometimes also called a “named expression” | |
| or “walrus”) assigns an "expression" to an "identifier", while also | |
| returning the value of the "expression". | |
| One common use case is when handling matched regular expressions: | |
| if matching := pattern.search(data): | |
| do_something(matching) | |
| Or, when processing a file stream in chunks: | |
| while chunk := file.read(9000): | |
| process(chunk) | |
| Assignment expressions must be surrounded by parentheses when used as | |
| expression statements and when used as sub-expressions in slicing, | |
| conditional, lambda, keyword-argument, and comprehension-if | |
| expressions and in "assert", "with", and "assignment" statements. In | |
| all other places where they can be used, parentheses are not required, | |
| including in "if" and "while" statements. | |
| Added in version 3.8: See **PEP 572** for more details about | |
| assignment expressions. | |
| ''', | |
| 'async': r'''Coroutines | |
| ********** | |
| Added in version 3.5. | |
| Coroutine function definition | |
| ============================= | |
| async_funcdef: [decorators] "async" "def" funcname "(" [parameter_list] ")" | |
| ["->" expression] ":" suite | |
| Execution of Python coroutines can be suspended and resumed at many | |
| points (see *coroutine*). "await" expressions, "async for" and "async | |
| with" can only be used in the body of a coroutine function. | |
| Functions defined with "async def" syntax are always coroutine | |
| functions, even if they do not contain "await" or "async" keywords. | |
| It is a "SyntaxError" to use a "yield from" expression inside the body | |
| of a coroutine function. | |
| An example of a coroutine function: | |
| async def func(param1, param2): | |
| do_stuff() | |
| await some_coroutine() | |
| Changed in version 3.7: "await" and "async" are now keywords; | |
| previously they were only treated as such inside the body of a | |
| coroutine function. | |
| The "async for" statement | |
| ========================= | |
| async_for_stmt: "async" for_stmt | |
| An *asynchronous iterable* provides an "__aiter__" method that | |
| directly returns an *asynchronous iterator*, which can call | |
| asynchronous code in its "__anext__" method. | |
| The "async for" statement allows convenient iteration over | |
| asynchronous iterables. | |
| The following code: | |
| async for TARGET in ITER: | |
| SUITE | |
| else: | |
| SUITE2 | |
| Is semantically equivalent to: | |
| iter = (ITER).__aiter__() | |
| running = True | |
| while running: | |
| try: | |
| TARGET = await iter.__anext__() | |
| except StopAsyncIteration: | |
| running = False | |
| else: | |
| SUITE | |
| else: | |
| SUITE2 | |
| except that implicit special method lookup is used for "__aiter__()" | |
| and "__anext__()". | |
| It is a "SyntaxError" to use an "async for" statement outside the body | |
| of a coroutine function. | |
| The "async with" statement | |
| ========================== | |
| async_with_stmt: "async" with_stmt | |
| An *asynchronous context manager* is a *context manager* that is able | |
| to suspend execution in its *enter* and *exit* methods. | |
| The following code: | |
| async with EXPRESSION as TARGET: | |
| SUITE | |
| is semantically equivalent to: | |
| manager = (EXPRESSION) | |
| aenter = manager.__aenter__ | |
| aexit = manager.__aexit__ | |
| value = await aenter() | |
| hit_except = False | |
| try: | |
| TARGET = value | |
| SUITE | |
| except: | |
| hit_except = True | |
| if not await aexit(*sys.exc_info()): | |
| raise | |
| finally: | |
| if not hit_except: | |
| await aexit(None, None, None) | |
| except that implicit special method lookup is used for "__aenter__()" | |
| and "__aexit__()". | |
| It is a "SyntaxError" to use an "async with" statement outside the | |
| body of a coroutine function. | |
| See also: | |
| **PEP 492** - Coroutines with async and await syntax | |
| The proposal that made coroutines a proper standalone concept in | |
| Python, and added supporting syntax. | |
| ''', | |
| 'atom-identifiers': r'''Identifiers (Names) | |
| ******************* | |
| An identifier occurring as an atom is a name. See section Names | |
| (identifiers and keywords) for lexical definition and section Naming | |
| and binding for documentation of naming and binding. | |
| When the name is bound to an object, evaluation of the atom yields | |
| that object. When a name is not bound, an attempt to evaluate it | |
| raises a "NameError" exception. | |
| Private name mangling | |
| ===================== | |
| When an identifier that textually occurs in a class definition begins | |
| with two or more underscore characters and does not end in two or more | |
| underscores, it is considered a *private name* of that class. | |
| See also: The class specifications. | |
| More precisely, private names are transformed to a longer form before | |
| code is generated for them. If the transformed name is longer than | |
| 255 characters, implementation-defined truncation may happen. | |
| The transformation is independent of the syntactical context in which | |
| the identifier is used but only the following private identifiers are | |
| mangled: | |
| * Any name used as the name of a variable that is assigned or read or | |
| any name of an attribute being accessed. | |
| The "__name__" attribute of nested functions, classes, and type | |
| aliases is however not mangled. | |
| * The name of imported modules, e.g., "__spam" in "import __spam". If | |
| the module is part of a package (i.e., its name contains a dot), the | |
| name is *not* mangled, e.g., the "__foo" in "import __foo.bar" is | |
| not mangled. | |
| * The name of an imported member, e.g., "__f" in "from spam import | |
| __f". | |
| The transformation rule is defined as follows: | |
| * The class name, with leading underscores removed and a single | |
| leading underscore inserted, is inserted in front of the identifier, | |
| e.g., the identifier "__spam" occurring in a class named "Foo", | |
| "_Foo" or "__Foo" is transformed to "_Foo__spam". | |
| * If the class name consists only of underscores, the transformation | |
| is the identity, e.g., the identifier "__spam" occurring in a class | |
| named "_" or "__" is left as is. | |
| ''', | |
| 'atom-literals': r'''Literals | |
| ******** | |
| A *literal* is a textual representation of a value. Python supports | |
| numeric, string and bytes literals. Format strings and template | |
| strings are treated as string literals. | |
| Numeric literals consist of a single "NUMBER" token, which names an | |
| integer, floating-point number, or an imaginary number. See the | |
| Numeric literals section in Lexical analysis documentation for | |
| details. | |
| String and bytes literals may consist of several tokens. See section | |
| String literal concatenation for details. | |
| Note that negative and complex numbers, like "-3" or "3+4.2j", are | |
| syntactically not literals, but unary or binary arithmetic operations | |
| involving the "-" or "+" operator. | |
| Evaluation of a literal yields an object of the given type ("int", | |
| "float", "complex", "str", "bytes", or "Template") with the given | |
| value. The value may be approximated in the case of floating-point and | |
| imaginary literals. | |
| The formal grammar for literals is: | |
| literal: strings | NUMBER | |
| Literals and object identity | |
| ============================ | |
| All literals correspond to immutable data types, and hence the | |
| object’s identity is less important than its value. Multiple | |
| evaluations of literals with the same value (either the same | |
| occurrence in the program text or a different occurrence) may obtain | |
| the same object or a different object with the same value. | |
| CPython implementation detail: For example, in CPython, *small* | |
| integers with the same value evaluate to the same object: | |
| >>> x = 7 | |
| >>> y = 7 | |
| >>> x is y | |
| True | |
| However, large integers evaluate to different objects: | |
| >>> x = 123456789 | |
| >>> y = 123456789 | |
| >>> x is y | |
| False | |
| This behavior may change in future versions of CPython. In particular, | |
| the boundary between “small” and “large” integers has already changed | |
| in the past.CPython will emit a "SyntaxWarning" when you compare | |
| literals using "is": | |
| >>> x = 7 | |
| >>> x is 7 | |
| <input>:1: SyntaxWarning: "is" with 'int' literal. Did you mean "=="? | |
| True | |
| See When can I rely on identity tests with the is operator? for more | |
| information. | |
| Template strings are immutable but may reference mutable objects as | |
| "Interpolation" values. For the purposes of this section, two | |
| t-strings have the “same value” if both their structure and the | |
| *identity* of the values match. | |
| **CPython implementation detail:** Currently, each evaluation of a | |
| template string results in a different object. | |
| String literal concatenation | |
| ============================ | |
| Multiple adjacent string or bytes literals, possibly using different | |
| quoting conventions, are allowed, and their meaning is the same as | |
| their concatenation: | |
| >>> "hello" 'world' | |
| "helloworld" | |
| This feature is defined at the syntactical level, so it only works | |
| with literals. To concatenate string expressions at run time, the ‘+’ | |
| operator may be used: | |
| >>> greeting = "Hello" | |
| >>> space = " " | |
| >>> name = "Blaise" | |
| >>> print(greeting + space + name) # not: print(greeting space name) | |
| Hello Blaise | |
| Literal concatenation can freely mix raw strings, triple-quoted | |
| strings, and formatted string literals. For example: | |
| >>> "Hello" r', ' f"{name}!" | |
| "Hello, Blaise!" | |
| This feature can be used to reduce the number of backslashes needed, | |
| to split long strings conveniently across long lines, or even to add | |
| comments to parts of strings. For example: | |
| re.compile("[A-Za-z_]" # letter or underscore | |
| "[A-Za-z0-9_]*" # letter, digit or underscore | |
| ) | |
| However, bytes literals may only be combined with other byte literals; | |
| not with string literals of any kind. Also, template string literals | |
| may only be combined with other template string literals: | |
| >>> t"Hello" t"{name}!" | |
| Template(strings=('Hello', '!'), interpolations=(...)) | |
| Formally: | |
| strings: (STRING | fstring)+ | tstring+ | |
| ''', | |
| 'attribute-access': r'''Customizing attribute access | |
| **************************** | |
| The following methods can be defined to customize the meaning of | |
| attribute access (use of, assignment to, or deletion of "x.name") for | |
| class instances. | |
| object.__getattr__(self, name) | |
| Called when the default attribute access fails with an | |
| "AttributeError" (either "__getattribute__()" raises an | |
| "AttributeError" because *name* is not an instance attribute or an | |
| attribute in the class tree for "self"; or "__get__()" of a *name* | |
| property raises "AttributeError"). This method should either | |
| return the (computed) attribute value or raise an "AttributeError" | |
| exception. The "object" class itself does not provide this method. | |
| Note that if the attribute is found through the normal mechanism, | |
| "__getattr__()" is not called. (This is an intentional asymmetry | |
| between "__getattr__()" and "__setattr__()".) This is done both for | |
| efficiency reasons and because otherwise "__getattr__()" would have | |
| no way to access other attributes of the instance. Note that at | |
| least for instance variables, you can take total control by not | |
| inserting any values in the instance attribute dictionary (but | |
| instead inserting them in another object). See the | |
| "__getattribute__()" method below for a way to actually get total | |
| control over attribute access. | |
| object.__getattribute__(self, name) | |
| Called unconditionally to implement attribute accesses for | |
| instances of the class. If the class also defines "__getattr__()", | |
| the latter will not be called unless "__getattribute__()" either | |
| calls it explicitly or raises an "AttributeError". This method | |
| should return the (computed) attribute value or raise an | |
| "AttributeError" exception. In order to avoid infinite recursion in | |
| this method, its implementation should always call the base class | |
| method with the same name to access any attributes it needs, for | |
| example, "object.__getattribute__(self, name)". | |
| Note: | |
| This method may still be bypassed when looking up special methods | |
| as the result of implicit invocation via language syntax or | |
| built-in functions. See Special method lookup. | |
| For certain sensitive attribute accesses, raises an auditing event | |
| "object.__getattr__" with arguments "obj" and "name". | |
| object.__setattr__(self, name, value) | |
| Called when an attribute assignment is attempted. This is called | |
| instead of the normal mechanism (i.e. store the value in the | |
| instance dictionary). *name* is the attribute name, *value* is the | |
| value to be assigned to it. | |
| If "__setattr__()" wants to assign to an instance attribute, it | |
| should call the base class method with the same name, for example, | |
| "object.__setattr__(self, name, value)". | |
| For certain sensitive attribute assignments, raises an auditing | |
| event "object.__setattr__" with arguments "obj", "name", "value". | |
| object.__delattr__(self, name) | |
| Like "__setattr__()" but for attribute deletion instead of | |
| assignment. This should only be implemented if "del obj.name" is | |
| meaningful for the object. | |
| For certain sensitive attribute deletions, raises an auditing event | |
| "object.__delattr__" with arguments "obj" and "name". | |
| object.__dir__(self) | |
| Called when "dir()" is called on the object. An iterable must be | |
| returned. "dir()" converts the returned iterable to a list and | |
| sorts it. | |
| Customizing module attribute access | |
| =================================== | |
| module.__getattr__() | |
| module.__dir__() | |
| Special names "__getattr__" and "__dir__" can be also used to | |
| customize access to module attributes. The "__getattr__" function at | |
| the module level should accept one argument which is the name of an | |
| attribute and return the computed value or raise an "AttributeError". | |
| If an attribute is not found on a module object through the normal | |
| lookup, i.e. "object.__getattribute__()", then "__getattr__" is | |
| searched in the module "__dict__" before raising an "AttributeError". | |
| If found, it is called with the attribute name and the result is | |
| returned. | |
| The "__dir__" function should accept no arguments, and return an | |
| iterable of strings that represents the names accessible on module. If | |
| present, this function overrides the standard "dir()" search on a | |
| module. | |
| module.__class__ | |
| For a more fine grained customization of the module behavior (setting | |
| attributes, properties, etc.), one can set the "__class__" attribute | |
| of a module object to a subclass of "types.ModuleType". For example: | |
| import sys | |
| from types import ModuleType | |
| class VerboseModule(ModuleType): | |
| def __repr__(self): | |
| return f'Verbose {self.__name__}' | |
| def __setattr__(self, attr, value): | |
| print(f'Setting {attr}...') | |
| super().__setattr__(attr, value) | |
| sys.modules[__name__].__class__ = VerboseModule | |
| Note: | |
| Defining module "__getattr__" and setting module "__class__" only | |
| affect lookups made using the attribute access syntax – directly | |
| accessing the module globals (whether by code within the module, or | |
| via a reference to the module’s globals dictionary) is unaffected. | |
| Changed in version 3.5: "__class__" module attribute is now writable. | |
| Added in version 3.7: "__getattr__" and "__dir__" module attributes. | |
| See also: | |
| **PEP 562** - Module __getattr__ and __dir__ | |
| Describes the "__getattr__" and "__dir__" functions on modules. | |
| Implementing Descriptors | |
| ======================== | |
| The following methods only apply when an instance of the class | |
| containing the method (a so-called *descriptor* class) appears in an | |
| *owner* class (the descriptor must be in either the owner’s class | |
| dictionary or in the class dictionary for one of its parents). In the | |
| examples below, “the attribute” refers to the attribute whose name is | |
| the key of the property in the owner class’ "__dict__". The "object" | |
| class itself does not implement any of these protocols. | |
| object.__get__(self, instance, owner=None) | |
| Called to get the attribute of the owner class (class attribute | |
| access) or of an instance of that class (instance attribute | |
| access). The optional *owner* argument is the owner class, while | |
| *instance* is the instance that the attribute was accessed through, | |
| or "None" when the attribute is accessed through the *owner*. | |
| This method should return the computed attribute value or raise an | |
| "AttributeError" exception. | |
| **PEP 252** specifies that "__get__()" is callable with one or two | |
| arguments. Python’s own built-in descriptors support this | |
| specification; however, it is likely that some third-party tools | |
| have descriptors that require both arguments. Python’s own | |
| "__getattribute__()" implementation always passes in both arguments | |
| whether they are required or not. | |
| object.__set__(self, instance, value) | |
| Called to set the attribute on an instance *instance* of the owner | |
| class to a new value, *value*. | |
| Note, adding "__set__()" or "__delete__()" changes the kind of | |
| descriptor to a “data descriptor”. See Invoking Descriptors for | |
| more details. | |
| object.__delete__(self, instance) | |
| Called to delete the attribute on an instance *instance* of the | |
| owner class. | |
| Instances of descriptors may also have the "__objclass__" attribute | |
| present: | |
| object.__objclass__ | |
| The attribute "__objclass__" is interpreted by the "inspect" module | |
| as specifying the class where this object was defined (setting this | |
| appropriately can assist in runtime introspection of dynamic class | |
| attributes). For callables, it may indicate that an instance of the | |
| given type (or a subclass) is expected or required as the first | |
| positional argument (for example, CPython sets this attribute for | |
| unbound methods that are implemented in C). | |
| Invoking Descriptors | |
| ==================== | |
| In general, a descriptor is an object attribute with “binding | |
| behavior”, one whose attribute access has been overridden by methods | |
| in the descriptor protocol: "__get__()", "__set__()", and | |
| "__delete__()". If any of those methods are defined for an object, it | |
| is said to be a descriptor. | |
| The default behavior for attribute access is to get, set, or delete | |
| the attribute from an object’s dictionary. For instance, "a.x" has a | |
| lookup chain starting with "a.__dict__['x']", then | |
| "type(a).__dict__['x']", and continuing through the base classes of | |
| "type(a)" excluding metaclasses. | |
| However, if the looked-up value is an object defining one of the | |
| descriptor methods, then Python may override the default behavior and | |
| invoke the descriptor method instead. Where this occurs in the | |
| precedence chain depends on which descriptor methods were defined and | |
| how they were called. | |
| The starting point for descriptor invocation is a binding, "a.x". How | |
| the arguments are assembled depends on "a": | |
| Direct Call | |
| The simplest and least common call is when user code directly | |
| invokes a descriptor method: "x.__get__(a)". | |
| Instance Binding | |
| If binding to an object instance, "a.x" is transformed into the | |
| call: "type(a).__dict__['x'].__get__(a, type(a))". | |
| Class Binding | |
| If binding to a class, "A.x" is transformed into the call: | |
| "A.__dict__['x'].__get__(None, A)". | |
| Super Binding | |
| A dotted lookup such as "super(A, a).x" searches | |
| "a.__class__.__mro__" for a base class "B" following "A" and then | |
| returns "B.__dict__['x'].__get__(a, A)". If not a descriptor, "x" | |
| is returned unchanged. | |
| For instance bindings, the precedence of descriptor invocation depends | |
| on which descriptor methods are defined. A descriptor can define any | |
| combination of "__get__()", "__set__()" and "__delete__()". If it | |
| does not define "__get__()", then accessing the attribute will return | |
| the descriptor object itself unless there is a value in the object’s | |
| instance dictionary. If the descriptor defines "__set__()" and/or | |
| "__delete__()", it is a data descriptor; if it defines neither, it is | |
| a non-data descriptor. Normally, data descriptors define both | |
| "__get__()" and "__set__()", while non-data descriptors have just the | |
| "__get__()" method. Data descriptors with "__get__()" and "__set__()" | |
| (and/or "__delete__()") defined always override a redefinition in an | |
| instance dictionary. In contrast, non-data descriptors can be | |
| overridden by instances. | |
| Python methods (including those decorated with "@staticmethod" and | |
| "@classmethod") are implemented as non-data descriptors. Accordingly, | |
| instances can redefine and override methods. This allows individual | |
| instances to acquire behaviors that differ from other instances of the | |
| same class. | |
| The "@property" decorator is implemented as a data descriptor. | |
| Accordingly, instances cannot override the behavior of a property. | |
| __slots__ | |
| ========= | |
| *__slots__* allow us to explicitly declare data members (like | |
| properties) and deny the creation of "__dict__" and *__weakref__* | |
| (unless explicitly declared in *__slots__* or available in a parent.) | |
| The space saved over using "__dict__" can be significant. Attribute | |
| lookup speed can be significantly improved as well. | |
| object.__slots__ | |
| This class variable can be assigned a string, iterable, or sequence | |
| of strings with variable names used by instances. *__slots__* | |
| reserves space for the declared variables and prevents the | |
| automatic creation of "__dict__" and *__weakref__* for each | |
| instance. | |
| Notes on using *__slots__*: | |
| * When inheriting from a class without *__slots__*, the "__dict__" and | |
| *__weakref__* attribute of the instances will always be accessible. | |
| * Without a "__dict__" variable, instances cannot be assigned new | |
| variables not listed in the *__slots__* definition. Attempts to | |
| assign to an unlisted variable name raises "AttributeError". If | |
| dynamic assignment of new variables is desired, then add | |
| "'__dict__'" to the sequence of strings in the *__slots__* | |
| declaration. | |
| * Without a *__weakref__* variable for each instance, classes defining | |
| *__slots__* do not support "weak references" to its instances. If | |
| weak reference support is needed, then add "'__weakref__'" to the | |
| sequence of strings in the *__slots__* declaration. | |
| * *__slots__* are implemented at the class level by creating | |
| descriptors for each variable name. As a result, class attributes | |
| cannot be used to set default values for instance variables defined | |
| by *__slots__*; otherwise, the class attribute would overwrite the | |
| descriptor assignment. | |
| * The action of a *__slots__* declaration is not limited to the class | |
| where it is defined. *__slots__* declared in parents are available | |
| in child classes. However, instances of a child subclass will get a | |
| "__dict__" and *__weakref__* unless the subclass also defines | |
| *__slots__* (which should only contain names of any *additional* | |
| slots). | |
| * If a class defines a slot also defined in a base class, the instance | |
| variable defined by the base class slot is inaccessible (except by | |
| retrieving its descriptor directly from the base class). This | |
| renders the meaning of the program undefined. In the future, a | |
| check may be added to prevent this. | |
| * "TypeError" will be raised if *__slots__* other than *__dict__* and | |
| *__weakref__* are defined for a class derived from a ""variable- | |
| length" built-in type" such as "int", "bytes", and "type", except | |
| "tuple". | |
| * Any non-string *iterable* may be assigned to *__slots__*. | |
| * If a "dictionary" is used to assign *__slots__*, the dictionary keys | |
| will be used as the slot names. The values of the dictionary can be | |
| used to provide per-attribute docstrings that will be recognised by | |
| "inspect.getdoc()" and displayed in the output of "help()". | |
| * "__class__" assignment works only if both classes have the same | |
| *__slots__*. | |
| * Multiple inheritance with multiple slotted parent classes can be | |
| used, but only one parent is allowed to have attributes created by | |
| slots (the other bases must have empty slot layouts) - violations | |
| raise "TypeError". | |
| * If an *iterator* is used for *__slots__* then a *descriptor* is | |
| created for each of the iterator’s values. However, the *__slots__* | |
| attribute will be an empty iterator. | |
| Changed in version 3.15: Allowed defining the *__dict__* and | |
| *__weakref__* *__slots__* for any class. Allowed defining any | |
| *__slots__* for a class derived from "tuple". | |
| ''', | |
| 'attribute-references': r'''Attribute references | |
| ******************** | |
| An attribute reference is a primary followed by a period and a name: | |
| attributeref: primary "." identifier | |
| The primary must evaluate to an object of a type that supports | |
| attribute references, which most objects do. This object is then | |
| asked to produce the attribute whose name is the identifier. The type | |
| and value produced is determined by the object. Multiple evaluations | |
| of the same attribute reference may yield different objects. | |
| This production can be customized by overriding the | |
| "__getattribute__()" method or the "__getattr__()" method. The | |
| "__getattribute__()" method is called first and either returns a value | |
| or raises "AttributeError" if the attribute is not available. | |
| If an "AttributeError" is raised and the object has a "__getattr__()" | |
| method, that method is called as a fallback. | |
| ''', | |
| 'augassign': r'''Augmented assignment statements | |
| ******************************* | |
| Augmented assignment is the combination, in a single statement, of a | |
| binary operation and an assignment statement: | |
| augmented_assignment_stmt: augtarget augop (expression_list | yield_expression) | |
| augtarget: identifier | attributeref | subscription | |
| augop: "+=" | "-=" | "*=" | "@=" | "/=" | "//=" | "%=" | "**=" | |
| | ">>=" | "<<=" | "&=" | "^=" | "|=" | |
| (See section Primaries for the syntax definitions of the last three | |
| symbols.) | |
| An augmented assignment evaluates the target (which, unlike normal | |
| assignment statements, cannot be an unpacking) and the expression | |
| list, performs the binary operation specific to the type of assignment | |
| on the two operands, and assigns the result to the original target. | |
| The target is only evaluated once. | |
| An augmented assignment statement like "x += 1" can be rewritten as "x | |
| = x + 1" to achieve a similar, but not exactly equal effect. In the | |
| augmented version, "x" is only evaluated once. Also, when possible, | |
| the actual operation is performed *in-place*, meaning that rather than | |
| creating a new object and assigning that to the target, the old object | |
| is modified instead. | |
| Unlike normal assignments, augmented assignments evaluate the left- | |
| hand side *before* evaluating the right-hand side. For example, "a[i] | |
| += f(x)" first looks-up "a[i]", then it evaluates "f(x)" and performs | |
| the addition, and lastly, it writes the result back to "a[i]". | |
| With the exception of assigning to tuples and multiple targets in a | |
| single statement, the assignment done by augmented assignment | |
| statements is handled the same way as normal assignments. Similarly, | |
| with the exception of the possible *in-place* behavior, the binary | |
| operation performed by augmented assignment is the same as the normal | |
| binary operations. | |
| For targets which are attribute references, the same caveat about | |
| class and instance attributes applies as for regular assignments. | |
| ''', | |
| 'await': r'''Await expression | |
| **************** | |
| Suspend the execution of *coroutine* on an *awaitable* object. Can | |
| only be used inside a *coroutine function*. | |
| await_expr: "await" primary | |
| Added in version 3.5. | |
| ''', | |
| 'binary': r'''Binary arithmetic operations | |
| **************************** | |
| The binary arithmetic operations have the conventional priority | |
| levels. Note that some of these operations also apply to certain non- | |
| numeric types. Apart from the power operator, there are only two | |
| levels, one for multiplicative operators and one for additive | |
| operators: | |
| m_expr: u_expr | m_expr "*" u_expr | m_expr "@" m_expr | | |
| m_expr "//" u_expr | m_expr "/" u_expr | | |
| m_expr "%" u_expr | |
| a_expr: m_expr | a_expr "+" m_expr | a_expr "-" m_expr | |
| The "*" (multiplication) operator yields the product of its arguments. | |
| The arguments must either both be numbers, or one argument must be an | |
| integer and the other must be a sequence. In the former case, the | |
| numbers are converted to a common real type and then multiplied | |
| together. In the latter case, sequence repetition is performed; a | |
| negative repetition factor yields an empty sequence. | |
| This operation can be customized using the special "__mul__()" and | |
| "__rmul__()" methods. | |
| Changed in version 3.14: If only one operand is a complex number, the | |
| other operand is converted to a floating-point number. | |
| The "@" (at) operator is intended to be used for matrix | |
| multiplication. No builtin Python types implement this operator. | |
| This operation can be customized using the special "__matmul__()" and | |
| "__rmatmul__()" methods. | |
| Added in version 3.5. | |
| The "/" (division) and "//" (floor division) operators yield the | |
| quotient of their arguments. The numeric arguments are first | |
| converted to a common type. Division of integers yields a float, while | |
| floor division of integers results in an integer; the result is that | |
| of mathematical division with the ‘floor’ function applied to the | |
| result. Division by zero raises the "ZeroDivisionError" exception. | |
| The division operation can be customized using the special | |
| "__truediv__()" and "__rtruediv__()" methods. The floor division | |
| operation can be customized using the special "__floordiv__()" and | |
| "__rfloordiv__()" methods. | |
| The "%" (modulo) operator yields the remainder from the division of | |
| the first argument by the second. The numeric arguments are first | |
| converted to a common type. A zero right argument raises the | |
| "ZeroDivisionError" exception. The arguments may be floating-point | |
| numbers, e.g., "3.14%0.7" equals "0.34" (since "3.14" equals "4*0.7 + | |
| 0.34".) The modulo operator always yields a result with the same sign | |
| as its second operand (or zero); the absolute value of the result is | |
| strictly smaller than the absolute value of the second operand [1]. | |
| The floor division and modulo operators are connected by the following | |
| identity: "x == (x//y)*y + (x%y)". Floor division and modulo are also | |
| connected with the built-in function "divmod()": "divmod(x, y) == | |
| (x//y, x%y)". [2]. | |
| In addition to performing the modulo operation on numbers, the "%" | |
| operator is also overloaded by string objects to perform old-style | |
| string formatting (also known as interpolation). The syntax for | |
| string formatting is described in the Python Library Reference, | |
| section printf-style String Formatting. | |
| The *modulo* operation can be customized using the special "__mod__()" | |
| and "__rmod__()" methods. | |
| The floor division operator, the modulo operator, and the "divmod()" | |
| function are not defined for complex numbers. Instead, convert to a | |
| floating-point number using the "abs()" function if appropriate. | |
| The "+" (addition) operator yields the sum of its arguments. The | |
| arguments must either both be numbers or both be sequences of the same | |
| type. In the former case, the numbers are converted to a common real | |
| type and then added together. In the latter case, the sequences are | |
| concatenated. | |
| This operation can be customized using the special "__add__()" and | |
| "__radd__()" methods. | |
| Changed in version 3.14: If only one operand is a complex number, the | |
| other operand is converted to a floating-point number. | |
| The "-" (subtraction) operator yields the difference of its arguments. | |
| The numeric arguments are first converted to a common real type. | |
| This operation can be customized using the special "__sub__()" and | |
| "__rsub__()" methods. | |
| Changed in version 3.14: If only one operand is a complex number, the | |
| other operand is converted to a floating-point number. | |
| ''', | |
| 'bitwise': r'''Binary bitwise operations | |
| ************************* | |
| Each of the three bitwise operations has a different priority level: | |
| and_expr: shift_expr | and_expr "&" shift_expr | |
| xor_expr: and_expr | xor_expr "^" and_expr | |
| or_expr: xor_expr | or_expr "|" xor_expr | |
| The "&" operator yields the bitwise AND of its arguments, which must | |
| be integers or one of them must be a custom object overriding | |
| "__and__()" or "__rand__()" special methods. | |
| The "^" operator yields the bitwise XOR (exclusive OR) of its | |
| arguments, which must be integers or one of them must be a custom | |
| object overriding "__xor__()" or "__rxor__()" special methods. | |
| The "|" operator yields the bitwise (inclusive) OR of its arguments, | |
| which must be integers or one of them must be a custom object | |
| overriding "__or__()" or "__ror__()" special methods. | |
| ''', | |
| 'bltin-code-objects': r'''Code Objects | |
| ************ | |
| Code objects are used by the implementation to represent “pseudo- | |
| compiled” executable Python code such as a function body. They differ | |
| from function objects because they don’t contain a reference to their | |
| global execution environment. Code objects are returned by the built- | |
| in "compile()" function and can be extracted from function objects | |
| through their "__code__" attribute. See also the "code" module. | |
| Accessing "__code__" raises an auditing event "object.__getattr__" | |
| with arguments "obj" and ""__code__"". | |
| A code object can be executed or evaluated by passing it (instead of a | |
| source string) to the "exec()" or "eval()" built-in functions. | |
| See The standard type hierarchy for more information. | |
| ''', | |
| 'bltin-ellipsis-object': r'''The Ellipsis Object | |
| ******************* | |
| This object is commonly used to indicate that something is omitted. It | |
| supports no special operations. There is exactly one ellipsis object, | |
| named "Ellipsis" (a built-in name). "type(Ellipsis)()" produces the | |
| "Ellipsis" singleton. | |
| It is written as "Ellipsis" or "...". | |
| In typical use, "..." as the "Ellipsis" object appears in a few | |
| different places, for instance: | |
| * In type annotations, such as callable arguments or tuple elements. | |
| * As the body of a function instead of a pass statement. | |
| * In third-party libraries, such as Numpy’s slicing and striding. | |
| Python also uses three dots in ways that are not "Ellipsis" objects, | |
| for instance: | |
| * Doctest’s "ELLIPSIS", as a pattern for missing content. | |
| * The default Python prompt of the *interactive* shell when partial | |
| input is incomplete. | |
| Lastly, the Python documentation often uses three dots in conventional | |
| English usage to mean omitted content, even in code examples that also | |
| use them as the "Ellipsis". | |
| ''', | |
| 'bltin-null-object': r'''The Null Object | |
| *************** | |
| This object is returned by functions that don’t explicitly return a | |
| value. It supports no special operations. There is exactly one null | |
| object, named "None" (a built-in name). "type(None)()" produces the | |
| same singleton. | |
| It is written as "None". | |
| ''', | |
| 'bltin-type-objects': r'''Type Objects | |
| ************ | |
| Type objects represent the various object types. An object’s type is | |
| accessed by the built-in function "type()". There are no special | |
| operations on types. The standard module "types" defines names for | |
| all standard built-in types. | |
| Types are written like this: "<class 'int'>". | |
| ''', | |
| 'booleans': r'''Boolean operations | |
| ****************** | |
| or_test: and_test | or_test "or" and_test | |
| and_test: not_test | and_test "and" not_test | |
| not_test: comparison | "not" not_test | |
| In the context of Boolean operations, and also when expressions are | |
| used by control flow statements, the following values are interpreted | |
| as false: "False", "None", zero of any numeric type, and empty strings | |
| and containers (including strings, tuples, lists, dictionaries, sets | |
| and frozensets). All other values are interpreted as true. User- | |
| defined objects can customize their truth value by providing a | |
| "__bool__()" method. | |
| The operator "not" yields "True" if its argument is false, "False" | |
| otherwise. | |
| The expression "x and y" first evaluates *x*; if *x* is false, its | |
| value is returned; otherwise, *y* is evaluated and the resulting value | |
| is returned. | |
| The expression "x or y" first evaluates *x*; if *x* is true, its value | |
| is returned; otherwise, *y* is evaluated and the resulting value is | |
| returned. | |
| Note that neither "and" nor "or" restrict the value and type they | |
| return to "False" and "True", but rather return the last evaluated | |
| argument. This is sometimes useful, e.g., if "s" is a string that | |
| should be replaced by a default value if it is empty, the expression | |
| "s or 'foo'" yields the desired value. Because "not" has to create a | |
| new value, it returns a boolean value regardless of the type of its | |
| argument (for example, "not 'foo'" produces "False" rather than "''".) | |
| ''', | |
| 'break': r'''The "break" statement | |
| ********************* | |
| break_stmt: "break" | |
| "break" may only occur syntactically nested in a "for" or "while" | |
| loop, but not nested in a function or class definition within that | |
| loop. | |
| It terminates the nearest enclosing loop, skipping the optional "else" | |
| clause if the loop has one. | |
| If a "for" loop is terminated by "break", the loop control target | |
| keeps its current value. | |
| When "break" passes control out of a "try" statement with a "finally" | |
| clause, that "finally" clause is executed before really leaving the | |
| loop. | |
| ''', | |
| 'callable-types': r'''Emulating callable objects | |
| ************************** | |
| object.__call__(self[, args...]) | |
| Called when the instance is “called” as a function; if this method | |
| is defined, "x(arg1, arg2, ...)" roughly translates to | |
| "type(x).__call__(x, arg1, ...)". The "object" class itself does | |
| not provide this method. | |
| ''', | |
| 'calls': r'''Calls | |
| ***** | |
| A call calls a callable object (e.g., a *function*) with a possibly | |
| empty series of *arguments*: | |
| call: primary "(" [argument_list [","] | comprehension] ")" | |
| argument_list: positional_arguments ["," starred_and_keywords] | |
| ["," keywords_arguments] | |
| | starred_and_keywords ["," keywords_arguments] | |
| | keywords_arguments | |
| positional_arguments: positional_item ("," positional_item)* | |
| positional_item: assignment_expression | "*" expression | |
| starred_and_keywords: ("*" expression | keyword_item) | |
| ("," "*" expression | "," keyword_item)* | |
| keywords_arguments: (keyword_item | "**" expression) | |
| ("," keyword_item | "," "**" expression)* | |
| keyword_item: identifier "=" expression | |
| An optional trailing comma may be present after the positional and | |
| keyword arguments but does not affect the semantics. | |
| The primary must evaluate to a callable object (user-defined | |
| functions, built-in functions, methods of built-in objects, class | |
| objects, methods of class instances, and all objects having a | |
| "__call__()" method are callable). All argument expressions are | |
| evaluated before the call is attempted. Please refer to section | |
| Function definitions for the syntax of formal *parameter* lists. | |
| If keyword arguments are present, they are first converted to | |
| positional arguments, as follows. First, a list of unfilled slots is | |
| created for the formal parameters. If there are N positional | |
| arguments, they are placed in the first N slots. Next, for each | |
| keyword argument, the identifier is used to determine the | |
| corresponding slot (if the identifier is the same as the first formal | |
| parameter name, the first slot is used, and so on). If the slot is | |
| already filled, a "TypeError" exception is raised. Otherwise, the | |
| argument is placed in the slot, filling it (even if the expression is | |
| "None", it fills the slot). When all arguments have been processed, | |
| the slots that are still unfilled are filled with the corresponding | |
| default value from the function definition. (Default values are | |
| calculated, once, when the function is defined; thus, a mutable object | |
| such as a list or dictionary used as default value will be shared by | |
| all calls that don’t specify an argument value for the corresponding | |
| slot; this should usually be avoided.) If there are any unfilled | |
| slots for which no default value is specified, a "TypeError" exception | |
| is raised. Otherwise, the list of filled slots is used as the | |
| argument list for the call. | |
| **CPython implementation detail:** An implementation may provide | |
| built-in functions whose positional parameters do not have names, even | |
| if they are ‘named’ for the purpose of documentation, and which | |
| therefore cannot be supplied by keyword. In CPython, this is the case | |
| for functions implemented in C that use "PyArg_ParseTuple()" to parse | |
| their arguments. | |
| If there are more positional arguments than there are formal parameter | |
| slots, a "TypeError" exception is raised, unless a formal parameter | |
| using the syntax "*identifier" is present; in this case, that formal | |
| parameter receives a tuple containing the excess positional arguments | |
| (or an empty tuple if there were no excess positional arguments). | |
| If any keyword argument does not correspond to a formal parameter | |
| name, a "TypeError" exception is raised, unless a formal parameter | |
| using the syntax "**identifier" is present; in this case, that formal | |
| parameter receives a dictionary containing the excess keyword | |
| arguments (using the keywords as keys and the argument values as | |
| corresponding values), or a (new) empty dictionary if there were no | |
| excess keyword arguments. | |
| If the syntax "*expression" appears in the function call, "expression" | |
| must evaluate to an *iterable*. Elements from these iterables are | |
| treated as if they were additional positional arguments. For the call | |
| "f(x1, x2, *y, x3, x4)", if *y* evaluates to a sequence *y1*, …, *yM*, | |
| this is equivalent to a call with M+4 positional arguments *x1*, *x2*, | |
| *y1*, …, *yM*, *x3*, *x4*. | |
| A consequence of this is that although the "*expression" syntax may | |
| appear *after* explicit keyword arguments, it is processed *before* | |
| the keyword arguments (and any "**expression" arguments – see below). | |
| So: | |
| >>> def f(a, b): | |
| ... print(a, b) | |
| ... | |
| >>> f(b=1, *(2,)) | |
| 2 1 | |
| >>> f(a=1, *(2,)) | |
| Traceback (most recent call last): | |
| File "<stdin>", line 1, in <module> | |
| TypeError: f() got multiple values for keyword argument 'a' | |
| >>> f(1, *(2,)) | |
| 1 2 | |
| It is unusual for both keyword arguments and the "*expression" syntax | |
| to be used in the same call, so in practice this confusion does not | |
| often arise. | |
| If the syntax "**expression" appears in the function call, | |
| "expression" must evaluate to a *mapping*, the contents of which are | |
| treated as additional keyword arguments. If a parameter matching a key | |
| has already been given a value (by an explicit keyword argument, or | |
| from another unpacking), a "TypeError" exception is raised. | |
| When "**expression" is used, each key in this mapping must be a | |
| string. Each value from the mapping is assigned to the first formal | |
| parameter eligible for keyword assignment whose name is equal to the | |
| key. A key need not be a Python identifier (e.g. ""max-temp °F"" is | |
| acceptable, although it will not match any formal parameter that could | |
| be declared). If there is no match to a formal parameter the key-value | |
| pair is collected by the "**" parameter, if there is one, or if there | |
| is not, a "TypeError" exception is raised. | |
| Formal parameters using the syntax "*identifier" or "**identifier" | |
| cannot be used as positional argument slots or as keyword argument | |
| names. | |
| Changed in version 3.5: Function calls accept any number of "*" and | |
| "**" unpackings, positional arguments may follow iterable unpackings | |
| ("*"), and keyword arguments may follow dictionary unpackings ("**"). | |
| Originally proposed by **PEP 448**. | |
| A call always returns some value, possibly "None", unless it raises an | |
| exception. How this value is computed depends on the type of the | |
| callable object. | |
| If it is— | |
| a user-defined function: | |
| The code block for the function is executed, passing it the | |
| argument list. The first thing the code block will do is bind the | |
| formal parameters to the arguments; this is described in section | |
| Function definitions. When the code block executes a "return" | |
| statement, this specifies the return value of the function call. | |
| If execution reaches the end of the code block without executing a | |
| "return" statement, the return value is "None". | |
| a built-in function or method: | |
| The result is up to the interpreter; see Built-in functions for the | |
| descriptions of built-in functions and methods. | |
| a class object: | |
| A new instance of that class is returned. | |
| a class instance method: | |
| The corresponding user-defined function is called, with an argument | |
| list that is one longer than the argument list of the call: the | |
| instance becomes the first argument. | |
| a class instance: | |
| The class must define a "__call__()" method; the effect is then the | |
| same as if that method was called. | |
| ''', | |
| 'class': r'''Class definitions | |
| ***************** | |
| A class definition defines a class object (see section The standard | |
| type hierarchy): | |
| classdef: [decorators] "class" classname [type_params] [inheritance] ":" suite | |
| inheritance: "(" [argument_list] ")" | |
| classname: identifier | |
| A class definition is an executable statement. The inheritance list | |
| usually gives a list of base classes (see Metaclasses for more | |
| advanced uses), so each item in the list should evaluate to a class | |
| object which allows subclassing. Classes without an inheritance list | |
| inherit, by default, from the base class "object"; hence, | |
| class Foo: | |
| pass | |
| is equivalent to | |
| class Foo(object): | |
| pass | |
| There may be one or more base classes; see Multiple inheritance below | |
| for more information. | |
| The class’s suite is then executed in a new execution frame (see | |
| Naming and binding), using a newly created local namespace and the | |
| original global namespace. (Usually, the suite contains mostly | |
| function definitions.) When the class’s suite finishes execution, its | |
| execution frame is discarded but its local namespace is saved. [5] A | |
| class object is then created using the inheritance list for the base | |
| classes and the saved local namespace for the attribute dictionary. | |
| The class name is bound to this class object in the original local | |
| namespace. | |
| The order in which attributes are defined in the class body is | |
| preserved in the new class’s "__dict__". Note that this is reliable | |
| only right after the class is created and only for classes that were | |
| defined using the definition syntax. | |
| Class creation can be customized heavily using metaclasses. | |
| Classes can also be decorated: just like when decorating functions, | |
| @f1(arg) | |
| @f2 | |
| class Foo: pass | |
| is roughly equivalent to | |
| class Foo: pass | |
| Foo = f1(arg)(f2(Foo)) | |
| The evaluation rules for the decorator expressions are the same as for | |
| function decorators. The result is then bound to the class name. | |
| Changed in version 3.9: Classes may be decorated with any valid | |
| "assignment_expression". Previously, the grammar was much more | |
| restrictive; see **PEP 614** for details. | |
| A list of type parameters may be given in square brackets immediately | |
| after the class’s name. This indicates to static type checkers that | |
| the class is generic. At runtime, the type parameters can be retrieved | |
| from the class’s "__type_params__" attribute. See Generic classes for | |
| more. | |
| Changed in version 3.12: Type parameter lists are new in Python 3.12. | |
| **Programmer’s note:** Variables defined in the class definition are | |
| class attributes; they are shared by instances. Instance attributes | |
| can be set in a method with "self.name = value". Both class and | |
| instance attributes are accessible through the notation “"self.name"”, | |
| and an instance attribute hides a class attribute with the same name | |
| when accessed in this way. Class attributes can be used as defaults | |
| for instance attributes, but using mutable values there can lead to | |
| unexpected results. Descriptors can be used to create instance | |
| variables with different implementation details. | |
| See also: | |
| **PEP 3115** - Metaclasses in Python 3000 | |
| The proposal that changed the declaration of metaclasses to the | |
| current syntax, and the semantics for how classes with | |
| metaclasses are constructed. | |
| **PEP 3129** - Class Decorators | |
| The proposal that added class decorators. Function and method | |
| decorators were introduced in **PEP 318**. | |
| Multiple inheritance | |
| ==================== | |
| Python classes may have multiple base classes, a technique known as | |
| *multiple inheritance*. The base classes are specified in the class | |
| definition by listing them in parentheses after the class name, | |
| separated by commas. For example, the following class definition: | |
| >>> class A: pass | |
| >>> class B: pass | |
| >>> class C(A, B): pass | |
| defines a class "C" that inherits from classes "A" and "B". | |
| The *method resolution order* (MRO) is the order in which base classes | |
| are searched when looking up an attribute on a class. See The Python | |
| 2.3 Method Resolution Order for a description of how Python determines | |
| the MRO for a class. | |
| Multiple inheritance is not always allowed. Attempting to define a | |
| class with multiple inheritance will raise an error if one of the | |
| bases does not allow subclassing, if a consistent MRO cannot be | |
| created, if no valid metaclass can be determined, or if there is an | |
| instance layout conflict. We’ll discuss each of these in turn. | |
| First, all base classes must allow subclassing. While most classes | |
| allow subclassing, some built-in classes do not, such as "bool": | |
| >>> class SubBool(bool): # TypeError | |
| ... pass | |
| Traceback (most recent call last): | |
| ... | |
| TypeError: type 'bool' is not an acceptable base type | |
| In the resolved MRO of a class, the class’s bases appear in the order | |
| they were specified in the class’s bases list. Additionally, the MRO | |
| always lists a child class before any of its bases. A class definition | |
| will fail if it is impossible to resolve a consistent MRO that | |
| satisfies these rules from the list of bases provided: | |
| >>> class Base: pass | |
| >>> class Child(Base): pass | |
| >>> class Grandchild(Base, Child): pass # TypeError | |
| Traceback (most recent call last): | |
| ... | |
| TypeError: Cannot create a consistent method resolution order (MRO) for bases Base, Child | |
| In the MRO of "Grandchild", "Base" must appear before "Child" because | |
| it is first in the base class list, but it must also appear after | |
| "Child" because it is a parent of "Child". This is a contradiction, so | |
| the class cannot be defined. | |
| If some of the bases have a custom *metaclass*, the metaclass of the | |
| resulting class is chosen among the metaclasses of the bases and the | |
| explicitly specified metaclass of the child class. It must be a | |
| metaclass that is a subclass of all other candidate metaclasses. If no | |
| such metaclass exists among the candidates, the class cannot be | |
| created, as explained in Determining the appropriate metaclass. | |
| Finally, the instance layouts of the bases must be compatible. This | |
| means that it must be possible to compute a *solid base* for the | |
| class. Exactly which classes are solid bases depends on the Python | |
| implementation. | |
| **CPython implementation detail:** In CPython, a class is a solid base | |
| if it has a nonempty "__slots__" definition. Many but not all classes | |
| defined in C are also solid bases, including most builtins (such as | |
| "int" or "BaseException") but excluding most concrete "Exception" | |
| classes. Generally, a C class is a solid base if its underlying struct | |
| is different in size from its base class. | |
| Every class has a solid base. "object", the base class, has itself as | |
| its solid base. If there is a single base, the child class’s solid | |
| base is that class if it is a solid base, or else the base class’s | |
| solid base. If there are multiple bases, we first find the solid base | |
| for each base class to produce a list of candidate solid bases. If | |
| there is a unique solid base that is a subclass of all others, then | |
| that class is the solid base. Otherwise, class creation fails. | |
| Example: | |
| >>> class Solid1: | |
| ... __slots__ = ("solid1",) | |
| >>> | |
| >>> class Solid2: | |
| ... __slots__ = ("solid2",) | |
| >>> | |
| >>> class SolidChild(Solid1): | |
| ... __slots__ = ("solid_child",) | |
| >>> | |
| >>> class C1: # solid base is `object` | |
| ... pass | |
| >>> | |
| >>> # OK: solid bases are `Solid1` and `object`, and `Solid1` is a subclass of `object`. | |
| >>> class C2(Solid1, C1): # solid base is `Solid1` | |
| ... pass | |
| >>> | |
| >>> # OK: solid bases are `SolidChild` and `Solid1`, and `SolidChild` is a subclass of `Solid1`. | |
| >>> class C3(SolidChild, Solid1): # solid base is `SolidChild` | |
| ... pass | |
| >>> | |
| >>> # Error: solid bases are `Solid1` and `Solid2`, but neither is a subclass of the other. | |
| >>> class C4(Solid1, Solid2): # error: no single solid base | |
| ... pass | |
| Traceback (most recent call last): | |
| ... | |
| TypeError: multiple bases have instance lay-out conflict | |
| ''', | |
| 'comparisons': r'''Comparisons | |
| *********** | |
| Unlike C, all comparison operations in Python have the same priority, | |
| which is lower than that of any arithmetic, shifting or bitwise | |
| operation. Also unlike C, expressions like "a < b < c" have the | |
| interpretation that is conventional in mathematics: | |
| comparison: or_expr (comp_operator or_expr)* | |
| comp_operator: "<" | ">" | "==" | ">=" | "<=" | "!=" | |
| | "is" ["not"] | ["not"] "in" | |
| Comparisons yield boolean values: "True" or "False". Custom *rich | |
| comparison methods* may return non-boolean values. In this case Python | |
| will call "bool()" on such value in boolean contexts. | |
| Comparisons can be chained arbitrarily, e.g., "x < y <= z" is | |
| equivalent to "x < y and y <= z", except that "y" is evaluated only | |
| once (but in both cases "z" is not evaluated at all when "x < y" is | |
| found to be false). | |
| Formally, if *a*, *b*, *c*, …, *y*, *z* are expressions and *op1*, | |
| *op2*, …, *opN* are comparison operators, then "a op1 b op2 c ... y | |
| opN z" is equivalent to "a op1 b and b op2 c and ... y opN z", except | |
| that each expression is evaluated at most once. | |
| Note that "a op1 b op2 c" doesn’t imply any kind of comparison between | |
| *a* and *c*, so that, e.g., "x < y > z" is perfectly legal (though | |
| perhaps not pretty). | |
| Value comparisons | |
| ================= | |
| The operators "<", ">", "==", ">=", "<=", and "!=" compare the values | |
| of two objects. The objects do not need to have the same type. | |
| Chapter Objects, values and types states that objects have a value (in | |
| addition to type and identity). The value of an object is a rather | |
| abstract notion in Python: For example, there is no canonical access | |
| method for an object’s value. Also, there is no requirement that the | |
| value of an object should be constructed in a particular way, e.g. | |
| comprised of all its data attributes. Comparison operators implement a | |
| particular notion of what the value of an object is. One can think of | |
| them as defining the value of an object indirectly, by means of their | |
| comparison implementation. | |
| Because all types are (direct or indirect) subtypes of "object", they | |
| inherit the default comparison behavior from "object". Types can | |
| customize their comparison behavior by implementing *rich comparison | |
| methods* like "__lt__()", described in Basic customization. | |
| The default behavior for equality comparison ("==" and "!=") is based | |
| on the identity of the objects. Hence, equality comparison of | |
| instances with the same identity results in equality, and equality | |
| comparison of instances with different identities results in | |
| inequality. A motivation for this default behavior is the desire that | |
| all objects should be reflexive (i.e. "x is y" implies "x == y"). | |
| A default order comparison ("<", ">", "<=", and ">=") is not provided; | |
| an attempt raises "TypeError". A motivation for this default behavior | |
| is the lack of a similar invariant as for equality. | |
| The behavior of the default equality comparison, that instances with | |
| different identities are always unequal, may be in contrast to what | |
| types will need that have a sensible definition of object value and | |
| value-based equality. Such types will need to customize their | |
| comparison behavior, and in fact, a number of built-in types have done | |
| that. | |
| The following list describes the comparison behavior of the most | |
| important built-in types. | |
| * Numbers of built-in numeric types (Numeric Types — int, float, | |
| complex) and of the standard library types "fractions.Fraction" and | |
| "decimal.Decimal" can be compared within and across their types, | |
| with the restriction that complex numbers do not support order | |
| comparison. Within the limits of the types involved, they compare | |
| mathematically (algorithmically) correct without loss of precision. | |
| The not-a-number values "float('NaN')" and "decimal.Decimal('NaN')" | |
| are special. Any ordered comparison of a number to a not-a-number | |
| value is false. A counter-intuitive implication is that not-a-number | |
| values are not equal to themselves. For example, if "x = | |
| float('NaN')", "3 < x", "x < 3" and "x == x" are all false, while "x | |
| != x" is true. This behavior is compliant with IEEE 754. | |
| * "None" and "NotImplemented" are singletons. **PEP 8** advises that | |
| comparisons for singletons should always be done with "is" or "is | |
| not", never the equality operators. | |
| * Binary sequences (instances of "bytes" or "bytearray") can be | |
| compared within and across their types. They compare | |
| lexicographically using the numeric values of their elements. | |
| * Strings (instances of "str") compare lexicographically using the | |
| numerical Unicode code points (the result of the built-in function | |
| "ord()") of their characters. [3] | |
| Strings and binary sequences cannot be directly compared. | |
| * Sequences (instances of "tuple", "list", or "range") can be compared | |
| only within each of their types, with the restriction that ranges do | |
| not support order comparison. Equality comparison across these | |
| types results in inequality, and ordering comparison across these | |
| types raises "TypeError". | |
| Sequences compare lexicographically using comparison of | |
| corresponding elements. The built-in containers typically assume | |
| identical objects are equal to themselves. That lets them bypass | |
| equality tests for identical objects to improve performance and to | |
| maintain their internal invariants. | |
| Lexicographical comparison between built-in collections works as | |
| follows: | |
| * For two collections to compare equal, they must be of the same | |
| type, have the same length, and each pair of corresponding | |
| elements must compare equal (for example, "[1,2] == (1,2)" is | |
| false because the type is not the same). | |
| * Collections that support order comparison are ordered the same as | |
| their first unequal elements (for example, "[1,2,x] <= [1,2,y]" | |
| has the same value as "x <= y"). If a corresponding element does | |
| not exist, the shorter collection is ordered first (for example, | |
| "[1,2] < [1,2,3]" is true). | |
| * Mappings (instances of "dict") compare equal if and only if they | |
| have equal "(key, value)" pairs. Equality comparison of the keys and | |
| values enforces reflexivity. | |
| Order comparisons ("<", ">", "<=", and ">=") raise "TypeError". | |
| * Sets (instances of "set" or "frozenset") can be compared within and | |
| across their types. | |
| They define order comparison operators to mean subset and superset | |
| tests. Those relations do not define total orderings (for example, | |
| the two sets "{1,2}" and "{2,3}" are not equal, nor subsets of one | |
| another, nor supersets of one another). Accordingly, sets are not | |
| appropriate arguments for functions which depend on total ordering | |
| (for example, "min()", "max()", and "sorted()" produce undefined | |
| results given a list of sets as inputs). | |
| Comparison of sets enforces reflexivity of its elements. | |
| * Most other built-in types have no comparison methods implemented, so | |
| they inherit the default comparison behavior. | |
| User-defined classes that customize their comparison behavior should | |
| follow some consistency rules, if possible: | |
| * Equality comparison should be reflexive. In other words, identical | |
| objects should compare equal: | |
| "x is y" implies "x == y" | |
| * Comparison should be symmetric. In other words, the following | |
| expressions should have the same result: | |
| "x == y" and "y == x" | |
| "x != y" and "y != x" | |
| "x < y" and "y > x" | |
| "x <= y" and "y >= x" | |
| * Comparison should be transitive. The following (non-exhaustive) | |
| examples illustrate that: | |
| "x > y and y > z" implies "x > z" | |
| "x < y and y <= z" implies "x < z" | |
| * Inverse comparison should result in the boolean negation. In other | |
| words, the following expressions should have the same result: | |
| "x == y" and "not x != y" | |
| "x < y" and "not x >= y" (for total ordering) | |
| "x > y" and "not x <= y" (for total ordering) | |
| The last two expressions apply to totally ordered collections (e.g. | |
| to sequences, but not to sets or mappings). See also the | |
| "@~functools.total_ordering" decorator. | |
| * The "hash()" result should be consistent with equality. Objects that | |
| are equal should either have the same hash value, or be marked as | |
| unhashable. | |
| Python does not enforce these consistency rules. In fact, the | |
| not-a-number values are an example for not following these rules. | |
| Membership test operations | |
| ========================== | |
| The operators "in" and "not in" test for membership. "x in s" | |
| evaluates to "True" if *x* is a member of *s*, and "False" otherwise. | |
| "x not in s" returns the negation of "x in s". All built-in sequences | |
| and set types support this as well as dictionary, for which "in" tests | |
| whether the dictionary has a given key. For container types such as | |
| list, tuple, set, frozenset, dict, or collections.deque, the | |
| expression "x in y" is equivalent to "any(x is e or x == e for e in | |
| y)". | |
| For the string and bytes types, "x in y" is "True" if and only if *x* | |
| is a substring of *y*. An equivalent test is "y.find(x) != -1". | |
| Empty strings are always considered to be a substring of any other | |
| string, so """ in "abc"" will return "True". | |
| For user-defined classes which define the "__contains__()" method, "x | |
| in y" returns "True" if "y.__contains__(x)" returns a true value, and | |
| "False" otherwise. | |
| For user-defined classes which do not define "__contains__()" but do | |
| define "__iter__()", "x in y" is "True" if some value "z", for which | |
| the expression "x is z or x == z" is true, is produced while iterating | |
| over "y". If an exception is raised during the iteration, it is as if | |
| "in" raised that exception. | |
| Lastly, the old-style iteration protocol is tried: if a class defines | |
| "__getitem__()", "x in y" is "True" if and only if there is a non- | |
| negative integer index *i* such that "x is y[i] or x == y[i]", and no | |
| lower integer index raises the "IndexError" exception. (If any other | |
| exception is raised, it is as if "in" raised that exception). | |
| The operator "not in" is defined to have the inverse truth value of | |
| "in". | |
| Identity comparisons | |
| ==================== | |
| The operators "is" and "is not" test for an object’s identity: "x is | |
| y" is true if and only if *x* and *y* are the same object. An | |
| Object’s identity is determined using the "id()" function. "x is not | |
| y" yields the inverse truth value. [4] | |
| ''', | |
| 'compound': r'''Compound statements | |
| ******************* | |
| Compound statements contain (groups of) other statements; they affect | |
| or control the execution of those other statements in some way. In | |
| general, compound statements span multiple lines, although in simple | |
| incarnations a whole compound statement may be contained in one line. | |
| The "if", "while" and "for" statements implement traditional control | |
| flow constructs. "try" specifies exception handlers and/or cleanup | |
| code for a group of statements, while the "with" statement allows the | |
| execution of initialization and finalization code around a block of | |
| code. Function and class definitions are also syntactically compound | |
| statements. | |
| A compound statement consists of one or more ‘clauses.’ A clause | |
| consists of a header and a ‘suite.’ The clause headers of a | |
| particular compound statement are all at the same indentation level. | |
| Each clause header begins with a uniquely identifying keyword and ends | |
| with a colon. A suite is a group of statements controlled by a | |
| clause. A suite can be one or more semicolon-separated simple | |
| statements on the same line as the header, following the header’s | |
| colon, or it can be one or more indented statements on subsequent | |
| lines. Only the latter form of a suite can contain nested compound | |
| statements; the following is illegal, mostly because it wouldn’t be | |
| clear to which "if" clause a following "else" clause would belong: | |
| if test1: if test2: print(x) | |
| Also note that the semicolon binds tighter than the colon in this | |
| context, so that in the following example, either all or none of the | |
| "print()" calls are executed: | |
| if x < y < z: print(x); print(y); print(z) | |
| Summarizing: | |
| compound_stmt: if_stmt | |
| | while_stmt | |
| | for_stmt | |
| | try_stmt | |
| | with_stmt | |
| | match_stmt | |
| | funcdef | |
| | classdef | |
| | async_with_stmt | |
| | async_for_stmt | |
| | async_funcdef | |
| suite: stmt_list NEWLINE | NEWLINE INDENT statement+ DEDENT | |
| statement: stmt_list NEWLINE | compound_stmt | |
| stmt_list: simple_stmt (";" simple_stmt)* [";"] | |
| Note that statements always end in a "NEWLINE" possibly followed by a | |
| "DEDENT". Also note that optional continuation clauses always begin | |
| with a keyword that cannot start a statement, thus there are no | |
| ambiguities (the ‘dangling "else"’ problem is solved in Python by | |
| requiring nested "if" statements to be indented). | |
| The formatting of the grammar rules in the following sections places | |
| each clause on a separate line for clarity. | |
| The "if" statement | |
| ================== | |
| The "if" statement is used for conditional execution: | |
| if_stmt: "if" assignment_expression ":" suite | |
| ("elif" assignment_expression ":" suite)* | |
| ["else" ":" suite] | |
| It selects exactly one of the suites by evaluating the expressions one | |
| by one until one is found to be true (see section Boolean operations | |
| for the definition of true and false); then that suite is executed | |
| (and no other part of the "if" statement is executed or evaluated). | |
| If all expressions are false, the suite of the "else" clause, if | |
| present, is executed. | |
| The "while" statement | |
| ===================== | |
| The "while" statement is used for repeated execution as long as an | |
| expression is true: | |
| while_stmt: "while" assignment_expression ":" suite | |
| ["else" ":" suite] | |
| This repeatedly tests the expression and, if it is true, executes the | |
| first suite; if the expression is false (which may be the first time | |
| it is tested) the suite of the "else" clause, if present, is executed | |
| and the loop terminates. | |
| A "break" statement executed in the first suite terminates the loop | |
| without executing the "else" clause’s suite. A "continue" statement | |
| executed in the first suite skips the rest of the suite and goes back | |
| to testing the expression. | |
| The "for" statement | |
| =================== | |
| The "for" statement is used to iterate over the elements of a sequence | |
| (such as a string, tuple or list) or other iterable object: | |
| for_stmt: "for" target_list "in" starred_expression_list ":" suite | |
| ["else" ":" suite] | |
| The "starred_expression_list" expression is evaluated once; it should | |
| yield an *iterable* object. An *iterator* is created for that | |
| iterable. The first item provided by the iterator is then assigned to | |
| the target list using the standard rules for assignments (see | |
| Assignment statements), and the suite is executed. This repeats for | |
| each item provided by the iterator. When the iterator is *exhausted*, | |
| the suite in the "else" clause, if present, is executed, and the loop | |
| terminates. | |
| A "break" statement executed in the first suite terminates the loop | |
| without executing the "else" clause’s suite. A "continue" statement | |
| executed in the first suite skips the rest of the suite and continues | |
| with the next item, or with the "else" clause if there is no next | |
| item. | |
| The for-loop makes assignments to the variables in the target list. | |
| This overwrites all previous assignments to those variables including | |
| those made in the suite of the for-loop: | |
| for i in range(10): | |
| print(i) | |
| i = 5 # this will not affect the for-loop | |
| # because i will be overwritten with the next | |
| # index in the range | |
| Names in the target list are not deleted when the loop is finished, | |
| but if the sequence is empty, they will not have been assigned to at | |
| all by the loop. Hint: the built-in type "range()" represents | |
| immutable arithmetic sequences of integers. For instance, iterating | |
| "range(3)" successively yields 0, 1, and then 2. | |
| Changed in version 3.11: Starred elements are now allowed in the | |
| expression list. | |
| The "try" statement | |
| =================== | |
| The "try" statement specifies exception handlers and/or cleanup code | |
| for a group of statements: | |
| try_stmt: try1_stmt | try2_stmt | try3_stmt | |
| try1_stmt: "try" ":" suite | |
| ("except" [expression ["as" identifier]] ":" suite)+ | |
| ["else" ":" suite] | |
| ["finally" ":" suite] | |
| try2_stmt: "try" ":" suite | |
| ("except" "*" expression ["as" identifier] ":" suite)+ | |
| ["else" ":" suite] | |
| ["finally" ":" suite] | |
| try3_stmt: "try" ":" suite | |
| "finally" ":" suite | |
| Additional information on exceptions can be found in section | |
| Exceptions, and information on using the "raise" statement to generate | |
| exceptions may be found in section The raise statement. | |
| Changed in version 3.14: Support for optionally dropping grouping | |
| parentheses when using multiple exception types. See **PEP 758**. | |
| "except" clause | |
| --------------- | |
| The "except" clause(s) specify one or more exception handlers. When no | |
| exception occurs in the "try" clause, no exception handler is | |
| executed. When an exception occurs in the "try" suite, a search for an | |
| exception handler is started. This search inspects the "except" | |
| clauses in turn until one is found that matches the exception. An | |
| expression-less "except" clause, if present, must be last; it matches | |
| any exception. | |
| For an "except" clause with an expression, the expression must | |
| evaluate to an exception type or a tuple of exception types. | |
| Parentheses can be dropped if multiple exception types are provided | |
| and the "as" clause is not used. The raised exception matches an | |
| "except" clause whose expression evaluates to the class or a *non- | |
| virtual base class* of the exception object, or to a tuple that | |
| contains such a class. | |
| If no "except" clause matches the exception, the search for an | |
| exception handler continues in the surrounding code and on the | |
| invocation stack. [1] | |
| If the evaluation of an expression in the header of an "except" clause | |
| raises an exception, the original search for a handler is canceled and | |
| a search starts for the new exception in the surrounding code and on | |
| the call stack (it is treated as if the entire "try" statement raised | |
| the exception). | |
| When a matching "except" clause is found, the exception is assigned to | |
| the target specified after the "as" keyword in that "except" clause, | |
| if present, and the "except" clause’s suite is executed. All "except" | |
| clauses must have an executable block. When the end of this block is | |
| reached, execution continues normally after the entire "try" | |
| statement. (This means that if two nested handlers exist for the same | |
| exception, and the exception occurs in the "try" clause of the inner | |
| handler, the outer handler will not handle the exception.) | |
| When an exception has been assigned using "as target", it is cleared | |
| at the end of the "except" clause. This is as if: | |
| except E as N: | |
| foo | |
| was translated to: | |
| except E as N: | |
| try: | |
| foo | |
| finally: | |
| del N | |
| This means the exception must be assigned to a different name to be | |
| able to refer to it after the "except" clause. Exceptions are cleared | |
| because with the traceback attached to them, they form a reference | |
| cycle with the stack frame, keeping all locals in that frame alive | |
| until the next garbage collection occurs. | |
| Before an "except" clause’s suite is executed, the exception is stored | |
| in the "sys" module, where it can be accessed from within the body of | |
| the "except" clause by calling "sys.exception()". When leaving an | |
| exception handler, the exception stored in the "sys" module is reset | |
| to its previous value: | |
| >>> print(sys.exception()) | |
| None | |
| >>> try: | |
| ... raise TypeError | |
| ... except: | |
| ... print(repr(sys.exception())) | |
| ... try: | |
| ... raise ValueError | |
| ... except: | |
| ... print(repr(sys.exception())) | |
| ... print(repr(sys.exception())) | |
| ... | |
| TypeError() | |
| ValueError() | |
| TypeError() | |
| >>> print(sys.exception()) | |
| None | |
| "except*" clause | |
| ---------------- | |
| The "except*" clause(s) specify one or more handlers for groups of | |
| exceptions ("BaseExceptionGroup" instances). A "try" statement can | |
| have either "except" or "except*" clauses, but not both. The exception | |
| type for matching is mandatory in the case of "except*", so "except*:" | |
| is a syntax error. The type is interpreted as in the case of "except", | |
| but matching is performed on the exceptions contained in the group | |
| that is being handled. A "TypeError" is raised if a matching type is a | |
| subclass of "BaseExceptionGroup", because that would have ambiguous | |
| semantics. | |
| When an exception group is raised in the try block, each "except*" | |
| clause splits (see "split()") it into the subgroups of matching and | |
| non-matching exceptions. If the matching subgroup is not empty, it | |
| becomes the handled exception (the value returned from | |
| "sys.exception()") and assigned to the target of the "except*" clause | |
| (if there is one). Then, the body of the "except*" clause executes. If | |
| the non-matching subgroup is not empty, it is processed by the next | |
| "except*" in the same manner. This continues until all exceptions in | |
| the group have been matched, or the last "except*" clause has run. | |
| After all "except*" clauses execute, the group of unhandled exceptions | |
| is merged with any exceptions that were raised or re-raised from | |
| within "except*" clauses. This merged exception group propagates on: | |
| >>> try: | |
| ... raise ExceptionGroup("eg", | |
| ... [ValueError(1), TypeError(2), OSError(3), OSError(4)]) | |
| ... except* TypeError as e: | |
| ... print(f'caught {type(e)} with nested {e.exceptions}') | |
| ... except* OSError as e: | |
| ... print(f'caught {type(e)} with nested {e.exceptions}') | |
| ... | |
| caught <class 'ExceptionGroup'> with nested (TypeError(2),) | |
| caught <class 'ExceptionGroup'> with nested (OSError(3), OSError(4)) | |
| + Exception Group Traceback (most recent call last): | |
| | File "<doctest default[0]>", line 2, in <module> | |
| | raise ExceptionGroup("eg", | |
| | [ValueError(1), TypeError(2), OSError(3), OSError(4)]) | |
| | ExceptionGroup: eg (1 sub-exception) | |
| +-+---------------- 1 ---------------- | |
| | ValueError: 1 | |
| +------------------------------------ | |
| If the exception raised from the "try" block is not an exception group | |
| and its type matches one of the "except*" clauses, it is caught and | |
| wrapped by an exception group with an empty message string. This | |
| ensures that the type of the target "e" is consistently | |
| "BaseExceptionGroup": | |
| >>> try: | |
| ... raise BlockingIOError | |
| ... except* BlockingIOError as e: | |
| ... print(repr(e)) | |
| ... | |
| ExceptionGroup('', (BlockingIOError(),)) | |
| "break", "continue" and "return" cannot appear in an "except*" clause. | |
| "else" clause | |
| ------------- | |
| The optional "else" clause is executed if the control flow leaves the | |
| "try" suite, no exception was raised, and no "return", "continue", or | |
| "break" statement was executed. Exceptions in the "else" clause are | |
| not handled by the preceding "except" clauses. | |
| "finally" clause | |
| ---------------- | |
| If "finally" is present, it specifies a ‘cleanup’ handler. The "try" | |
| clause is executed, including any "except" and "else" clauses. If an | |
| exception occurs in any of the clauses and is not handled, the | |
| exception is temporarily saved. The "finally" clause is executed. If | |
| there is a saved exception it is re-raised at the end of the "finally" | |
| clause. If the "finally" clause raises another exception, the saved | |
| exception is set as the context of the new exception. If the "finally" | |
| clause executes a "return", "break" or "continue" statement, the saved | |
| exception is discarded. For example, this function returns 42. | |
| def f(): | |
| try: | |
| 1/0 | |
| finally: | |
| return 42 | |
| The exception information is not available to the program during | |
| execution of the "finally" clause. | |
| When a "return", "break" or "continue" statement is executed in the | |
| "try" suite of a "try"…"finally" statement, the "finally" clause is | |
| also executed ‘on the way out.’ | |
| The return value of a function is determined by the last "return" | |
| statement executed. Since the "finally" clause always executes, a | |
| "return" statement executed in the "finally" clause will always be the | |
| last one executed. The following function returns ‘finally’. | |
| def foo(): | |
| try: | |
| return 'try' | |
| finally: | |
| return 'finally' | |
| Changed in version 3.8: Prior to Python 3.8, a "continue" statement | |
| was illegal in the "finally" clause due to a problem with the | |
| implementation. | |
| Changed in version 3.14: The compiler emits a "SyntaxWarning" when a | |
| "return", "break" or "continue" appears in a "finally" block (see | |
| **PEP 765**). | |
| The "with" statement | |
| ==================== | |
| The "with" statement is used to wrap the execution of a block with | |
| methods defined by a context manager (see section With Statement | |
| Context Managers). This allows common "try"…"except"…"finally" usage | |
| patterns to be encapsulated for convenient reuse. | |
| with_stmt: "with" ( "(" with_stmt_contents ","? ")" | with_stmt_contents ) ":" suite | |
| with_stmt_contents: with_item ("," with_item)* | |
| with_item: expression ["as" target] | |
| The execution of the "with" statement with one “item” proceeds as | |
| follows: | |
| 1. The context expression (the expression given in the "with_item") is | |
| evaluated to obtain a context manager. | |
| 2. The context manager’s "__enter__()" is loaded for later use. | |
| 3. The context manager’s "__exit__()" is loaded for later use. | |
| 4. The context manager’s "__enter__()" method is invoked. | |
| 5. If a target was included in the "with" statement, the return value | |
| from "__enter__()" is assigned to it. | |
| Note: | |
| The "with" statement guarantees that if the "__enter__()" method | |
| returns without an error, then "__exit__()" will always be | |
| called. Thus, if an error occurs during the assignment to the | |
| target list, it will be treated the same as an error occurring | |
| within the suite would be. See step 7 below. | |
| 6. The suite is executed. | |
| 7. The context manager’s "__exit__()" method is invoked. If an | |
| exception caused the suite to be exited, its type, value, and | |
| traceback are passed as arguments to "__exit__()". Otherwise, three | |
| "None" arguments are supplied. | |
| If the suite was exited due to an exception, and the return value | |
| from the "__exit__()" method was false, the exception is reraised. | |
| If the return value was true, the exception is suppressed, and | |
| execution continues with the statement following the "with" | |
| statement. | |
| If the suite was exited for any reason other than an exception, the | |
| return value from "__exit__()" is ignored, and execution proceeds | |
| at the normal location for the kind of exit that was taken. | |
| The following code: | |
| with EXPRESSION as TARGET: | |
| SUITE | |
| is semantically equivalent to: | |
| manager = (EXPRESSION) | |
| enter = manager.__enter__ | |
| exit = manager.__exit__ | |
| value = enter() | |
| hit_except = False | |
| try: | |
| TARGET = value | |
| SUITE | |
| except: | |
| hit_except = True | |
| if not exit(*sys.exc_info()): | |
| raise | |
| finally: | |
| if not hit_except: | |
| exit(None, None, None) | |
| except that implicit special method lookup is used for "__enter__()" | |
| and "__exit__()". | |
| With more than one item, the context managers are processed as if | |
| multiple "with" statements were nested: | |
| with A() as a, B() as b: | |
| SUITE | |
| is semantically equivalent to: | |
| with A() as a: | |
| with B() as b: | |
| SUITE | |
| You can also write multi-item context managers in multiple lines if | |
| the items are surrounded by parentheses. For example: | |
| with ( | |
| A() as a, | |
| B() as b, | |
| ): | |
| SUITE | |
| Changed in version 3.1: Support for multiple context expressions. | |
| Changed in version 3.10: Support for using grouping parentheses to | |
| break the statement in multiple lines. | |
| See also: | |
| **PEP 343** - The “with” statement | |
| The specification, background, and examples for the Python "with" | |
| statement. | |
| The "match" statement | |
| ===================== | |
| Added in version 3.10. | |
| The match statement is used for pattern matching. Syntax: | |
| match_stmt: 'match' subject_expr ":" NEWLINE INDENT case_block+ DEDENT | |
| subject_expr: flexible_expression "," [flexible_expression_list [',']] | |
| | assignment_expression | |
| case_block: 'case' patterns [guard] ":" suite | |
| Note: | |
| This section uses single quotes to denote soft keywords. | |
| Pattern matching takes a pattern as input (following "case") and a | |
| subject value (following "match"). The pattern (which may contain | |
| subpatterns) is matched against the subject value. The outcomes are: | |
| * A match success or failure (also termed a pattern success or | |
| failure). | |
| * Possible binding of matched values to a name. The prerequisites for | |
| this are further discussed below. | |
| The "match" and "case" keywords are soft keywords. | |
| See also: | |
| * **PEP 634** – Structural Pattern Matching: Specification | |
| * **PEP 636** – Structural Pattern Matching: Tutorial | |
| Overview | |
| -------- | |
| Here’s an overview of the logical flow of a match statement: | |
| 1. The subject expression "subject_expr" is evaluated and a resulting | |
| subject value obtained. If the subject expression contains a comma, | |
| a tuple is constructed using the standard rules. | |
| 2. Each pattern in a "case_block" is attempted to match with the | |
| subject value. The specific rules for success or failure are | |
| described below. The match attempt can also bind some or all of the | |
| standalone names within the pattern. The precise pattern binding | |
| rules vary per pattern type and are specified below. **Name | |
| bindings made during a successful pattern match outlive the | |
| executed block and can be used after the match statement**. | |
| Note: | |
| During failed pattern matches, some subpatterns may succeed. Do | |
| not rely on bindings being made for a failed match. Conversely, | |
| do not rely on variables remaining unchanged after a failed | |
| match. The exact behavior is dependent on implementation and may | |
| vary. This is an intentional decision made to allow different | |
| implementations to add optimizations. | |
| 3. If the pattern succeeds, the corresponding guard (if present) is | |
| evaluated. In this case all name bindings are guaranteed to have | |
| happened. | |
| * If the guard evaluates as true or is missing, the "block" inside | |
| "case_block" is executed. | |
| * Otherwise, the next "case_block" is attempted as described above. | |
| * If there are no further case blocks, the match statement is | |
| completed. | |
| Note: | |
| Users should generally never rely on a pattern being evaluated. | |
| Depending on implementation, the interpreter may cache values or use | |
| other optimizations which skip repeated evaluations. | |
| A sample match statement: | |
| >>> flag = False | |
| >>> match (100, 200): | |
| ... case (100, 300): # Mismatch: 200 != 300 | |
| ... print('Case 1') | |
| ... case (100, 200) if flag: # Successful match, but guard fails | |
| ... print('Case 2') | |
| ... case (100, y): # Matches and binds y to 200 | |
| ... print(f'Case 3, y: {y}') | |
| ... case _: # Pattern not attempted | |
| ... print('Case 4, I match anything!') | |
| ... | |
| Case 3, y: 200 | |
| In this case, "if flag" is a guard. Read more about that in the next | |
| section. | |
| Guards | |
| ------ | |
| guard: "if" assignment_expression | |
| A "guard" (which is part of the "case") must succeed for code inside | |
| the "case" block to execute. It takes the form: "if" followed by an | |
| expression. | |
| The logical flow of a "case" block with a "guard" follows: | |
| 1. Check that the pattern in the "case" block succeeded. If the | |
| pattern failed, the "guard" is not evaluated and the next "case" | |
| block is checked. | |
| 2. If the pattern succeeded, evaluate the "guard". | |
| * If the "guard" condition evaluates as true, the case block is | |
| selected. | |
| * If the "guard" condition evaluates as false, the case block is | |
| not selected. | |
| * If the "guard" raises an exception during evaluation, the | |
| exception bubbles up. | |
| Guards are allowed to have side effects as they are expressions. | |
| Guard evaluation must proceed from the first to the last case block, | |
| one at a time, skipping case blocks whose pattern(s) don’t all | |
| succeed. (I.e., guard evaluation must happen in order.) Guard | |
| evaluation must stop once a case block is selected. | |
| Irrefutable Case Blocks | |
| ----------------------- | |
| An irrefutable case block is a match-all case block. A match | |
| statement may have at most one irrefutable case block, and it must be | |
| last. | |
| A case block is considered irrefutable if it has no guard and its | |
| pattern is irrefutable. A pattern is considered irrefutable if we can | |
| prove from its syntax alone that it will always succeed. Only the | |
| following patterns are irrefutable: | |
| * AS Patterns whose left-hand side is irrefutable | |
| * OR Patterns containing at least one irrefutable pattern | |
| * Capture Patterns | |
| * Wildcard Patterns | |
| * parenthesized irrefutable patterns | |
| Patterns | |
| -------- | |
| Note: | |
| This section uses grammar notations beyond standard EBNF: | |
| * the notation "SEP.RULE+" is shorthand for "RULE (SEP RULE)*" | |
| * the notation "!RULE" is shorthand for a negative lookahead | |
| assertion | |
| The top-level syntax for "patterns" is: | |
| patterns: open_sequence_pattern | pattern | |
| pattern: as_pattern | or_pattern | |
| closed_pattern: | literal_pattern | |
| | capture_pattern | |
| | wildcard_pattern | |
| | value_pattern | |
| | group_pattern | |
| | sequence_pattern | |
| | mapping_pattern | |
| | class_pattern | |
| The descriptions below will include a description “in simple terms” of | |
| what a pattern does for illustration purposes (credits to Raymond | |
| Hettinger for a document that inspired most of the descriptions). Note | |
| that these descriptions are purely for illustration purposes and **may | |
| not** reflect the underlying implementation. Furthermore, they do not | |
| cover all valid forms. | |
| OR Patterns | |
| ~~~~~~~~~~~ | |
| An OR pattern is two or more patterns separated by vertical bars "|". | |
| Syntax: | |
| or_pattern: "|".closed_pattern+ | |
| Only the final subpattern may be irrefutable, and each subpattern must | |
| bind the same set of names to avoid ambiguity. | |
| An OR pattern matches each of its subpatterns in turn to the subject | |
| value, until one succeeds. The OR pattern is then considered | |
| successful. Otherwise, if none of the subpatterns succeed, the OR | |
| pattern fails. | |
| In simple terms, "P1 | P2 | ..." will try to match "P1", if it fails | |
| it will try to match "P2", succeeding immediately if any succeeds, | |
| failing otherwise. | |
| AS Patterns | |
| ~~~~~~~~~~~ | |
| An AS pattern matches an OR pattern on the left of the "as" keyword | |
| against a subject. Syntax: | |
| as_pattern: or_pattern "as" capture_pattern | |
| If the OR pattern fails, the AS pattern fails. Otherwise, the AS | |
| pattern binds the subject to the name on the right of the as keyword | |
| and succeeds. "capture_pattern" cannot be a "_". | |
| In simple terms "P as NAME" will match with "P", and on success it | |
| will set "NAME = <subject>". | |
| Literal Patterns | |
| ~~~~~~~~~~~~~~~~ | |
| A literal pattern corresponds to most literals in Python. Syntax: | |
| literal_pattern: signed_number | |
| | signed_number "+" NUMBER | |
| | signed_number "-" NUMBER | |
| | strings | |
| | "None" | |
| | "True" | |
| | "False" | |
| signed_number: ["+" | "-"] NUMBER | |
| The rule "strings" and the token "NUMBER" are defined in the standard | |
| Python grammar. Triple-quoted strings are supported. Raw strings and | |
| byte strings are supported. f-strings and t-strings are not | |
| supported. | |
| The forms "signed_number '+' NUMBER" and "signed_number '-' NUMBER" | |
| are for expressing complex numbers; they require a real number on the | |
| left and an imaginary number on the right. E.g. "3 + 4j". | |
| In simple terms, "LITERAL" will succeed only if "<subject> == | |
| LITERAL". For the singletons "None", "True" and "False", the "is" | |
| operator is used. | |
| Capture Patterns | |
| ~~~~~~~~~~~~~~~~ | |
| A capture pattern binds the subject value to a name. Syntax: | |
| capture_pattern: !'_' NAME | |
| A single underscore "_" is not a capture pattern (this is what "!'_'" | |
| expresses). It is instead treated as a "wildcard_pattern". | |
| In a given pattern, a given name can only be bound once. E.g. "case | |
| x, x: ..." is invalid while "case [x] | x: ..." is allowed. | |
| Capture patterns always succeed. The binding follows scoping rules | |
| established by the assignment expression operator in **PEP 572**; the | |
| name becomes a local variable in the closest containing function scope | |
| unless there’s an applicable "global" or "nonlocal" statement. | |
| In simple terms "NAME" will always succeed and it will set "NAME = | |
| <subject>". | |
| Wildcard Patterns | |
| ~~~~~~~~~~~~~~~~~ | |
| A wildcard pattern always succeeds (matches anything) and binds no | |
| name. Syntax: | |
| wildcard_pattern: '_' | |
| "_" is a soft keyword within any pattern, but only within patterns. | |
| It is an identifier, as usual, even within "match" subject | |
| expressions, "guard"s, and "case" blocks. | |
| In simple terms, "_" will always succeed. | |
| Value Patterns | |
| ~~~~~~~~~~~~~~ | |
| A value pattern represents a named value in Python. Syntax: | |
| value_pattern: attr | |
| attr: name_or_attr "." NAME | |
| name_or_attr: attr | NAME | |
| The dotted name in the pattern is looked up using standard Python name | |
| resolution rules. The pattern succeeds if the value found compares | |
| equal to the subject value (using the "==" equality operator). | |
| In simple terms "NAME1.NAME2" will succeed only if "<subject> == | |
| NAME1.NAME2" | |
| Note: | |
| If the same value occurs multiple times in the same match statement, | |
| the interpreter may cache the first value found and reuse it rather | |
| than repeat the same lookup. This cache is strictly tied to a given | |
| execution of a given match statement. | |
| Group Patterns | |
| ~~~~~~~~~~~~~~ | |
| A group pattern allows users to add parentheses around patterns to | |
| emphasize the intended grouping. Otherwise, it has no additional | |
| syntax. Syntax: | |
| group_pattern: "(" pattern ")" | |
| In simple terms "(P)" has the same effect as "P". | |
| Sequence Patterns | |
| ~~~~~~~~~~~~~~~~~ | |
| A sequence pattern contains several subpatterns to be matched against | |
| sequence elements. The syntax is similar to the unpacking of a list or | |
| tuple. | |
| sequence_pattern: "[" [maybe_sequence_pattern] "]" | |
| | "(" [open_sequence_pattern] ")" | |
| open_sequence_pattern: maybe_star_pattern "," [maybe_sequence_pattern] | |
| maybe_sequence_pattern: ",".maybe_star_pattern+ ","? | |
| maybe_star_pattern: star_pattern | pattern | |
| star_pattern: "*" (capture_pattern | wildcard_pattern) | |
| There is no difference if parentheses or square brackets are used for | |
| sequence patterns (i.e. "(...)" vs "[...]" ). | |
| Note: | |
| A single pattern enclosed in parentheses without a trailing comma | |
| (e.g. "(3 | 4)") is a group pattern. While a single pattern enclosed | |
| in square brackets (e.g. "[3 | 4]") is still a sequence pattern. | |
| At most one star subpattern may be in a sequence pattern. The star | |
| subpattern may occur in any position. If no star subpattern is | |
| present, the sequence pattern is a fixed-length sequence pattern; | |
| otherwise it is a variable-length sequence pattern. | |
| The following is the logical flow for matching a sequence pattern | |
| against a subject value: | |
| 1. If the subject value is not a sequence [2], the sequence pattern | |
| fails. | |
| 2. If the subject value is an instance of "str", "bytes" or | |
| "bytearray" the sequence pattern fails. | |
| 3. The subsequent steps depend on whether the sequence pattern is | |
| fixed or variable-length. | |
| If the sequence pattern is fixed-length: | |
| 1. If the length of the subject sequence is not equal to the number | |
| of subpatterns, the sequence pattern fails | |
| 2. Subpatterns in the sequence pattern are matched to their | |
| corresponding items in the subject sequence from left to right. | |
| Matching stops as soon as a subpattern fails. If all | |
| subpatterns succeed in matching their corresponding item, the | |
| sequence pattern succeeds. | |
| Otherwise, if the sequence pattern is variable-length: | |
| 1. If the length of the subject sequence is less than the number of | |
| non-star subpatterns, the sequence pattern fails. | |
| 2. The leading non-star subpatterns are matched to their | |
| corresponding items as for fixed-length sequences. | |
| 3. If the previous step succeeds, the star subpattern matches a | |
| list formed of the remaining subject items, excluding the | |
| remaining items corresponding to non-star subpatterns following | |
| the star subpattern. | |
| 4. Remaining non-star subpatterns are matched to their | |
| corresponding subject items, as for a fixed-length sequence. | |
| Note: | |
| The length of the subject sequence is obtained via "len()" (i.e. | |
| via the "__len__()" protocol). This length may be cached by the | |
| interpreter in a similar manner as value patterns. | |
| In simple terms "[P1, P2, P3," … ", P<N>]" matches only if all the | |
| following happens: | |
| * check "<subject>" is a sequence | |
| * "len(subject) == <N>" | |
| * "P1" matches "<subject>[0]" (note that this match can also bind | |
| names) | |
| * "P2" matches "<subject>[1]" (note that this match can also bind | |
| names) | |
| * … and so on for the corresponding pattern/element. | |
| Mapping Patterns | |
| ~~~~~~~~~~~~~~~~ | |
| A mapping pattern contains one or more key-value patterns. The syntax | |
| is similar to the construction of a dictionary. Syntax: | |
| mapping_pattern: "{" [items_pattern] "}" | |
| items_pattern: ",".key_value_pattern+ ","? | |
| key_value_pattern: (literal_pattern | value_pattern) ":" pattern | |
| | double_star_pattern | |
| double_star_pattern: "**" capture_pattern | |
| At most one double star pattern may be in a mapping pattern. The | |
| double star pattern must be the last subpattern in the mapping | |
| pattern. | |
| Duplicate keys in mapping patterns are disallowed. Duplicate literal | |
| keys will raise a "SyntaxError". Two keys that otherwise have the same | |
| value will raise a "ValueError" at runtime. | |
| The following is the logical flow for matching a mapping pattern | |
| against a subject value: | |
| 1. If the subject value is not a mapping [3],the mapping pattern | |
| fails. | |
| 2. If every key given in the mapping pattern is present in the subject | |
| mapping, and the pattern for each key matches the corresponding | |
| item of the subject mapping, the mapping pattern succeeds. | |
| 3. If duplicate keys are detected in the mapping pattern, the pattern | |
| is considered invalid. A "SyntaxError" is raised for duplicate | |
| literal values; or a "ValueError" for named keys of the same value. | |
| Note: | |
| Key-value pairs are matched using the two-argument form of the | |
| mapping subject’s "get()" method. Matched key-value pairs must | |
| already be present in the mapping, and not created on-the-fly via | |
| "__missing__()" or "__getitem__()". | |
| In simple terms "{KEY1: P1, KEY2: P2, ... }" matches only if all the | |
| following happens: | |
| * check "<subject>" is a mapping | |
| * "KEY1 in <subject>" | |
| * "P1" matches "<subject>[KEY1]" | |
| * … and so on for the corresponding KEY/pattern pair. | |
| Class Patterns | |
| ~~~~~~~~~~~~~~ | |
| A class pattern represents a class and its positional and keyword | |
| arguments (if any). Syntax: | |
| class_pattern: name_or_attr "(" [pattern_arguments ","?] ")" | |
| pattern_arguments: positional_patterns ["," keyword_patterns] | |
| | keyword_patterns | |
| positional_patterns: ",".pattern+ | |
| keyword_patterns: ",".keyword_pattern+ | |
| keyword_pattern: NAME "=" pattern | |
| The same keyword should not be repeated in class patterns. | |
| The following is the logical flow for matching a class pattern against | |
| a subject value: | |
| 1. If "name_or_attr" is not an instance of the builtin "type" , raise | |
| "TypeError". | |
| 2. If the subject value is not an instance of "name_or_attr" (tested | |
| via "isinstance()"), the class pattern fails. | |
| 3. If no pattern arguments are present, the pattern succeeds. | |
| Otherwise, the subsequent steps depend on whether keyword or | |
| positional argument patterns are present. | |
| For a number of built-in types (specified below), a single | |
| positional subpattern is accepted which will match the entire | |
| subject; for these types keyword patterns also work as for other | |
| types. | |
| If only keyword patterns are present, they are processed as | |
| follows, one by one: | |
| 1. The keyword is looked up as an attribute on the subject. | |
| * If this raises an exception other than "AttributeError", the | |
| exception bubbles up. | |
| * If this raises "AttributeError", the class pattern has failed. | |
| * Else, the subpattern associated with the keyword pattern is | |
| matched against the subject’s attribute value. If this fails, | |
| the class pattern fails; if this succeeds, the match proceeds | |
| to the next keyword. | |
| 2. If all keyword patterns succeed, the class pattern succeeds. | |
| If any positional patterns are present, they are converted to | |
| keyword patterns using the "__match_args__" attribute on the class | |
| "name_or_attr" before matching: | |
| 1. The equivalent of "getattr(cls, "__match_args__", ())" is | |
| called. | |
| * If this raises an exception, the exception bubbles up. | |
| * If the returned value is not a tuple, the conversion fails and | |
| "TypeError" is raised. | |
| * If there are more positional patterns than | |
| "len(cls.__match_args__)", "TypeError" is raised. | |
| * Otherwise, positional pattern "i" is converted to a keyword | |
| pattern using "__match_args__[i]" as the keyword. | |
| "__match_args__[i]" must be a string; if not "TypeError" is | |
| raised. | |
| * If there are duplicate keywords, "TypeError" is raised. | |
| See also: | |
| Customizing positional arguments in class pattern matching | |
| 2. Once all positional patterns have been converted to keyword | |
| patterns, the match proceeds as if there were only keyword | |
| patterns. | |
| For the following built-in types the handling of positional | |
| subpatterns is different: | |
| * "bool" | |
| * "bytearray" | |
| * "bytes" | |
| * "dict" | |
| * "float" | |
| * "frozendict" | |
| * "frozenset" | |
| * "int" | |
| * "list" | |
| * "set" | |
| * "str" | |
| * "tuple" | |
| These classes accept a single positional argument, and the pattern | |
| there is matched against the whole object rather than an attribute. | |
| For example "int(0|1)" matches the value "0", but not the value | |
| "0.0". | |
| In simple terms "CLS(P1, attr=P2)" matches only if the following | |
| happens: | |
| * "isinstance(<subject>, CLS)" | |
| * convert "P1" to a keyword pattern using "CLS.__match_args__" | |
| * For each keyword argument "attr=P2": | |
| * "hasattr(<subject>, "attr")" | |
| * "P2" matches "<subject>.attr" | |
| * … and so on for the corresponding keyword argument/pattern pair. | |
| See also: | |
| * **PEP 634** – Structural Pattern Matching: Specification | |
| * **PEP 636** – Structural Pattern Matching: Tutorial | |
| Function definitions | |
| ==================== | |
| A function definition defines a user-defined function object (see | |
| section The standard type hierarchy): | |
| funcdef: [decorators] "def" funcname [type_params] "(" [parameter_list] ")" | |
| ["->" expression] ":" suite | |
| decorators: decorator+ | |
| decorator: "@" assignment_expression NEWLINE | |
| parameter_list: defparameter ("," defparameter)* "," "/" ["," [parameter_list_no_posonly]] | |
| | parameter_list_no_posonly | |
| parameter_list_no_posonly: defparameter ("," defparameter)* ["," [parameter_list_starargs]] | |
| | parameter_list_starargs | |
| parameter_list_starargs: "*" star_parameter ("," defparameter)* ["," [parameter_star_kwargs]] | |
| | "*" ("," defparameter)+ ["," [parameter_star_kwargs]] | |
| | parameter_star_kwargs | |
| parameter_star_kwargs: "**" parameter [","] | |
| parameter: identifier [":" expression] | |
| star_parameter: identifier [":" ["*"] expression] | |
| defparameter: parameter ["=" expression] | |
| funcname: identifier | |
| A function definition is an executable statement. Its execution binds | |
| the function name in the current local namespace to a function object | |
| (a wrapper around the executable code for the function). This | |
| function object contains a reference to the current global namespace | |
| as the global namespace to be used when the function is called. | |
| The function definition does not execute the function body; this gets | |
| executed only when the function is called. [4] | |
| A function definition may be wrapped by one or more *decorator* | |
| expressions. Decorator expressions are evaluated when the function is | |
| defined, in the scope that contains the function definition. The | |
| result must be a callable, which is invoked with the function object | |
| as the only argument. The returned value is bound to the function name | |
| instead of the function object. Multiple decorators are applied in | |
| nested fashion. For example, the following code | |
| @f1(arg) | |
| @f2 | |
| def func(): pass | |
| is roughly equivalent to | |
| def func(): pass | |
| func = f1(arg)(f2(func)) | |
| except that the original function is not temporarily bound to the name | |
| "func". | |
| Changed in version 3.9: Functions may be decorated with any valid | |
| "assignment_expression". Previously, the grammar was much more | |
| restrictive; see **PEP 614** for details. | |
| A list of type parameters may be given in square brackets between the | |
| function’s name and the opening parenthesis for its parameter list. | |
| This indicates to static type checkers that the function is generic. | |
| At runtime, the type parameters can be retrieved from the function’s | |
| "__type_params__" attribute. See Generic functions for more. | |
| Changed in version 3.12: Type parameter lists are new in Python 3.12. | |
| When one or more *parameters* have the form *parameter* "=" | |
| *expression*, the function is said to have “default parameter values.” | |
| For a parameter with a default value, the corresponding *argument* may | |
| be omitted from a call, in which case the parameter’s default value is | |
| substituted. If a parameter has a default value, all following | |
| parameters up until the “"*"” must also have a default value — this is | |
| a syntactic restriction that is not expressed by the grammar. | |
| **Default parameter values are evaluated from left to right when the | |
| function definition is executed.** This means that the expression is | |
| evaluated once, when the function is defined, and that the same “pre- | |
| computed” value is used for each call. This is especially important | |
| to understand when a default parameter value is a mutable object, such | |
| as a list or a dictionary: if the function modifies the object (e.g. | |
| by appending an item to a list), the default parameter value is in | |
| effect modified. This is generally not what was intended. A way | |
| around this is to use "None" as the default, and explicitly test for | |
| it in the body of the function, for example: | |
| def whats_on_the_telly(penguin=None): | |
| if penguin is None: | |
| penguin = [] | |
| penguin.append("property of the zoo") | |
| return penguin | |
| Function call semantics are described in more detail in section Calls. | |
| A function call always assigns values to all parameters mentioned in | |
| the parameter list, either from positional arguments, from keyword | |
| arguments, or from default values. If the form “"*identifier"” is | |
| present, it is initialized to a tuple receiving any excess positional | |
| parameters, defaulting to the empty tuple. If the form | |
| “"**identifier"” is present, it is initialized to a new ordered | |
| mapping receiving any excess keyword arguments, defaulting to a new | |
| empty mapping of the same type. Parameters after “"*"” or | |
| “"*identifier"” are keyword-only parameters and may only be passed by | |
| keyword arguments. Parameters before “"/"” are positional-only | |
| parameters and may only be passed by positional arguments. | |
| Changed in version 3.8: The "/" function parameter syntax may be used | |
| to indicate positional-only parameters. See **PEP 570** for details. | |
| Parameters may have an *annotation* of the form “": expression"” | |
| following the parameter name. Any parameter may have an annotation, | |
| even those of the form "*identifier" or "**identifier". (As a special | |
| case, parameters of the form "*identifier" may have an annotation “": | |
| *expression"”.) Functions may have “return” annotation of the form | |
| “"-> expression"” after the parameter list. These annotations can be | |
| any valid Python expression. The presence of annotations does not | |
| change the semantics of a function. See Annotations for more | |
| information on annotations. | |
| Changed in version 3.11: Parameters of the form “"*identifier"” may | |
| have an annotation “": *expression"”. See **PEP 646**. | |
| It is also possible to create anonymous functions (functions not bound | |
| to a name), for immediate use in expressions. This uses lambda | |
| expressions, described in section Lambdas. Note that the lambda | |
| expression is merely a shorthand for a simplified function definition; | |
| a function defined in a “"def"” statement can be passed around or | |
| assigned to another name just like a function defined by a lambda | |
| expression. The “"def"” form is actually more powerful since it | |
| allows the execution of multiple statements and annotations. | |
| **Programmer’s note:** Functions are first-class objects. A “"def"” | |
| statement executed inside a function definition defines a local | |
| function that can be returned or passed around. Free variables used | |
| in the nested function can access the local variables of the function | |
| containing the def. See section Naming and binding for details. | |
| See also: | |
| **PEP 3107** - Function Annotations | |
| The original specification for function annotations. | |
| **PEP 484** - Type Hints | |
| Definition of a standard meaning for annotations: type hints. | |
| **PEP 526** - Syntax for Variable Annotations | |
| Ability to type hint variable declarations, including class | |
| variables and instance variables. | |
| **PEP 563** - Postponed Evaluation of Annotations | |
| Support for forward references within annotations by preserving | |
| annotations in a string form at runtime instead of eager | |
| evaluation. | |
| **PEP 318** - Decorators for Functions and Methods | |
| Function and method decorators were introduced. Class decorators | |
| were introduced in **PEP 3129**. | |
| Class definitions | |
| ================= | |
| A class definition defines a class object (see section The standard | |
| type hierarchy): | |
| classdef: [decorators] "class" classname [type_params] [inheritance] ":" suite | |
| inheritance: "(" [argument_list] ")" | |
| classname: identifier | |
| A class definition is an executable statement. The inheritance list | |
| usually gives a list of base classes (see Metaclasses for more | |
| advanced uses), so each item in the list should evaluate to a class | |
| object which allows subclassing. Classes without an inheritance list | |
| inherit, by default, from the base class "object"; hence, | |
| class Foo: | |
| pass | |
| is equivalent to | |
| class Foo(object): | |
| pass | |
| There may be one or more base classes; see Multiple inheritance below | |
| for more information. | |
| The class’s suite is then executed in a new execution frame (see | |
| Naming and binding), using a newly created local namespace and the | |
| original global namespace. (Usually, the suite contains mostly | |
| function definitions.) When the class’s suite finishes execution, its | |
| execution frame is discarded but its local namespace is saved. [5] A | |
| class object is then created using the inheritance list for the base | |
| classes and the saved local namespace for the attribute dictionary. | |
| The class name is bound to this class object in the original local | |
| namespace. | |
| The order in which attributes are defined in the class body is | |
| preserved in the new class’s "__dict__". Note that this is reliable | |
| only right after the class is created and only for classes that were | |
| defined using the definition syntax. | |
| Class creation can be customized heavily using metaclasses. | |
| Classes can also be decorated: just like when decorating functions, | |
| @f1(arg) | |
| @f2 | |
| class Foo: pass | |
| is roughly equivalent to | |
| class Foo: pass | |
| Foo = f1(arg)(f2(Foo)) | |
| The evaluation rules for the decorator expressions are the same as for | |
| function decorators. The result is then bound to the class name. | |
| Changed in version 3.9: Classes may be decorated with any valid | |
| "assignment_expression". Previously, the grammar was much more | |
| restrictive; see **PEP 614** for details. | |
| A list of type parameters may be given in square brackets immediately | |
| after the class’s name. This indicates to static type checkers that | |
| the class is generic. At runtime, the type parameters can be retrieved | |
| from the class’s "__type_params__" attribute. See Generic classes for | |
| more. | |
| Changed in version 3.12: Type parameter lists are new in Python 3.12. | |
| **Programmer’s note:** Variables defined in the class definition are | |
| class attributes; they are shared by instances. Instance attributes | |
| can be set in a method with "self.name = value". Both class and | |
| instance attributes are accessible through the notation “"self.name"”, | |
| and an instance attribute hides a class attribute with the same name | |
| when accessed in this way. Class attributes can be used as defaults | |
| for instance attributes, but using mutable values there can lead to | |
| unexpected results. Descriptors can be used to create instance | |
| variables with different implementation details. | |
| See also: | |
| **PEP 3115** - Metaclasses in Python 3000 | |
| The proposal that changed the declaration of metaclasses to the | |
| current syntax, and the semantics for how classes with | |
| metaclasses are constructed. | |
| **PEP 3129** - Class Decorators | |
| The proposal that added class decorators. Function and method | |
| decorators were introduced in **PEP 318**. | |
| Multiple inheritance | |
| -------------------- | |
| Python classes may have multiple base classes, a technique known as | |
| *multiple inheritance*. The base classes are specified in the class | |
| definition by listing them in parentheses after the class name, | |
| separated by commas. For example, the following class definition: | |
| >>> class A: pass | |
| >>> class B: pass | |
| >>> class C(A, B): pass | |
| defines a class "C" that inherits from classes "A" and "B". | |
| The *method resolution order* (MRO) is the order in which base classes | |
| are searched when looking up an attribute on a class. See The Python | |
| 2.3 Method Resolution Order for a description of how Python determines | |
| the MRO for a class. | |
| Multiple inheritance is not always allowed. Attempting to define a | |
| class with multiple inheritance will raise an error if one of the | |
| bases does not allow subclassing, if a consistent MRO cannot be | |
| created, if no valid metaclass can be determined, or if there is an | |
| instance layout conflict. We’ll discuss each of these in turn. | |
| First, all base classes must allow subclassing. While most classes | |
| allow subclassing, some built-in classes do not, such as "bool": | |
| >>> class SubBool(bool): # TypeError | |
| ... pass | |
| Traceback (most recent call last): | |
| ... | |
| TypeError: type 'bool' is not an acceptable base type | |
| In the resolved MRO of a class, the class’s bases appear in the order | |
| they were specified in the class’s bases list. Additionally, the MRO | |
| always lists a child class before any of its bases. A class definition | |
| will fail if it is impossible to resolve a consistent MRO that | |
| satisfies these rules from the list of bases provided: | |
| >>> class Base: pass | |
| >>> class Child(Base): pass | |
| >>> class Grandchild(Base, Child): pass # TypeError | |
| Traceback (most recent call last): | |
| ... | |
| TypeError: Cannot create a consistent method resolution order (MRO) for bases Base, Child | |
| In the MRO of "Grandchild", "Base" must appear before "Child" because | |
| it is first in the base class list, but it must also appear after | |
| "Child" because it is a parent of "Child". This is a contradiction, so | |
| the class cannot be defined. | |
| If some of the bases have a custom *metaclass*, the metaclass of the | |
| resulting class is chosen among the metaclasses of the bases and the | |
| explicitly specified metaclass of the child class. It must be a | |
| metaclass that is a subclass of all other candidate metaclasses. If no | |
| such metaclass exists among the candidates, the class cannot be | |
| created, as explained in Determining the appropriate metaclass. | |
| Finally, the instance layouts of the bases must be compatible. This | |
| means that it must be possible to compute a *solid base* for the | |
| class. Exactly which classes are solid bases depends on the Python | |
| implementation. | |
| **CPython implementation detail:** In CPython, a class is a solid base | |
| if it has a nonempty "__slots__" definition. Many but not all classes | |
| defined in C are also solid bases, including most builtins (such as | |
| "int" or "BaseException") but excluding most concrete "Exception" | |
| classes. Generally, a C class is a solid base if its underlying struct | |
| is different in size from its base class. | |
| Every class has a solid base. "object", the base class, has itself as | |
| its solid base. If there is a single base, the child class’s solid | |
| base is that class if it is a solid base, or else the base class’s | |
| solid base. If there are multiple bases, we first find the solid base | |
| for each base class to produce a list of candidate solid bases. If | |
| there is a unique solid base that is a subclass of all others, then | |
| that class is the solid base. Otherwise, class creation fails. | |
| Example: | |
| >>> class Solid1: | |
| ... __slots__ = ("solid1",) | |
| >>> | |
| >>> class Solid2: | |
| ... __slots__ = ("solid2",) | |
| >>> | |
| >>> class SolidChild(Solid1): | |
| ... __slots__ = ("solid_child",) | |
| >>> | |
| >>> class C1: # solid base is `object` | |
| ... pass | |
| >>> | |
| >>> # OK: solid bases are `Solid1` and `object`, and `Solid1` is a subclass of `object`. | |
| >>> class C2(Solid1, C1): # solid base is `Solid1` | |
| ... pass | |
| >>> | |
| >>> # OK: solid bases are `SolidChild` and `Solid1`, and `SolidChild` is a subclass of `Solid1`. | |
| >>> class C3(SolidChild, Solid1): # solid base is `SolidChild` | |
| ... pass | |
| >>> | |
| >>> # Error: solid bases are `Solid1` and `Solid2`, but neither is a subclass of the other. | |
| >>> class C4(Solid1, Solid2): # error: no single solid base | |
| ... pass | |
| Traceback (most recent call last): | |
| ... | |
| TypeError: multiple bases have instance lay-out conflict | |
| Coroutines | |
| ========== | |
| Added in version 3.5. | |
| Coroutine function definition | |
| ----------------------------- | |
| async_funcdef: [decorators] "async" "def" funcname "(" [parameter_list] ")" | |
| ["->" expression] ":" suite | |
| Execution of Python coroutines can be suspended and resumed at many | |
| points (see *coroutine*). "await" expressions, "async for" and "async | |
| with" can only be used in the body of a coroutine function. | |
| Functions defined with "async def" syntax are always coroutine | |
| functions, even if they do not contain "await" or "async" keywords. | |
| It is a "SyntaxError" to use a "yield from" expression inside the body | |
| of a coroutine function. | |
| An example of a coroutine function: | |
| async def func(param1, param2): | |
| do_stuff() | |
| await some_coroutine() | |
| Changed in version 3.7: "await" and "async" are now keywords; | |
| previously they were only treated as such inside the body of a | |
| coroutine function. | |
| The "async for" statement | |
| ------------------------- | |
| async_for_stmt: "async" for_stmt | |
| An *asynchronous iterable* provides an "__aiter__" method that | |
| directly returns an *asynchronous iterator*, which can call | |
| asynchronous code in its "__anext__" method. | |
| The "async for" statement allows convenient iteration over | |
| asynchronous iterables. | |
| The following code: | |
| async for TARGET in ITER: | |
| SUITE | |
| else: | |
| SUITE2 | |
| Is semantically equivalent to: | |
| iter = (ITER).__aiter__() | |
| running = True | |
| while running: | |
| try: | |
| TARGET = await iter.__anext__() | |
| except StopAsyncIteration: | |
| running = False | |
| else: | |
| SUITE | |
| else: | |
| SUITE2 | |
| except that implicit special method lookup is used for "__aiter__()" | |
| and "__anext__()". | |
| It is a "SyntaxError" to use an "async for" statement outside the body | |
| of a coroutine function. | |
| The "async with" statement | |
| -------------------------- | |
| async_with_stmt: "async" with_stmt | |
| An *asynchronous context manager* is a *context manager* that is able | |
| to suspend execution in its *enter* and *exit* methods. | |
| The following code: | |
| async with EXPRESSION as TARGET: | |
| SUITE | |
| is semantically equivalent to: | |
| manager = (EXPRESSION) | |
| aenter = manager.__aenter__ | |
| aexit = manager.__aexit__ | |
| value = await aenter() | |
| hit_except = False | |
| try: | |
| TARGET = value | |
| SUITE | |
| except: | |
| hit_except = True | |
| if not await aexit(*sys.exc_info()): | |
| raise | |
| finally: | |
| if not hit_except: | |
| await aexit(None, None, None) | |
| except that implicit special method lookup is used for "__aenter__()" | |
| and "__aexit__()". | |
| It is a "SyntaxError" to use an "async with" statement outside the | |
| body of a coroutine function. | |
| See also: | |
| **PEP 492** - Coroutines with async and await syntax | |
| The proposal that made coroutines a proper standalone concept in | |
| Python, and added supporting syntax. | |
| Type parameter lists | |
| ==================== | |
| Added in version 3.12. | |
| Changed in version 3.13: Support for default values was added (see | |
| **PEP 696**). | |
| type_params: "[" type_param ("," type_param)* "]" | |
| type_param: typevar | typevartuple | paramspec | |
| typevar: identifier (":" expression)? ("=" expression)? | |
| typevartuple: "*" identifier ("=" expression)? | |
| paramspec: "**" identifier ("=" expression)? | |
| Functions (including coroutines), classes and type aliases may contain | |
| a type parameter list: | |
| def max[T](args: list[T]) -> T: | |
| ... | |
| async def amax[T](args: list[T]) -> T: | |
| ... | |
| class Bag[T]: | |
| def __iter__(self) -> Iterator[T]: | |
| ... | |
| def add(self, arg: T) -> None: | |
| ... | |
| type ListOrSet[T] = list[T] | set[T] | |
| Semantically, this indicates that the function, class, or type alias | |
| is generic over a type variable. This information is primarily used by | |
| static type checkers, and at runtime, generic objects behave much like | |
| their non-generic counterparts. | |
| Type parameters are declared in square brackets ("[]") immediately | |
| after the name of the function, class, or type alias. The type | |
| parameters are accessible within the scope of the generic object, but | |
| not elsewhere. Thus, after a declaration "def func[T](): pass", the | |
| name "T" is not available in the module scope. Below, the semantics of | |
| generic objects are described with more precision. The scope of type | |
| parameters is modeled with a special function (technically, an | |
| annotation scope) that wraps the creation of the generic object. | |
| Generic functions, classes, and type aliases have a "__type_params__" | |
| attribute listing their type parameters. | |
| Type parameters come in three kinds: | |
| * "typing.TypeVar", introduced by a plain name (e.g., "T"). | |
| Semantically, this represents a single type to a type checker. | |
| * "typing.TypeVarTuple", introduced by a name prefixed with a single | |
| asterisk (e.g., "*Ts"). Semantically, this stands for a tuple of any | |
| number of types. | |
| * "typing.ParamSpec", introduced by a name prefixed with two asterisks | |
| (e.g., "**P"). Semantically, this stands for the parameters of a | |
| callable. | |
| "typing.TypeVar" declarations can define *bounds* and *constraints* | |
| with a colon (":") followed by an expression. A single expression | |
| after the colon indicates a bound (e.g. "T: int"). Semantically, this | |
| means that the "typing.TypeVar" can only represent types that are a | |
| subtype of this bound. A parenthesized tuple of expressions after the | |
| colon indicates a set of constraints (e.g. "T: (str, bytes)"). Each | |
| member of the tuple should be a type (again, this is not enforced at | |
| runtime). Constrained type variables can only take on one of the types | |
| in the list of constraints. | |
| For "typing.TypeVar"s declared using the type parameter list syntax, | |
| the bound and constraints are not evaluated when the generic object is | |
| created, but only when the value is explicitly accessed through the | |
| attributes "__bound__" and "__constraints__". To accomplish this, the | |
| bounds or constraints are evaluated in a separate annotation scope. | |
| "typing.TypeVarTuple"s and "typing.ParamSpec"s cannot have bounds or | |
| constraints. | |
| All three flavors of type parameters can also have a *default value*, | |
| which is used when the type parameter is not explicitly provided. This | |
| is added by appending a single equals sign ("=") followed by an | |
| expression. Like the bounds and constraints of type variables, the | |
| default value is not evaluated when the object is created, but only | |
| when the type parameter’s "__default__" attribute is accessed. To this | |
| end, the default value is evaluated in a separate annotation scope. If | |
| no default value is specified for a type parameter, the "__default__" | |
| attribute is set to the special sentinel object "typing.NoDefault". | |
| The following example indicates the full set of allowed type parameter | |
| declarations: | |
| def overly_generic[ | |
| SimpleTypeVar, | |
| TypeVarWithDefault = int, | |
| TypeVarWithBound: int, | |
| TypeVarWithConstraints: (str, bytes), | |
| *SimpleTypeVarTuple = (int, float), | |
| **SimpleParamSpec = (str, bytearray), | |
| ]( | |
| a: SimpleTypeVar, | |
| b: TypeVarWithDefault, | |
| c: TypeVarWithBound, | |
| d: Callable[SimpleParamSpec, TypeVarWithConstraints], | |
| *e: SimpleTypeVarTuple, | |
| ): ... | |
| Generic functions | |
| ----------------- | |
| Generic functions are declared as follows: | |
| def func[T](arg: T): ... | |
| This syntax is equivalent to: | |
| annotation-def TYPE_PARAMS_OF_func(): | |
| T = typing.TypeVar("T") | |
| def func(arg: T): ... | |
| func.__type_params__ = (T,) | |
| return func | |
| func = TYPE_PARAMS_OF_func() | |
| Here "annotation-def" indicates an annotation scope, which is not | |
| actually bound to any name at runtime. (One other liberty is taken in | |
| the translation: the syntax does not go through attribute access on | |
| the "typing" module, but creates an instance of "typing.TypeVar" | |
| directly.) | |
| The annotations of generic functions are evaluated within the | |
| annotation scope used for declaring the type parameters, but the | |
| function’s defaults and decorators are not. | |
| The following example illustrates the scoping rules for these cases, | |
| as well as for additional flavors of type parameters: | |
| @decorator | |
| def func[T: int, *Ts, **P](*args: *Ts, arg: Callable[P, T] = some_default): | |
| ... | |
| Except for the lazy evaluation of the "TypeVar" bound, this is | |
| equivalent to: | |
| DEFAULT_OF_arg = some_default | |
| annotation-def TYPE_PARAMS_OF_func(): | |
| annotation-def BOUND_OF_T(): | |
| return int | |
| # In reality, BOUND_OF_T() is evaluated only on demand. | |
| T = typing.TypeVar("T", bound=BOUND_OF_T()) | |
| Ts = typing.TypeVarTuple("Ts") | |
| P = typing.ParamSpec("P") | |
| def func(*args: *Ts, arg: Callable[P, T] = DEFAULT_OF_arg): | |
| ... | |
| func.__type_params__ = (T, Ts, P) | |
| return func | |
| func = decorator(TYPE_PARAMS_OF_func()) | |
| The capitalized names like "DEFAULT_OF_arg" are not actually bound at | |
| runtime. | |
| Generic classes | |
| --------------- | |
| Generic classes are declared as follows: | |
| class Bag[T]: ... | |
| This syntax is equivalent to: | |
| annotation-def TYPE_PARAMS_OF_Bag(): | |
| T = typing.TypeVar("T") | |
| class Bag(typing.Generic[T]): | |
| __type_params__ = (T,) | |
| ... | |
| return Bag | |
| Bag = TYPE_PARAMS_OF_Bag() | |
| Here again "annotation-def" (not a real keyword) indicates an | |
| annotation scope, and the name "TYPE_PARAMS_OF_Bag" is not actually | |
| bound at runtime. | |
| Generic classes implicitly inherit from "typing.Generic". The base | |
| classes and keyword arguments of generic classes are evaluated within | |
| the type scope for the type parameters, and decorators are evaluated | |
| outside that scope. This is illustrated by this example: | |
| @decorator | |
| class Bag(Base[T], arg=T): ... | |
| This is equivalent to: | |
| annotation-def TYPE_PARAMS_OF_Bag(): | |
| T = typing.TypeVar("T") | |
| class Bag(Base[T], typing.Generic[T], arg=T): | |
| __type_params__ = (T,) | |
| ... | |
| return Bag | |
| Bag = decorator(TYPE_PARAMS_OF_Bag()) | |
| Generic type aliases | |
| -------------------- | |
| The "type" statement can also be used to create a generic type alias: | |
| type ListOrSet[T] = list[T] | set[T] | |
| Except for the lazy evaluation of the value, this is equivalent to: | |
| annotation-def TYPE_PARAMS_OF_ListOrSet(): | |
| T = typing.TypeVar("T") | |
| annotation-def VALUE_OF_ListOrSet(): | |
| return list[T] | set[T] | |
| # In reality, the value is lazily evaluated | |
| return typing.TypeAliasType("ListOrSet", VALUE_OF_ListOrSet(), type_params=(T,)) | |
| ListOrSet = TYPE_PARAMS_OF_ListOrSet() | |
| Here, "annotation-def" (not a real keyword) indicates an annotation | |
| scope. The capitalized names like "TYPE_PARAMS_OF_ListOrSet" are not | |
| actually bound at runtime. | |
| Annotations | |
| =========== | |
| Changed in version 3.14: Annotations are now lazily evaluated by | |
| default. | |
| Variables and function parameters may carry *annotations*, created by | |
| adding a colon after the name, followed by an expression: | |
| x: annotation = 1 | |
| def f(param: annotation): ... | |
| Functions may also carry a return annotation following an arrow: | |
| def f() -> annotation: ... | |
| Annotations are conventionally used for *type hints*, but this is not | |
| enforced by the language, and in general annotations may contain | |
| arbitrary expressions. The presence of annotations does not change the | |
| runtime semantics of the code, except if some mechanism is used that | |
| introspects and uses the annotations (such as "dataclasses" or | |
| "@functools.singledispatch"). | |
| By default, annotations are lazily evaluated in an annotation scope. | |
| This means that they are not evaluated when the code containing the | |
| annotation is evaluated. Instead, the interpreter saves information | |
| that can be used to evaluate the annotation later if requested. The | |
| "annotationlib" module provides tools for evaluating annotations. | |
| If the future statement "from __future__ import annotations" is | |
| present, all annotations are instead stored as strings: | |
| >>> from __future__ import annotations | |
| >>> def f(param: annotation): ... | |
| >>> f.__annotations__ | |
| {'param': 'annotation'} | |
| This future statement will be deprecated and removed in a future | |
| version of Python, but not before Python 3.13 reaches its end of life | |
| (see **PEP 749**). When it is used, introspection tools like | |
| "annotationlib.get_annotations()" and "typing.get_type_hints()" are | |
| less likely to be able to resolve annotations at runtime. | |
| -[ Footnotes ]- | |
| [1] The exception is propagated to the invocation stack unless there | |
| is a "finally" clause which happens to raise another exception. | |
| That new exception causes the old one to be lost. | |
| [2] In pattern matching, a sequence is defined as one of the | |
| following: | |
| * a class that inherits from "collections.abc.Sequence" | |
| * a Python class that has been registered as | |
| "collections.abc.Sequence" | |
| * a builtin class that has its (CPython) "Py_TPFLAGS_SEQUENCE" bit | |
| set | |
| * a class that inherits from any of the above | |
| The following standard library classes are sequences: | |
| * "array.array" | |
| * "collections.deque" | |
| * "list" | |
| * "memoryview" | |
| * "range" | |
| * "tuple" | |
| Note: | |
| Subject values of type "str", "bytes", and "bytearray" do not | |
| match sequence patterns. | |
| [3] In pattern matching, a mapping is defined as one of the following: | |
| * a class that inherits from "collections.abc.Mapping" | |
| * a Python class that has been registered as | |
| "collections.abc.Mapping" | |
| * a builtin class that has its (CPython) "Py_TPFLAGS_MAPPING" bit | |
| set | |
| * a class that inherits from any of the above | |
| The standard library classes "dict" and "types.MappingProxyType" | |
| are mappings. | |
| [4] A string literal appearing as the first statement in the function | |
| body is transformed into the function’s "__doc__" attribute and | |
| therefore the function’s *docstring*. | |
| [5] A string literal appearing as the first statement in the class | |
| body is transformed into the namespace’s "__doc__" item and | |
| therefore the class’s *docstring*. | |
| ''', | |
| 'context-managers': r'''With Statement Context Managers | |
| ******************************* | |
| A *context manager* is an object that defines the runtime context to | |
| be established when executing a "with" statement. The context manager | |
| handles the entry into, and the exit from, the desired runtime context | |
| for the execution of the block of code. Context managers are normally | |
| invoked using the "with" statement (described in section The with | |
| statement), but can also be used by directly invoking their methods. | |
| Typical uses of context managers include saving and restoring various | |
| kinds of global state, locking and unlocking resources, closing opened | |
| files, etc. | |
| For more information on context managers, see Context Manager Types. | |
| The "object" class itself does not provide the context manager | |
| methods. | |
| object.__enter__(self) | |
| Enter the runtime context related to this object. The "with" | |
| statement will bind this method’s return value to the target(s) | |
| specified in the "as" clause of the statement, if any. | |
| object.__exit__(self, exc_type, exc_value, traceback) | |
| Exit the runtime context related to this object. The parameters | |
| describe the exception that caused the context to be exited. If the | |
| context was exited without an exception, all three arguments will | |
| be "None". | |
| If an exception is supplied, and the method wishes to suppress the | |
| exception (i.e., prevent it from being propagated), it should | |
| return a true value. Otherwise, the exception will be processed | |
| normally upon exit from this method. | |
| Note that "__exit__()" methods should not reraise the passed-in | |
| exception; this is the caller’s responsibility. | |
| See also: | |
| **PEP 343** - The “with” statement | |
| The specification, background, and examples for the Python "with" | |
| statement. | |
| ''', | |
| 'continue': r'''The "continue" statement | |
| ************************ | |
| continue_stmt: "continue" | |
| "continue" may only occur syntactically nested in a "for" or "while" | |
| loop, but not nested in a function or class definition within that | |
| loop. It continues with the next cycle of the nearest enclosing loop. | |
| When "continue" passes control out of a "try" statement with a | |
| "finally" clause, that "finally" clause is executed before really | |
| starting the next loop cycle. | |
| ''', | |
| 'conversions': r'''Arithmetic conversions | |
| ********************** | |
| When a description of an arithmetic operator below uses the phrase | |
| “the numeric arguments are converted to a common real type”, this | |
| means that the operator implementation for built-in numeric types | |
| works as described in the Numeric Types section of the standard | |
| library documentation. | |
| Some additional rules apply for certain operators and non-numeric | |
| operands (for example, a string as a left argument to the "%" | |
| operator). Extensions must define their own conversion behavior. | |
| ''', | |
| 'customization': r'''Basic customization | |
| ******************* | |
| object.__new__(cls[, ...]) | |
| Called to create a new instance of class *cls*. "__new__()" is a | |
| static method (special-cased so you need not declare it as such) | |
| that takes the class of which an instance was requested as its | |
| first argument. The remaining arguments are those passed to the | |
| object constructor expression (the call to the class). The return | |
| value of "__new__()" should be the new object instance (usually an | |
| instance of *cls*). | |
| Typical implementations create a new instance of the class by | |
| invoking the superclass’s "__new__()" method using | |
| "super().__new__(cls[, ...])" with appropriate arguments and then | |
| modifying the newly created instance as necessary before returning | |
| it. | |
| If "__new__()" is invoked during object construction and it returns | |
| an instance of *cls*, then the new instance’s "__init__()" method | |
| will be invoked like "__init__(self[, ...])", where *self* is the | |
| new instance and the remaining arguments are the same as were | |
| passed to the object constructor. | |
| If "__new__()" does not return an instance of *cls*, then the new | |
| instance’s "__init__()" method will not be invoked. | |
| "__new__()" is intended mainly to allow subclasses of immutable | |
| types (like int, str, or tuple) to customize instance creation. It | |
| is also commonly overridden in custom metaclasses in order to | |
| customize class creation. | |
| object.__init__(self[, ...]) | |
| Called after the instance has been created (by "__new__()"), but | |
| before it is returned to the caller. The arguments are those | |
| passed to the class constructor expression. If a base class has an | |
| "__init__()" method, the derived class’s "__init__()" method, if | |
| any, must explicitly call it to ensure proper initialization of the | |
| base class part of the instance; for example: | |
| "super().__init__([args...])". | |
| Because "__new__()" and "__init__()" work together in constructing | |
| objects ("__new__()" to create it, and "__init__()" to customize | |
| it), no non-"None" value may be returned by "__init__()"; doing so | |
| will cause a "TypeError" to be raised at runtime. | |
| object.__del__(self) | |
| Called when the instance is about to be destroyed. This is also | |
| called a finalizer or (improperly) a destructor. If a base class | |
| has a "__del__()" method, the derived class’s "__del__()" method, | |
| if any, must explicitly call it to ensure proper deletion of the | |
| base class part of the instance. | |
| It is possible (though not recommended!) for the "__del__()" method | |
| to postpone destruction of the instance by creating a new reference | |
| to it. This is called object *resurrection*. It is | |
| implementation-dependent whether "__del__()" is called a second | |
| time when a resurrected object is about to be destroyed; the | |
| current *CPython* implementation only calls it once. | |
| It is not guaranteed that "__del__()" methods are called for | |
| objects that still exist when the interpreter exits. | |
| "weakref.finalize" provides a straightforward way to register a | |
| cleanup function to be called when an object is garbage collected. | |
| Note: | |
| "del x" doesn’t directly call "x.__del__()" — the former | |
| decrements the reference count for "x" by one, and the latter is | |
| only called when "x"’s reference count reaches zero. | |
| **CPython implementation detail:** It is possible for a reference | |
| cycle to prevent the reference count of an object from going to | |
| zero. In this case, the cycle will be later detected and deleted | |
| by the *cyclic garbage collector*. A common cause of reference | |
| cycles is when an exception has been caught in a local variable. | |
| The frame’s locals then reference the exception, which references | |
| its own traceback, which references the locals of all frames caught | |
| in the traceback. | |
| See also: Documentation for the "gc" module. | |
| Warning: | |
| Due to the precarious circumstances under which "__del__()" | |
| methods are invoked, exceptions that occur during their execution | |
| are ignored, and a warning is printed to "sys.stderr" instead. | |
| In particular: | |
| * "__del__()" can be invoked when arbitrary code is being | |
| executed, including from any arbitrary thread. If "__del__()" | |
| needs to take a lock or invoke any other blocking resource, it | |
| may deadlock as the resource may already be taken by the code | |
| that gets interrupted to execute "__del__()". | |
| * "__del__()" can be executed during interpreter shutdown. As a | |
| consequence, the global variables it needs to access (including | |
| other modules) may already have been deleted or set to "None". | |
| Python guarantees that globals whose name begins with a single | |
| underscore are deleted from their module before other globals | |
| are deleted; if no other references to such globals exist, this | |
| may help in assuring that imported modules are still available | |
| at the time when the "__del__()" method is called. | |
| object.__repr__(self) | |
| Called by the "repr()" built-in function to compute the “official” | |
| string representation of an object. If at all possible, this | |
| should look like a valid Python expression that could be used to | |
| recreate an object with the same value (given an appropriate | |
| environment). If this is not possible, a string of the form | |
| "<...some useful description...>" should be returned. The return | |
| value must be a string object. If a class defines "__repr__()" but | |
| not "__str__()", then "__repr__()" is also used when an “informal” | |
| string representation of instances of that class is required. | |
| This is typically used for debugging, so it is important that the | |
| representation is information-rich and unambiguous. A default | |
| implementation is provided by the "object" class itself. | |
| object.__str__(self) | |
| Called by "str(object)", the default "__format__()" implementation, | |
| and the built-in function "print()", to compute the “informal” or | |
| nicely printable string representation of an object. The return | |
| value must be a str object. | |
| This method differs from "object.__repr__()" in that there is no | |
| expectation that "__str__()" return a valid Python expression: a | |
| more convenient or concise representation can be used. | |
| The default implementation defined by the built-in type "object" | |
| calls "object.__repr__()". | |
| object.__bytes__(self) | |
| Called by bytes to compute a byte-string representation of an | |
| object. This should return a "bytes" object. The "object" class | |
| itself does not provide this method. | |
| object.__format__(self, format_spec) | |
| Called by the "format()" built-in function, and by extension, | |
| evaluation of formatted string literals and the "str.format()" | |
| method, to produce a “formatted” string representation of an | |
| object. The *format_spec* argument is a string that contains a | |
| description of the formatting options desired. The interpretation | |
| of the *format_spec* argument is up to the type implementing | |
| "__format__()", however most classes will either delegate | |
| formatting to one of the built-in types, or use a similar | |
| formatting option syntax. | |
| See Format specification mini-language for a description of the | |
| standard formatting syntax. | |
| The return value must be a string object. | |
| The default implementation by the "object" class should be given an | |
| empty *format_spec* string. It delegates to "__str__()". | |
| Changed in version 3.4: The __format__ method of "object" itself | |
| raises a "TypeError" if passed any non-empty string. | |
| Changed in version 3.7: "object.__format__(x, '')" is now | |
| equivalent to "str(x)" rather than "format(str(x), '')". | |
| object.__lt__(self, other) | |
| object.__le__(self, other) | |
| object.__eq__(self, other) | |
| object.__ne__(self, other) | |
| object.__gt__(self, other) | |
| object.__ge__(self, other) | |
| These are the so-called “rich comparison” methods. The | |
| correspondence between operator symbols and method names is as | |
| follows: "x<y" calls "x.__lt__(y)", "x<=y" calls "x.__le__(y)", | |
| "x==y" calls "x.__eq__(y)", "x!=y" calls "x.__ne__(y)", "x>y" calls | |
| "x.__gt__(y)", and "x>=y" calls "x.__ge__(y)". | |
| A rich comparison method may return the singleton "NotImplemented" | |
| if it does not implement the operation for a given pair of | |
| arguments. By convention, "False" and "True" are returned for a | |
| successful comparison. However, these methods can return any value, | |
| so if the comparison operator is used in a Boolean context (e.g., | |
| in the condition of an "if" statement), Python will call "bool()" | |
| on the value to determine if the result is true or false. | |
| By default, "object" implements "__eq__()" by using "is", returning | |
| "NotImplemented" in the case of a false comparison: "True if x is y | |
| else NotImplemented". For "__ne__()", by default it delegates to | |
| "__eq__()" and inverts the result unless it is "NotImplemented". | |
| There are no other implied relationships among the comparison | |
| operators or default implementations; for example, the truth of | |
| "(x<y or x==y)" does not imply "x<=y". To automatically generate | |
| ordering operations from a single root operation, see | |
| "@functools.total_ordering". | |
| By default, the "object" class provides implementations consistent | |
| with Value comparisons: equality compares according to object | |
| identity, and order comparisons raise "TypeError". Each default | |
| method may generate these results directly, but may also return | |
| "NotImplemented". | |
| See the paragraph on "__hash__()" for some important notes on | |
| creating *hashable* objects which support custom comparison | |
| operations and are usable as dictionary keys. | |
| There are no swapped-argument versions of these methods (to be used | |
| when the left argument does not support the operation but the right | |
| argument does); rather, "__lt__()" and "__gt__()" are each other’s | |
| reflection, "__le__()" and "__ge__()" are each other’s reflection, | |
| and "__eq__()" and "__ne__()" are their own reflection. If the | |
| operands are of different types, and the right operand’s type is a | |
| direct or indirect subclass of the left operand’s type, the | |
| reflected method of the right operand has priority, otherwise the | |
| left operand’s method has priority. Virtual subclassing is not | |
| considered. | |
| When no appropriate method returns any value other than | |
| "NotImplemented", the "==" and "!=" operators will fall back to | |
| "is" and "is not", respectively. | |
| object.__hash__(self) | |
| Called by built-in function "hash()" and for operations on members | |
| of hashed collections including "set", "frozenset", "dict", and | |
| "frozendict". The "__hash__()" method should return an integer. The | |
| only required property is that objects which compare equal have the | |
| same hash value; it is advised to mix together the hash values of | |
| the components of the object that also play a part in comparison of | |
| objects by packing them into a tuple and hashing the tuple. | |
| Example: | |
| def __hash__(self): | |
| return hash((self.name, self.nick, self.color)) | |
| Note: | |
| "hash()" truncates the value returned from an object’s custom | |
| "__hash__()" method to the size of a "Py_ssize_t". This is | |
| typically 8 bytes on 64-bit builds and 4 bytes on 32-bit builds. | |
| If an object’s "__hash__()" must interoperate on builds of | |
| different bit sizes, be sure to check the width on all supported | |
| builds. An easy way to do this is with "python -c "import sys; | |
| print(sys.hash_info.width)"". | |
| If a class does not define an "__eq__()" method it should not | |
| define a "__hash__()" operation either; if it defines "__eq__()" | |
| but not "__hash__()", its instances will not be usable as items in | |
| hashable collections. If a class defines mutable objects and | |
| implements an "__eq__()" method, it should not implement | |
| "__hash__()", since the implementation of *hashable* collections | |
| requires that a key’s hash value is immutable (if the object’s hash | |
| value changes, it will be in the wrong hash bucket). | |
| User-defined classes have "__eq__()" and "__hash__()" methods by | |
| default (inherited from the "object" class); with them, all objects | |
| compare unequal (except with themselves) and "x.__hash__()" returns | |
| an appropriate value such that "x == y" implies both that "x is y" | |
| and "hash(x) == hash(y)". | |
| A class that overrides "__eq__()" and does not define "__hash__()" | |
| will have its "__hash__()" implicitly set to "None". When the | |
| "__hash__()" method of a class is "None", instances of the class | |
| will raise an appropriate "TypeError" when a program attempts to | |
| retrieve their hash value, and will also be correctly identified as | |
| unhashable when checking "isinstance(obj, | |
| collections.abc.Hashable)". | |
| If a class that overrides "__eq__()" needs to retain the | |
| implementation of "__hash__()" from a parent class, the interpreter | |
| must be told this explicitly by setting "__hash__ = | |
| <ParentClass>.__hash__". | |
| If a class that does not override "__eq__()" wishes to suppress | |
| hash support, it should include "__hash__ = None" in the class | |
| definition. A class which defines its own "__hash__()" that | |
| explicitly raises a "TypeError" would be incorrectly identified as | |
| hashable by an "isinstance(obj, collections.abc.Hashable)" call. | |
| Note: | |
| By default, the "__hash__()" values of str and bytes objects are | |
| “salted” with an unpredictable random value. Although they | |
| remain constant within an individual Python process, they are not | |
| predictable between repeated invocations of Python.This is | |
| intended to provide protection against a denial-of-service caused | |
| by carefully chosen inputs that exploit the worst case | |
| performance of a dict insertion, *O*(*n*^2) complexity. See | |
| https://ocert.org/advisories/ocert-2011-003.html for | |
| details.Changing hash values affects the iteration order of sets. | |
| Python has never made guarantees about this ordering (and it | |
| typically varies between 32-bit and 64-bit builds).See also | |
| "PYTHONHASHSEED". | |
| Changed in version 3.3: Hash randomization is enabled by default. | |
| object.__bool__(self) | |
| Called to implement truth value testing and the built-in operation | |
| "bool()"; should return "False" or "True". When this method is not | |
| defined, "__len__()" is called, if it is defined, and the object is | |
| considered true if its result is nonzero. If a class defines | |
| neither "__len__()" nor "__bool__()" (which is true of the "object" | |
| class itself), all its instances are considered true. | |
| ''', | |
| 'debugger': r'''"pdb" — The Python Debugger | |
| *************************** | |
| **Source code:** Lib/pdb.py | |
| ====================================================================== | |
| The module "pdb" defines an interactive source code debugger for | |
| Python programs. It supports setting (conditional) breakpoints and | |
| single stepping at the source line level, inspection of stack frames, | |
| source code listing, and evaluation of arbitrary Python code in the | |
| context of any stack frame. It also supports post-mortem debugging | |
| and can be called under program control. | |
| The debugger is extensible – it is actually defined as the class | |
| "Pdb". This is currently undocumented but easily understood by reading | |
| the source. The extension interface uses the modules "bdb" and "cmd". | |
| See also: | |
| Module "faulthandler" | |
| Used to dump Python tracebacks explicitly, on a fault, after a | |
| timeout, or on a user signal. | |
| Module "traceback" | |
| Standard interface to extract, format and print stack traces of | |
| Python programs. | |
| The typical usage to break into the debugger is to insert: | |
| import pdb; pdb.set_trace() | |
| Or: | |
| breakpoint() | |
| at the location you want to break into the debugger, and then run the | |
| program. You can then step through the code following this statement, | |
| and continue running without the debugger using the "continue" | |
| command. | |
| Changed in version 3.7: The built-in "breakpoint()", when called with | |
| defaults, can be used instead of "import pdb; pdb.set_trace()". | |
| def double(x): | |
| breakpoint() | |
| return x * 2 | |
| val = 3 | |
| print(f"{val} * 2 is {double(val)}") | |
| The debugger’s prompt is "(Pdb)", which is the indicator that you are | |
| in debug mode: | |
| > ...(2)double() | |
| -> breakpoint() | |
| (Pdb) p x | |
| 3 | |
| (Pdb) continue | |
| 3 * 2 is 6 | |
| Changed in version 3.3: Tab-completion via the "readline" module is | |
| available for commands and command arguments, e.g. the current global | |
| and local names are offered as arguments of the "p" command. | |
| Command-line interface | |
| ====================== | |
| You can also invoke "pdb" from the command line to debug other | |
| scripts. For example: | |
| python -m pdb [-c command] (-m module | -p pid | pyfile) [args ...] | |
| When invoked as a module, pdb will automatically enter post-mortem | |
| debugging if the program being debugged exits abnormally. After post- | |
| mortem debugging (or after normal exit of the program), pdb will | |
| restart the program. Automatic restarting preserves pdb’s state (such | |
| as breakpoints) and in most cases is more useful than quitting the | |
| debugger upon program’s exit. | |
| -c, --command <command> | |
| To execute commands as if given in a ".pdbrc" file; see Debugger | |
| commands. | |
| Changed in version 3.2: Added the "-c" option. | |
| -m <module> | |
| To execute modules similar to the way "python -m" does. As with a | |
| script, the debugger will pause execution just before the first | |
| line of the module. | |
| Changed in version 3.7: Added the "-m" option. | |
| -p, --pid <pid> | |
| Attach to the process with the specified PID. | |
| Added in version 3.14. | |
| To attach to a running Python process for remote debugging, use the | |
| "-p" or "--pid" option with the target process’s PID: | |
| python -m pdb -p 1234 | |
| Note: | |
| Attaching to a process that is blocked in a system call or waiting | |
| for I/O will only work once the next bytecode instruction is | |
| executed or when the process receives a signal. | |
| Typical usage to execute a statement under control of the debugger is: | |
| >>> import pdb | |
| >>> def f(x): | |
| ... print(1 / x) | |
| >>> pdb.run("f(2)") | |
| > <string>(1)<module>() | |
| (Pdb) continue | |
| 0.5 | |
| >>> | |
| The typical usage to inspect a crashed program is: | |
| >>> import pdb | |
| >>> def f(x): | |
| ... print(1 / x) | |
| ... | |
| >>> f(0) | |
| Traceback (most recent call last): | |
| File "<stdin>", line 1, in <module> | |
| File "<stdin>", line 2, in f | |
| ZeroDivisionError: division by zero | |
| >>> pdb.pm() | |
| > <stdin>(2)f() | |
| (Pdb) p x | |
| 0 | |
| (Pdb) | |
| Changed in version 3.13: The implementation of **PEP 667** means that | |
| name assignments made via "pdb" will immediately affect the active | |
| scope, even when running inside an *optimized scope*. | |
| The module defines the following functions; each enters the debugger | |
| in a slightly different way: | |
| pdb.run(statement, globals=None, locals=None) | |
| Execute the *statement* (given as a string or a code object) under | |
| debugger control. The debugger prompt appears before any code is | |
| executed; you can set breakpoints and type "continue", or you can | |
| step through the statement using "step" or "next" (all these | |
| commands are explained below). The optional *globals* and *locals* | |
| arguments specify the environment in which the code is executed; by | |
| default the dictionary of the module "__main__" is used. (See the | |
| explanation of the built-in "exec()" or "eval()" functions.) | |
| pdb.runeval(expression, globals=None, locals=None) | |
| Evaluate the *expression* (given as a string or a code object) | |
| under debugger control. When "runeval()" returns, it returns the | |
| value of the *expression*. Otherwise this function is similar to | |
| "run()". | |
| pdb.runcall(function, *args, **kwds) | |
| Call the *function* (a function or method object, not a string) | |
| with the given arguments. When "runcall()" returns, it returns | |
| whatever the function call returned. The debugger prompt appears | |
| as soon as the function is entered. | |
| pdb.set_trace(*, header=None, commands=None) | |
| Enter the debugger at the calling stack frame. This is useful to | |
| hard-code a breakpoint at a given point in a program, even if the | |
| code is not otherwise being debugged (e.g. when an assertion | |
| fails). If given, *header* is printed to the console just before | |
| debugging begins. The *commands* argument, if given, is a list of | |
| commands to execute when the debugger starts. | |
| Changed in version 3.7: The keyword-only argument *header*. | |
| Changed in version 3.13: "set_trace()" will enter the debugger | |
| immediately, rather than on the next line of code to be executed. | |
| Added in version 3.14: The *commands* argument. | |
| awaitable pdb.set_trace_async(*, header=None, commands=None) | |
| async version of "set_trace()". This function should be used inside | |
| an async function with "await". | |
| async def f(): | |
| await pdb.set_trace_async() | |
| "await" statements are supported if the debugger is invoked by this | |
| function. | |
| Added in version 3.14. | |
| pdb.post_mortem(t=None) | |
| Enter post-mortem debugging of the given exception or traceback | |
| object. If no value is given, it uses the exception that is | |
| currently being handled, or raises "ValueError" if there isn’t one. | |
| Changed in version 3.13: Support for exception objects was added. | |
| pdb.pm() | |
| Enter post-mortem debugging of the exception found in | |
| "sys.last_exc". | |
| pdb.set_default_backend(backend) | |
| There are two supported backends for pdb: "'settrace'" and | |
| "'monitoring'". See "bdb.Bdb" for details. The user can set the | |
| default backend to use if none is specified when instantiating | |
| "Pdb". If no backend is specified, the default is "'settrace'". | |
| Note: | |
| "breakpoint()" and "set_trace()" will not be affected by this | |
| function. They always use "'monitoring'" backend. | |
| Added in version 3.14. | |
| pdb.get_default_backend() | |
| Returns the default backend for pdb. | |
| Added in version 3.14. | |
| The "run*" functions and "set_trace()" are aliases for instantiating | |
| the "Pdb" class and calling the method of the same name. If you want | |
| to access further features, you have to do this yourself: | |
| class pdb.Pdb(completekey='tab', stdin=None, stdout=None, skip=None, nosigint=False, readrc=True, mode=None, backend=None, colorize=False) | |
| "Pdb" is the debugger class. | |
| The *completekey*, *stdin* and *stdout* arguments are passed to the | |
| underlying "cmd.Cmd" class; see the description there. | |
| The *skip* argument, if given, must be an iterable of glob-style | |
| module name patterns. The debugger will not step into frames that | |
| originate in a module that matches one of these patterns. [1] | |
| By default, Pdb sets a handler for the SIGINT signal (which is sent | |
| when the user presses "Ctrl"-"C" on the console) when you give a | |
| "continue" command. This allows you to break into the debugger | |
| again by pressing "Ctrl"-"C". If you want Pdb not to touch the | |
| SIGINT handler, set *nosigint* to true. | |
| The *readrc* argument defaults to true and controls whether Pdb | |
| will load .pdbrc files from the filesystem. | |
| The *mode* argument specifies how the debugger was invoked. It | |
| impacts the workings of some debugger commands. Valid values are | |
| "'inline'" (used by the breakpoint() builtin), "'cli'" (used by the | |
| command line invocation) or "None" (for backwards compatible | |
| behaviour, as before the *mode* argument was added). | |
| The *backend* argument specifies the backend to use for the | |
| debugger. If "None" is passed, the default backend will be used. | |
| See "set_default_backend()". Otherwise the supported backends are | |
| "'settrace'" and "'monitoring'". | |
| The *colorize* argument, if set to "True", will enable colorized | |
| output in the debugger, if color is supported. This will highlight | |
| source code displayed in pdb. | |
| Example call to enable tracing with *skip*: | |
| import pdb; pdb.Pdb(skip=['django.*']).set_trace() | |
| Raises an auditing event "pdb.Pdb" with no arguments. | |
| Changed in version 3.1: Added the *skip* parameter. | |
| Changed in version 3.2: Added the *nosigint* parameter. Previously, | |
| a SIGINT handler was never set by Pdb. | |
| Changed in version 3.6: The *readrc* argument. | |
| Added in version 3.14: Added the *mode* argument. | |
| Added in version 3.14: Added the *backend* argument. | |
| Added in version 3.14: Added the *colorize* argument. | |
| Changed in version 3.14: Inline breakpoints like "breakpoint()" or | |
| "pdb.set_trace()" will always stop the program at calling frame, | |
| ignoring the *skip* pattern (if any). | |
| run(statement, globals=None, locals=None) | |
| runeval(expression, globals=None, locals=None) | |
| runcall(function, *args, **kwds) | |
| set_trace() | |
| See the documentation for the functions explained above. | |
| Debugger commands | |
| ================= | |
| The commands recognized by the debugger are listed below. Most | |
| commands can be abbreviated to one or two letters as indicated; e.g. | |
| "h(elp)" means that either "h" or "help" can be used to enter the help | |
| command (but not "he" or "hel", nor "H" or "Help" or "HELP"). | |
| Arguments to commands must be separated by whitespace (spaces or | |
| tabs). Optional arguments are enclosed in square brackets ("[]") in | |
| the command syntax; the square brackets must not be typed. | |
| Alternatives in the command syntax are separated by a vertical bar | |
| ("|"). | |
| Entering a blank line repeats the last command entered. Exception: if | |
| the last command was a "list" command, the next 11 lines are listed. | |
| Commands that the debugger doesn’t recognize are assumed to be Python | |
| statements and are executed in the context of the program being | |
| debugged. Python statements can also be prefixed with an exclamation | |
| point ("!"). This is a powerful way to inspect the program being | |
| debugged; it is even possible to change a variable or call a function. | |
| When an exception occurs in such a statement, the exception name is | |
| printed but the debugger’s state is not changed. | |
| Changed in version 3.13: Expressions/Statements whose prefix is a pdb | |
| command are now correctly identified and executed. | |
| The debugger supports aliases. Aliases can have parameters which | |
| allows one a certain level of adaptability to the context under | |
| examination. | |
| Multiple commands may be entered on a single line, separated by ";;". | |
| (A single ";" is not used as it is the separator for multiple commands | |
| in a line that is passed to the Python parser.) No intelligence is | |
| applied to separating the commands; the input is split at the first | |
| ";;" pair, even if it is in the middle of a quoted string. A | |
| workaround for strings with double semicolons is to use implicit | |
| string concatenation "';'';'" or "";"";"". | |
| To set a temporary global variable, use a *convenience variable*. A | |
| *convenience variable* is a variable whose name starts with "$". For | |
| example, "$foo = 1" sets a global variable "$foo" which you can use in | |
| the debugger session. The *convenience variables* are cleared when | |
| the program resumes execution so it’s less likely to interfere with | |
| your program compared to using normal variables like "foo = 1". | |
| There are four preset *convenience variables*: | |
| * "$_frame": the current frame you are debugging | |
| * "$_retval": the return value if the frame is returning | |
| * "$_exception": the exception if the frame is raising an exception | |
| * "$_asynctask": the asyncio task if pdb stops in an async function | |
| Added in version 3.12: Added the *convenience variable* feature. | |
| Added in version 3.14: Added the "$_asynctask" convenience variable. | |
| If a file ".pdbrc" exists in the user’s home directory or in the | |
| current directory, it is read with "'utf-8'" encoding and executed as | |
| if it had been typed at the debugger prompt, with the exception that | |
| empty lines and lines starting with "#" are ignored. This is | |
| particularly useful for aliases. If both files exist, the one in the | |
| home directory is read first and aliases defined there can be | |
| overridden by the local file. | |
| Changed in version 3.2: ".pdbrc" can now contain commands that | |
| continue debugging, such as "continue" or "next". Previously, these | |
| commands had no effect. | |
| Changed in version 3.11: ".pdbrc" is now read with "'utf-8'" encoding. | |
| Previously, it was read with the system locale encoding. | |
| h(elp) [command] | |
| Without argument, print the list of available commands. With a | |
| *command* as argument, print help about that command. "help pdb" | |
| displays the full documentation (the docstring of the "pdb" | |
| module). Since the *command* argument must be an identifier, "help | |
| exec" must be entered to get help on the "!" command. | |
| w(here) [count] | |
| Print a stack trace, with the most recent frame at the bottom. if | |
| *count* is 0, print the current frame entry. If *count* is | |
| negative, print the least recent - *count* frames. If *count* is | |
| positive, print the most recent *count* frames. An arrow (">") | |
| indicates the current frame, which determines the context of most | |
| commands. | |
| Changed in version 3.14: *count* argument is added. | |
| d(own) [count] | |
| Move the current frame *count* (default one) levels down in the | |
| stack trace (to a newer frame). | |
| u(p) [count] | |
| Move the current frame *count* (default one) levels up in the stack | |
| trace (to an older frame). | |
| b(reak) [([filename:]lineno | function) [, condition]] | |
| With a *lineno* argument, set a break at line *lineno* in the | |
| current file. The line number may be prefixed with a *filename* and | |
| a colon, to specify a breakpoint in another file (possibly one that | |
| hasn’t been loaded yet). The file is searched on "sys.path". | |
| Acceptable forms of *filename* are "/abspath/to/file.py", | |
| "relpath/file.py", "module" and "package.module". | |
| With a *function* argument, set a break at the first executable | |
| statement within that function. *function* can be any expression | |
| that evaluates to a function in the current namespace. | |
| If a second argument is present, it is an expression which must | |
| evaluate to true before the breakpoint is honored. | |
| Without argument, list all breaks, including for each breakpoint, | |
| the number of times that breakpoint has been hit, the current | |
| ignore count, and the associated condition if any. | |
| Each breakpoint is assigned a number to which all the other | |
| breakpoint commands refer. | |
| tbreak [([filename:]lineno | function) [, condition]] | |
| Temporary breakpoint, which is removed automatically when it is | |
| first hit. The arguments are the same as for "break". | |
| cl(ear) [filename:lineno | bpnumber ...] | |
| With a *filename:lineno* argument, clear all the breakpoints at | |
| this line. With a space separated list of breakpoint numbers, clear | |
| those breakpoints. Without argument, clear all breaks (but first | |
| ask confirmation). | |
| disable bpnumber [bpnumber ...] | |
| Disable the breakpoints given as a space separated list of | |
| breakpoint numbers. Disabling a breakpoint means it cannot cause | |
| the program to stop execution, but unlike clearing a breakpoint, it | |
| remains in the list of breakpoints and can be (re-)enabled. | |
| enable bpnumber [bpnumber ...] | |
| Enable the breakpoints specified. | |
| ignore bpnumber [count] | |
| Set the ignore count for the given breakpoint number. If *count* | |
| is omitted, the ignore count is set to 0. A breakpoint becomes | |
| active when the ignore count is zero. When non-zero, the *count* | |
| is decremented each time the breakpoint is reached and the | |
| breakpoint is not disabled and any associated condition evaluates | |
| to true. | |
| condition bpnumber [condition] | |
| Set a new *condition* for the breakpoint, an expression which must | |
| evaluate to true before the breakpoint is honored. If *condition* | |
| is absent, any existing condition is removed; i.e., the breakpoint | |
| is made unconditional. | |
| commands [bpnumber] | |
| Specify a list of commands for breakpoint number *bpnumber*. The | |
| commands themselves appear on the following lines. Type a line | |
| containing just "end" to terminate the commands. An example: | |
| (Pdb) commands 1 | |
| (com) p some_variable | |
| (com) end | |
| (Pdb) | |
| To remove all commands from a breakpoint, type "commands" and | |
| follow it immediately with "end"; that is, give no commands. | |
| With no *bpnumber* argument, "commands" refers to the most recently | |
| set breakpoint that still exists. | |
| You can use breakpoint commands to start your program up again. | |
| Simply use the "continue" command, or "step", or any other command | |
| that resumes execution. | |
| Specifying any command resuming execution (currently "continue", | |
| "step", "next", "return", "until", "jump", "quit" and their | |
| abbreviations) terminates the command list (as if that command was | |
| immediately followed by end). This is because any time you resume | |
| execution (even with a simple next or step), you may encounter | |
| another breakpoint—which could have its own command list, leading | |
| to ambiguities about which list to execute. | |
| If the list of commands contains the "silent" command, or a command | |
| that resumes execution, then the breakpoint message containing | |
| information about the frame is not displayed. | |
| Changed in version 3.14: Frame information will not be displayed if | |
| a command that resumes execution is present in the command list. | |
| s(tep) | |
| Execute the current line, stop at the first possible occasion | |
| (either in a function that is called or on the next line in the | |
| current function). | |
| n(ext) | |
| Continue execution until the next line in the current function is | |
| reached or it returns. (The difference between "next" and "step" | |
| is that "step" stops inside a called function, while "next" | |
| executes called functions at (nearly) full speed, only stopping at | |
| the next line in the current function.) | |
| unt(il) [lineno] | |
| Without argument, continue execution until the line with a number | |
| greater than the current one is reached. | |
| With *lineno*, continue execution until a line with a number | |
| greater or equal to *lineno* is reached. In both cases, also stop | |
| when the current frame returns. | |
| Changed in version 3.2: Allow giving an explicit line number. | |
| r(eturn) | |
| Continue execution until the current function returns. | |
| c(ont(inue)) | |
| Continue execution, only stop when a breakpoint is encountered. | |
| j(ump) lineno | |
| Set the next line that will be executed. Only available in the | |
| bottom-most frame. This lets you jump back and execute code again, | |
| or jump forward to skip code that you don’t want to run. | |
| It should be noted that not all jumps are allowed – for instance it | |
| is not possible to jump into the middle of a "for" loop or out of a | |
| "finally" clause. | |
| l(ist) [first[, last]] | |
| List source code for the current file. Without arguments, list 11 | |
| lines around the current line or continue the previous listing. | |
| With "." as argument, list 11 lines around the current line. With | |
| one argument, list 11 lines around at that line. With two | |
| arguments, list the given range; if the second argument is less | |
| than the first, it is interpreted as a count. | |
| The current line in the current frame is indicated by "->". If an | |
| exception is being debugged, the line where the exception was | |
| originally raised or propagated is indicated by ">>", if it differs | |
| from the current line. | |
| Changed in version 3.2: Added the ">>" marker. | |
| ll | longlist | |
| List all source code for the current function or frame. | |
| Interesting lines are marked as for "list". | |
| Added in version 3.2. | |
| a(rgs) | |
| Print the arguments of the current function and their current | |
| values. | |
| p expression | |
| Evaluate *expression* in the current context and print its value. | |
| Note: | |
| "print()" can also be used, but is not a debugger command — this | |
| executes the Python "print()" function. | |
| pp expression | |
| Like the "p" command, except the value of *expression* is pretty- | |
| printed using the "pprint" module. | |
| whatis expression | |
| Print the type of *expression*. | |
| source expression | |
| Try to get source code of *expression* and display it. | |
| Added in version 3.2. | |
| display [expression] | |
| Display the value of *expression* if it changed, each time | |
| execution stops in the current frame. | |
| Without *expression*, list all display expressions for the current | |
| frame. | |
| Note: | |
| Display evaluates *expression* and compares to the result of the | |
| previous evaluation of *expression*, so when the result is | |
| mutable, display may not be able to pick up the changes. | |
| Example: | |
| lst = [] | |
| breakpoint() | |
| pass | |
| lst.append(1) | |
| print(lst) | |
| Display won’t realize "lst" has been changed because the result of | |
| evaluation is modified in place by "lst.append(1)" before being | |
| compared: | |
| > example.py(3)<module>() | |
| -> pass | |
| (Pdb) display lst | |
| display lst: [] | |
| (Pdb) n | |
| > example.py(4)<module>() | |
| -> lst.append(1) | |
| (Pdb) n | |
| > example.py(5)<module>() | |
| -> print(lst) | |
| (Pdb) | |
| You can do some tricks with copy mechanism to make it work: | |
| > example.py(3)<module>() | |
| -> pass | |
| (Pdb) display lst[:] | |
| display lst[:]: [] | |
| (Pdb) n | |
| > example.py(4)<module>() | |
| -> lst.append(1) | |
| (Pdb) n | |
| > example.py(5)<module>() | |
| -> print(lst) | |
| display lst[:]: [1] [old: []] | |
| (Pdb) | |
| Added in version 3.2. | |
| undisplay [expression] | |
| Do not display *expression* anymore in the current frame. Without | |
| *expression*, clear all display expressions for the current frame. | |
| Added in version 3.2. | |
| interact | |
| Start an interactive interpreter (using the "code" module) in a new | |
| global namespace initialised from the local and global namespaces | |
| for the current scope. Use "exit()" or "quit()" to exit the | |
| interpreter and return to the debugger. | |
| Note: | |
| As "interact" creates a new dedicated namespace for code | |
| execution, assignments to variables will not affect the original | |
| namespaces. However, modifications to any referenced mutable | |
| objects will be reflected in the original namespaces as usual. | |
| Added in version 3.2. | |
| Changed in version 3.13: "exit()" and "quit()" can be used to exit | |
| the "interact" command. | |
| Changed in version 3.13: "interact" directs its output to the | |
| debugger’s output channel rather than "sys.stderr". | |
| alias [name [command]] | |
| Create an alias called *name* that executes *command*. The | |
| *command* must *not* be enclosed in quotes. Replaceable parameters | |
| can be indicated by "%1", "%2", … and "%9", while "%*" is replaced | |
| by all the parameters. If *command* is omitted, the current alias | |
| for *name* is shown. If no arguments are given, all aliases are | |
| listed. | |
| Aliases may be nested and can contain anything that can be legally | |
| typed at the pdb prompt. Note that internal pdb commands *can* be | |
| overridden by aliases. Such a command is then hidden until the | |
| alias is removed. Aliasing is recursively applied to the first | |
| word of the command line; all other words in the line are left | |
| alone. | |
| As an example, here are two useful aliases (especially when placed | |
| in the ".pdbrc" file): | |
| # Print instance variables (usage "pi classInst") | |
| alias pi for k in %1.__dict__.keys(): print(f"%1.{k} = {%1.__dict__[k]}") | |
| # Print instance variables in self | |
| alias ps pi self | |
| unalias name | |
| Delete the specified alias *name*. | |
| ! statement | |
| Execute the (one-line) *statement* in the context of the current | |
| stack frame. The exclamation point can be omitted unless the first | |
| word of the statement resembles a debugger command, e.g.: | |
| (Pdb) ! n=42 | |
| (Pdb) | |
| To set a global variable, you can prefix the assignment command | |
| with a "global" statement on the same line, e.g.: | |
| (Pdb) global list_options; list_options = ['-l'] | |
| (Pdb) | |
| run [args ...] | |
| restart [args ...] | |
| Restart the debugged Python program. If *args* is supplied, it is | |
| split with "shlex" and the result is used as the new "sys.argv". | |
| History, breakpoints, actions and debugger options are preserved. | |
| "restart" is an alias for "run". | |
| Changed in version 3.14: "run" and "restart" commands are disabled | |
| when the debugger is invoked in "'inline'" mode. | |
| q(uit) | |
| Quit from the debugger. The program being executed is aborted. An | |
| end-of-file input is equivalent to "quit". | |
| A confirmation prompt will be shown if the debugger is invoked in | |
| "'inline'" mode. Either "y", "Y", "<Enter>" or "EOF" will confirm | |
| the quit. | |
| Changed in version 3.14: A confirmation prompt will be shown if the | |
| debugger is invoked in "'inline'" mode. After the confirmation, the | |
| debugger will call "sys.exit()" immediately, instead of raising | |
| "bdb.BdbQuit" in the next trace event. | |
| debug code | |
| Enter a recursive debugger that steps through *code* (which is an | |
| arbitrary expression or statement to be executed in the current | |
| environment). | |
| retval | |
| Print the return value for the last return of the current function. | |
| exceptions [excnumber] | |
| List or jump between chained exceptions. | |
| When using "pdb.pm()" or "Pdb.post_mortem(...)" with a chained | |
| exception instead of a traceback, it allows the user to move | |
| between the chained exceptions using "exceptions" command to list | |
| exceptions, and "exceptions <number>" to switch to that exception. | |
| Example: | |
| def out(): | |
| try: | |
| middle() | |
| except Exception as e: | |
| raise ValueError("reraise middle() error") from e | |
| def middle(): | |
| try: | |
| return inner(0) | |
| except Exception as e: | |
| raise ValueError("Middle fail") | |
| def inner(x): | |
| 1 / x | |
| out() | |
| calling "pdb.pm()" will allow to move between exceptions: | |
| > example.py(5)out() | |
| -> raise ValueError("reraise middle() error") from e | |
| (Pdb) exceptions | |
| 0 ZeroDivisionError('division by zero') | |
| 1 ValueError('Middle fail') | |
| > 2 ValueError('reraise middle() error') | |
| (Pdb) exceptions 0 | |
| > example.py(16)inner() | |
| -> 1 / x | |
| (Pdb) up | |
| > example.py(10)middle() | |
| -> return inner(0) | |
| Added in version 3.13. | |
| -[ Footnotes ]- | |
| [1] Whether a frame is considered to originate in a certain module is | |
| determined by the "__name__" in the frame globals. | |
| ''', | |
| 'del': r'''The "del" statement | |
| ******************* | |
| del_stmt: "del" target_list | |
| Deletion is recursively defined very similar to the way assignment is | |
| defined. Rather than spelling it out in full details, here are some | |
| hints. | |
| Deletion of a target list recursively deletes each target, from left | |
| to right. | |
| Deletion of a name removes the binding of that name from the local or | |
| global namespace, depending on whether the name occurs in a "global" | |
| statement in the same code block. Trying to delete an unbound name | |
| raises a "NameError" exception. | |
| Deletion of attribute references and subscriptions is passed to the | |
| primary object involved; deletion of a slicing is in general | |
| equivalent to assignment of an empty slice of the right type (but even | |
| this is determined by the sliced object). | |
| Changed in version 3.2: Previously it was illegal to delete a name | |
| from the local namespace if it occurs as a free variable in a nested | |
| block. | |
| ''', | |
| 'dict': r'''Dictionary displays | |
| ******************* | |
| A *dictionary display* is a possibly empty series of *dict items* | |
| enclosed in curly braces. Each dict item is a colon-separated pair of | |
| expressions: the *key* and its associated *value*. For example: | |
| >>> {1: 'one', 2: 'two'} | |
| {1: 'one', 2: 'two'} | |
| At runtime, when a dictionary comprehension is evaluated, the | |
| expressions are evaluated from left to right. Each key object is used | |
| as a key into the dictionary to store the corresponding value. This | |
| means that you can specify the same key multiple times in the | |
| comprehension, and the final dictionary’s value for a given key will | |
| be the last one given. For example: | |
| >>> { | |
| ... 1: 'this will be overridden', | |
| ... 2: 'two', | |
| ... 1: 'also overridden', | |
| ... 1: 'one', | |
| ... } | |
| {1: 'one', 2: 'two'} | |
| Instead of a key-value pair, a dict item may be an expression prefixed | |
| by a double asterisk "**". This denotes *dictionary unpacking*. At | |
| runtime, the expression must evaluate to a *mapping*; each item of the | |
| mapping is added to the new dictionary. As with key-value pairs, later | |
| values replace values already set by earlier items and unpackings. | |
| This may be used to override a set of defaults: | |
| >>> defaults = {'color': 'blue', 'count': 8} | |
| >>> overrides = {'color': 'yellow'} | |
| >>> {**defaults, **overrides} | |
| {'color': 'yellow', 'count': 8} | |
| Added in version 3.5: Unpacking into dictionary displays, originally | |
| proposed by **PEP 448**. | |
| The formal grammar for dict displays is: | |
| dict: '{' [double_starred_kvpairs] '}' | |
| double_starred_kvpairs: ','.double_starred_kvpair+ [','] | |
| double_starred_kvpair: '**' or_expr | kvpair | |
| kvpair: expression ':' expression | |
| ''', | |
| 'dynamic-features': r'''Interaction with dynamic features | |
| ********************************* | |
| Name resolution of free variables occurs at runtime, not at compile | |
| time. This means that the following code will print 42: | |
| i = 10 | |
| def f(): | |
| print(i) | |
| i = 42 | |
| f() | |
| The "eval()" and "exec()" functions do not have access to the full | |
| environment for resolving names. Names may be resolved in the local | |
| and global namespaces of the caller. Free variables are not resolved | |
| in the nearest enclosing namespace, but in the global namespace. [1] | |
| The "exec()" and "eval()" functions have optional arguments to | |
| override the global and local namespace. If only one namespace is | |
| specified, it is used for both. | |
| ''', | |
| 'else': r'''The "if" statement | |
| ****************** | |
| The "if" statement is used for conditional execution: | |
| if_stmt: "if" assignment_expression ":" suite | |
| ("elif" assignment_expression ":" suite)* | |
| ["else" ":" suite] | |
| It selects exactly one of the suites by evaluating the expressions one | |
| by one until one is found to be true (see section Boolean operations | |
| for the definition of true and false); then that suite is executed | |
| (and no other part of the "if" statement is executed or evaluated). | |
| If all expressions are false, the suite of the "else" clause, if | |
| present, is executed. | |
| ''', | |
| 'exceptions': r'''Exceptions | |
| ********** | |
| Exceptions are a means of breaking out of the normal flow of control | |
| of a code block in order to handle errors or other exceptional | |
| conditions. An exception is *raised* at the point where the error is | |
| detected; it may be *handled* by the surrounding code block or by any | |
| code block that directly or indirectly invoked the code block where | |
| the error occurred. | |
| The Python interpreter raises an exception when it detects a run-time | |
| error (such as division by zero). A Python program can also | |
| explicitly raise an exception with the "raise" statement. Exception | |
| handlers are specified with the "try" … "except" statement. The | |
| "finally" clause of such a statement can be used to specify cleanup | |
| code which does not handle the exception, but is executed whether an | |
| exception occurred or not in the preceding code. | |
| Python uses the “termination” model of error handling: an exception | |
| handler can find out what happened and continue execution at an outer | |
| level, but it cannot repair the cause of the error and retry the | |
| failing operation (except by re-entering the offending piece of code | |
| from the top). | |
| When an exception is not handled at all, the interpreter terminates | |
| execution of the program, or returns to its interactive main loop. In | |
| either case, it prints a stack traceback, except when the exception is | |
| "SystemExit". | |
| Exceptions are identified by class instances. The "except" clause is | |
| selected depending on the class of the instance: it must reference the | |
| class of the instance or a *non-virtual base class* thereof. The | |
| instance can be received by the handler and can carry additional | |
| information about the exceptional condition. | |
| Note: | |
| Exception messages are not part of the Python API. Their contents | |
| may change from one version of Python to the next without warning | |
| and should not be relied on by code which will run under multiple | |
| versions of the interpreter. | |
| See also the description of the "try" statement in section The try | |
| statement and "raise" statement in section The raise statement. | |
| ''', | |
| 'execmodel': r'''Execution model | |
| *************** | |
| Structure of a program | |
| ====================== | |
| A Python program is constructed from code blocks. A *block* is a piece | |
| of Python program text that is executed as a unit. The following are | |
| blocks: a module, a function body, and a class definition. Each | |
| command typed interactively is a block. A script file (a file given | |
| as standard input to the interpreter or specified as a command line | |
| argument to the interpreter) is a code block. A script command (a | |
| command specified on the interpreter command line with the "-c" | |
| option) is a code block. A module run as a top level script (as module | |
| "__main__") from the command line using a "-m" argument is also a code | |
| block. The string argument passed to the built-in functions "eval()" | |
| and "exec()" is a code block. | |
| A code block is executed in an *execution frame*. A frame contains | |
| some administrative information (used for debugging) and determines | |
| where and how execution continues after the code block’s execution has | |
| completed. | |
| Naming and binding | |
| ================== | |
| Binding of names | |
| ---------------- | |
| *Names* refer to objects. Names are introduced by name binding | |
| operations. | |
| The following constructs bind names: | |
| * formal parameters to functions, | |
| * class definitions, | |
| * function definitions, | |
| * assignment expressions, | |
| * targets that are identifiers if occurring in an assignment: | |
| * "for" loop header, | |
| * after "as" in a "with" statement, "except" clause, "except*" | |
| clause, or in the as-pattern in structural pattern matching, | |
| * in a capture pattern in structural pattern matching | |
| * "import" statements. | |
| * "type" statements. | |
| * type parameter lists. | |
| The "import" statement of the form "from ... import *" binds all names | |
| defined in the imported module, except those beginning with an | |
| underscore. This form may only be used at the module level. | |
| A target occurring in a "del" statement is also considered bound for | |
| this purpose (though the actual semantics are to unbind the name). | |
| Each assignment or import statement occurs within a block defined by a | |
| class or function definition or at the module level (the top-level | |
| code block). | |
| If a name is bound in a block, it is a local variable of that block, | |
| unless declared as "nonlocal" or "global". If a name is bound at the | |
| module level, it is a global variable. (The variables of the module | |
| code block are local and global.) If a variable is used in a code | |
| block but not defined there, it is a *free variable*. | |
| Each occurrence of a name in the program text refers to the *binding* | |
| of that name established by the following name resolution rules. | |
| Resolution of names | |
| ------------------- | |
| A *scope* defines the visibility of a name within a block. If a local | |
| variable is defined in a block, its scope includes that block. If the | |
| definition occurs in a function block, the scope extends to any blocks | |
| contained within the defining one, unless a contained block introduces | |
| a different binding for the name. | |
| When a name is used in a code block, it is resolved using the nearest | |
| enclosing scope. The set of all such scopes visible to a code block | |
| is called the block’s *environment*. | |
| When a name is not found at all, a "NameError" exception is raised. If | |
| the current scope is a function scope, and the name refers to a local | |
| variable that has not yet been bound to a value at the point where the | |
| name is used, an "UnboundLocalError" exception is raised. | |
| "UnboundLocalError" is a subclass of "NameError". | |
| If a name binding operation occurs anywhere within a code block, all | |
| uses of the name within the block are treated as references to the | |
| current block. This can lead to errors when a name is used within a | |
| block before it is bound. This rule is subtle. Python lacks | |
| declarations and allows name binding operations to occur anywhere | |
| within a code block. The local variables of a code block can be | |
| determined by scanning the entire text of the block for name binding | |
| operations. See the FAQ entry on UnboundLocalError for examples. | |
| If the "global" statement occurs within a block, all uses of the names | |
| specified in the statement refer to the bindings of those names in the | |
| top-level namespace. Names are resolved in the top-level namespace by | |
| searching the global namespace, i.e. the namespace of the module | |
| containing the code block, and the builtins namespace, the namespace | |
| of the module "builtins". The global namespace is searched first. If | |
| the names are not found there, the builtins namespace is searched | |
| next. If the names are also not found in the builtins namespace, new | |
| variables are created in the global namespace. The global statement | |
| must precede all uses of the listed names. | |
| The "global" statement has the same scope as a name binding operation | |
| in the same block. If the nearest enclosing scope for a free variable | |
| contains a global statement, the free variable is treated as a global. | |
| The "nonlocal" statement causes corresponding names to refer to | |
| previously bound variables in the nearest enclosing function scope. | |
| "SyntaxError" is raised at compile time if the given name does not | |
| exist in any enclosing function scope. Type parameters cannot be | |
| rebound with the "nonlocal" statement. | |
| The namespace for a module is automatically created the first time a | |
| module is imported. The main module for a script is always called | |
| "__main__". | |
| Class definition blocks and arguments to "exec()" and "eval()" are | |
| special in the context of name resolution. A class definition is an | |
| executable statement that may use and define names. These references | |
| follow the normal rules for name resolution with an exception that | |
| unbound local variables are looked up in the global namespace. The | |
| namespace of the class definition becomes the attribute dictionary of | |
| the class. The scope of names defined in a class block is limited to | |
| the class block; it does not extend to the code blocks of methods. | |
| This includes comprehensions and generator expressions, but it does | |
| not include annotation scopes, which have access to their enclosing | |
| class scopes. This means that the following will fail: | |
| class A: | |
| a = 42 | |
| b = list(a + i for i in range(10)) | |
| However, the following will succeed: | |
| class A: | |
| type Alias = Nested | |
| class Nested: pass | |
| print(A.Alias.__value__) # <type 'A.Nested'> | |
| Annotation scopes | |
| ----------------- | |
| *Annotations*, type parameter lists and "type" statements introduce | |
| *annotation scopes*, which behave mostly like function scopes, but | |
| with some exceptions discussed below. | |
| Annotation scopes are used in the following contexts: | |
| * *Function annotations*. | |
| * *Variable annotations*. | |
| * Type parameter lists for generic type aliases. | |
| * Type parameter lists for generic functions. A generic function’s | |
| annotations are executed within the annotation scope, but its | |
| defaults and decorators are not. | |
| * Type parameter lists for generic classes. A generic class’s base | |
| classes and keyword arguments are executed within the annotation | |
| scope, but its decorators are not. | |
| * The bounds, constraints, and default values for type parameters | |
| (lazily evaluated). | |
| * The value of type aliases (lazily evaluated). | |
| Annotation scopes differ from function scopes in the following ways: | |
| * Annotation scopes have access to their enclosing class namespace. If | |
| an annotation scope is immediately within a class scope, or within | |
| another annotation scope that is immediately within a class scope, | |
| the code in the annotation scope can use names defined in the class | |
| scope as if it were executed directly within the class body. This | |
| contrasts with regular functions defined within classes, which | |
| cannot access names defined in the class scope. | |
| * Expressions in annotation scopes cannot contain "yield", "yield | |
| from", "await", or ":=" expressions. (These expressions are allowed | |
| in other scopes contained within the annotation scope.) | |
| * Names defined in annotation scopes cannot be rebound with "nonlocal" | |
| statements in inner scopes. This includes only type parameters, as | |
| no other syntactic elements that can appear within annotation scopes | |
| can introduce new names. | |
| * While annotation scopes have an internal name, that name is not | |
| reflected in the *qualified name* of objects defined within the | |
| scope. Instead, the "__qualname__" of such objects is as if the | |
| object were defined in the enclosing scope. | |
| Added in version 3.12: Annotation scopes were introduced in Python | |
| 3.12 as part of **PEP 695**. | |
| Changed in version 3.13: Annotation scopes are also used for type | |
| parameter defaults, as introduced by **PEP 696**. | |
| Changed in version 3.14: Annotation scopes are now also used for | |
| annotations, as specified in **PEP 649** and **PEP 749**. | |
| Lazy evaluation | |
| --------------- | |
| Most annotation scopes are *lazily evaluated*. This includes | |
| annotations, the values of type aliases created through the "type" | |
| statement, and the bounds, constraints, and default values of type | |
| variables created through the type parameter syntax. This means that | |
| they are not evaluated when the type alias or type variable is | |
| created, or when the object carrying annotations is created. Instead, | |
| they are only evaluated when necessary, for example when the | |
| "__value__" attribute on a type alias is accessed. | |
| Example: | |
| >>> type Alias = 1/0 | |
| >>> Alias.__value__ | |
| Traceback (most recent call last): | |
| ... | |
| ZeroDivisionError: division by zero | |
| >>> def func[T: 1/0](): pass | |
| >>> T = func.__type_params__[0] | |
| >>> T.__bound__ | |
| Traceback (most recent call last): | |
| ... | |
| ZeroDivisionError: division by zero | |
| Here the exception is raised only when the "__value__" attribute of | |
| the type alias or the "__bound__" attribute of the type variable is | |
| accessed. | |
| This behavior is primarily useful for references to types that have | |
| not yet been defined when the type alias or type variable is created. | |
| For example, lazy evaluation enables creation of mutually recursive | |
| type aliases: | |
| from typing import Literal | |
| type SimpleExpr = int | Parenthesized | |
| type Parenthesized = tuple[Literal["("], Expr, Literal[")"]] | |
| type Expr = SimpleExpr | tuple[SimpleExpr, Literal["+", "-"], Expr] | |
| Lazily evaluated values are evaluated in annotation scope, which means | |
| that names that appear inside the lazily evaluated value are looked up | |
| as if they were used in the immediately enclosing scope. | |
| Added in version 3.12. | |
| Builtins and restricted execution | |
| --------------------------------- | |
| **CPython implementation detail:** Users should not touch | |
| "__builtins__"; it is strictly an implementation detail. Users | |
| wanting to override values in the builtins namespace should "import" | |
| the "builtins" module and modify its attributes appropriately. | |
| The builtins namespace associated with the execution of a code block | |
| is actually found by looking up the name "__builtins__" in its global | |
| namespace; this should be a dictionary or a module (in the latter case | |
| the module’s dictionary is used). By default, when in the "__main__" | |
| module, "__builtins__" is the built-in module "builtins"; when in any | |
| other module, "__builtins__" is an alias for the dictionary of the | |
| "builtins" module itself. | |
| Interaction with dynamic features | |
| --------------------------------- | |
| Name resolution of free variables occurs at runtime, not at compile | |
| time. This means that the following code will print 42: | |
| i = 10 | |
| def f(): | |
| print(i) | |
| i = 42 | |
| f() | |
| The "eval()" and "exec()" functions do not have access to the full | |
| environment for resolving names. Names may be resolved in the local | |
| and global namespaces of the caller. Free variables are not resolved | |
| in the nearest enclosing namespace, but in the global namespace. [1] | |
| The "exec()" and "eval()" functions have optional arguments to | |
| override the global and local namespace. If only one namespace is | |
| specified, it is used for both. | |
| Exceptions | |
| ========== | |
| Exceptions are a means of breaking out of the normal flow of control | |
| of a code block in order to handle errors or other exceptional | |
| conditions. An exception is *raised* at the point where the error is | |
| detected; it may be *handled* by the surrounding code block or by any | |
| code block that directly or indirectly invoked the code block where | |
| the error occurred. | |
| The Python interpreter raises an exception when it detects a run-time | |
| error (such as division by zero). A Python program can also | |
| explicitly raise an exception with the "raise" statement. Exception | |
| handlers are specified with the "try" … "except" statement. The | |
| "finally" clause of such a statement can be used to specify cleanup | |
| code which does not handle the exception, but is executed whether an | |
| exception occurred or not in the preceding code. | |
| Python uses the “termination” model of error handling: an exception | |
| handler can find out what happened and continue execution at an outer | |
| level, but it cannot repair the cause of the error and retry the | |
| failing operation (except by re-entering the offending piece of code | |
| from the top). | |
| When an exception is not handled at all, the interpreter terminates | |
| execution of the program, or returns to its interactive main loop. In | |
| either case, it prints a stack traceback, except when the exception is | |
| "SystemExit". | |
| Exceptions are identified by class instances. The "except" clause is | |
| selected depending on the class of the instance: it must reference the | |
| class of the instance or a *non-virtual base class* thereof. The | |
| instance can be received by the handler and can carry additional | |
| information about the exceptional condition. | |
| Note: | |
| Exception messages are not part of the Python API. Their contents | |
| may change from one version of Python to the next without warning | |
| and should not be relied on by code which will run under multiple | |
| versions of the interpreter. | |
| See also the description of the "try" statement in section The try | |
| statement and "raise" statement in section The raise statement. | |
| Runtime Components | |
| ================== | |
| General Computing Model | |
| ----------------------- | |
| Python’s execution model does not operate in a vacuum. It runs on a | |
| host machine and through that host’s runtime environment, including | |
| its operating system (OS), if there is one. When a program runs, the | |
| conceptual layers of how it runs on the host look something like this: | |
| **host machine** | |
| **process** (global resources) | |
| **thread** (runs machine code) | |
| Each process represents a program running on the host. Think of each | |
| process itself as the data part of its program. Think of the process’ | |
| threads as the execution part of the program. This distinction will | |
| be important to understand the conceptual Python runtime. | |
| The process, as the data part, is the execution context in which the | |
| program runs. It mostly consists of the set of resources assigned to | |
| the program by the host, including memory, signals, file handles, | |
| sockets, and environment variables. | |
| Processes are isolated and independent from one another. (The same is | |
| true for hosts.) The host manages the process’ access to its assigned | |
| resources, in addition to coordinating between processes. | |
| Each thread represents the actual execution of the program’s machine | |
| code, running relative to the resources assigned to the program’s | |
| process. It’s strictly up to the host how and when that execution | |
| takes place. | |
| From the point of view of Python, a program always starts with exactly | |
| one thread. However, the program may grow to run in multiple | |
| simultaneous threads. Not all hosts support multiple threads per | |
| process, but most do. Unlike processes, threads in a process are not | |
| isolated and independent from one another. Specifically, all threads | |
| in a process share all of the process’ resources. | |
| The fundamental point of threads is that each one does *run* | |
| independently, at the same time as the others. That may be only | |
| conceptually at the same time (“concurrently”) or physically (“in | |
| parallel”). Either way, the threads effectively run at a non- | |
| synchronized rate. | |
| Note: | |
| That non-synchronized rate means none of the process’ memory is | |
| guaranteed to stay consistent for the code running in any given | |
| thread. Thus multi-threaded programs must take care to coordinate | |
| access to intentionally shared resources. Likewise, they must take | |
| care to be absolutely diligent about not accessing any *other* | |
| resources in multiple threads; otherwise two threads running at the | |
| same time might accidentally interfere with each other’s use of some | |
| shared data. All this is true for both Python programs and the | |
| Python runtime.The cost of this broad, unstructured requirement is | |
| the tradeoff for the kind of raw concurrency that threads provide. | |
| The alternative to the required discipline generally means dealing | |
| with non-deterministic bugs and data corruption. | |
| Python Runtime Model | |
| -------------------- | |
| The same conceptual layers apply to each Python program, with some | |
| extra data layers specific to Python: | |
| **host machine** | |
| **process** (global resources) | |
| Python global runtime (*state*) | |
| Python interpreter (*state*) | |
| **thread** (runs Python bytecode and “C-API”) | |
| Python thread *state* | |
| At the conceptual level: when a Python program starts, it looks | |
| exactly like that diagram, with one of each. The runtime may grow to | |
| include multiple interpreters, and each interpreter may grow to | |
| include multiple thread states. | |
| Note: | |
| A Python implementation won’t necessarily implement the runtime | |
| layers distinctly or even concretely. The only exception is places | |
| where distinct layers are directly specified or exposed to users, | |
| like through the "threading" module. | |
| Note: | |
| The initial interpreter is typically called the “main” interpreter. | |
| Some Python implementations, like CPython, assign special roles to | |
| the main interpreter.Likewise, the host thread where the runtime was | |
| initialized is known as the “main” thread. It may be different from | |
| the process’ initial thread, though they are often the same. In | |
| some cases “main thread” may be even more specific and refer to the | |
| initial thread state. A Python runtime might assign specific | |
| responsibilities to the main thread, such as handling signals. | |
| As a whole, the Python runtime consists of the global runtime state, | |
| interpreters, and thread states. The runtime ensures all that state | |
| stays consistent over its lifetime, particularly when used with | |
| multiple host threads. | |
| The global runtime, at the conceptual level, is just a set of | |
| interpreters. While those interpreters are otherwise isolated and | |
| independent from one another, they may share some data or other | |
| resources. The runtime is responsible for managing these global | |
| resources safely. The actual nature and management of these resources | |
| is implementation-specific. Ultimately, the external utility of the | |
| global runtime is limited to managing interpreters. | |
| In contrast, an “interpreter” is conceptually what we would normally | |
| think of as the (full-featured) “Python runtime”. When machine code | |
| executing in a host thread interacts with the Python runtime, it calls | |
| into Python in the context of a specific interpreter. | |
| Note: | |
| The term “interpreter” here is not the same as the “bytecode | |
| interpreter”, which is what regularly runs in threads, executing | |
| compiled Python code.In an ideal world, “Python runtime” would refer | |
| to what we currently call “interpreter”. However, it’s been called | |
| “interpreter” at least since introduced in 1997 (CPython:a027efa5b). | |
| Each interpreter completely encapsulates all of the non-process- | |
| global, non-thread-specific state needed for the Python runtime to | |
| work. Notably, the interpreter’s state persists between uses. It | |
| includes fundamental data like "sys.modules". The runtime ensures | |
| multiple threads using the same interpreter will safely share it | |
| between them. | |
| A Python implementation may support using multiple interpreters at the | |
| same time in the same process. They are independent and isolated from | |
| one another. For example, each interpreter has its own "sys.modules". | |
| For thread-specific runtime state, each interpreter has a set of | |
| thread states, which it manages, in the same way the global runtime | |
| contains a set of interpreters. It can have thread states for as many | |
| host threads as it needs. It may even have multiple thread states for | |
| the same host thread, though that isn’t as common. | |
| Each thread state, conceptually, has all the thread-specific runtime | |
| data an interpreter needs to operate in one host thread. The thread | |
| state includes the current raised exception and the thread’s Python | |
| call stack. It may include other thread-specific resources. | |
| Note: | |
| The term “Python thread” can sometimes refer to a thread state, but | |
| normally it means a thread created using the "threading" module. | |
| Each thread state, over its lifetime, is always tied to exactly one | |
| interpreter and exactly one host thread. It will only ever be used in | |
| that thread and with that interpreter. | |
| Multiple thread states may be tied to the same host thread, whether | |
| for different interpreters or even the same interpreter. However, for | |
| any given host thread, only one of the thread states tied to it can be | |
| used by the thread at a time. | |
| Thread states are isolated and independent from one another and don’t | |
| share any data, except for possibly sharing an interpreter and objects | |
| or other resources belonging to that interpreter. | |
| Once a program is running, new Python threads can be created using the | |
| "threading" module (on platforms and Python implementations that | |
| support threads). Additional processes can be created using the "os", | |
| "subprocess", and "multiprocessing" modules. Interpreters can be | |
| created and used with the "interpreters" module. Coroutines (async) | |
| can be run using "asyncio" in each interpreter, typically only in a | |
| single thread (often the main thread). | |
| -[ Footnotes ]- | |
| [1] This limitation occurs because the code that is executed by these | |
| operations is not available at the time the module is compiled. | |
| ''', | |
| 'exprlists': r'''Expression lists | |
| **************** | |
| starred_expression: "*" or_expr | expression | |
| flexible_expression: assignment_expression | starred_expression | |
| flexible_expression_list: flexible_expression ("," flexible_expression)* [","] | |
| starred_expression_list: starred_expression ("," starred_expression)* [","] | |
| expression_list: expression ("," expression)* [","] | |
| yield_list: expression_list | starred_expression "," [starred_expression_list] | |
| Except when part of a list or set display, an expression list | |
| containing at least one comma yields a tuple. The length of the tuple | |
| is the number of expressions in the list. The expressions are | |
| evaluated from left to right. | |
| A trailing comma is required only to create a one-item tuple, such as | |
| "1,"; it is optional in all other cases. A single expression without a | |
| trailing comma doesn’t create a tuple, but rather yields the value of | |
| that expression. (To create an empty tuple, use an empty pair of | |
| parentheses: "()".) | |
| Iterable unpacking | |
| ================== | |
| In an expression list or tuple, list or set display, any expression | |
| may be prefixed with an asterisk ("*"). This denotes *iterable | |
| unpacking*. | |
| At runtime, the asterisk-prefixed expression must evaluate to an | |
| *iterable*. The iterable is expanded into a sequence of items, which | |
| are included in the new tuple, list, or set, at the site of the | |
| unpacking. | |
| Added in version 3.5: Iterable unpacking in expression lists, | |
| originally proposed by **PEP 448**. | |
| Added in version 3.11: Any item in an expression list may be starred. | |
| See **PEP 646**. | |
| ''', | |
| 'floating': r'''Floating-point literals | |
| *********************** | |
| Floating-point (float) literals, such as "3.14" or "1.5", denote | |
| approximations of real numbers. | |
| They consist of *integer* and *fraction* parts, each composed of | |
| decimal digits. The parts are separated by a decimal point, ".": | |
| 2.71828 | |
| 4.0 | |
| Unlike in integer literals, leading zeros are allowed. For example, | |
| "077.010" is legal, and denotes the same number as "77.01". | |
| As in integer literals, single underscores may occur between digits to | |
| help readability: | |
| 96_485.332_123 | |
| 3.14_15_93 | |
| Either of these parts, but not both, can be empty. For example: | |
| 10. # (equivalent to 10.0) | |
| .001 # (equivalent to 0.001) | |
| Optionally, the integer and fraction may be followed by an *exponent*: | |
| the letter "e" or "E", followed by an optional sign, "+" or "-", and a | |
| number in the same format as the integer and fraction parts. The "e" | |
| or "E" represents “times ten raised to the power of”: | |
| 1.0e3 # (represents 1.0×10³, or 1000.0) | |
| 1.166e-5 # (represents 1.166×10⁻⁵, or 0.00001166) | |
| 6.02214076e+23 # (represents 6.02214076×10²³, or 602214076000000000000000.) | |
| In floats with only integer and exponent parts, the decimal point may | |
| be omitted: | |
| 1e3 # (equivalent to 1.e3 and 1.0e3) | |
| 0e0 # (equivalent to 0.) | |
| Formally, floating-point literals are described by the following | |
| lexical definitions: | |
| floatnumber: | |
| | digitpart "." [digitpart] [exponent] | |
| | "." digitpart [exponent] | |
| | digitpart exponent | |
| digitpart: digit (["_"] digit)* | |
| exponent: ("e" | "E") ["+" | "-"] digitpart | |
| Changed in version 3.6: Underscores are now allowed for grouping | |
| purposes in literals. | |
| ''', | |
| 'for': r'''The "for" statement | |
| ******************* | |
| The "for" statement is used to iterate over the elements of a sequence | |
| (such as a string, tuple or list) or other iterable object: | |
| for_stmt: "for" target_list "in" starred_expression_list ":" suite | |
| ["else" ":" suite] | |
| The "starred_expression_list" expression is evaluated once; it should | |
| yield an *iterable* object. An *iterator* is created for that | |
| iterable. The first item provided by the iterator is then assigned to | |
| the target list using the standard rules for assignments (see | |
| Assignment statements), and the suite is executed. This repeats for | |
| each item provided by the iterator. When the iterator is *exhausted*, | |
| the suite in the "else" clause, if present, is executed, and the loop | |
| terminates. | |
| A "break" statement executed in the first suite terminates the loop | |
| without executing the "else" clause’s suite. A "continue" statement | |
| executed in the first suite skips the rest of the suite and continues | |
| with the next item, or with the "else" clause if there is no next | |
| item. | |
| The for-loop makes assignments to the variables in the target list. | |
| This overwrites all previous assignments to those variables including | |
| those made in the suite of the for-loop: | |
| for i in range(10): | |
| print(i) | |
| i = 5 # this will not affect the for-loop | |
| # because i will be overwritten with the next | |
| # index in the range | |
| Names in the target list are not deleted when the loop is finished, | |
| but if the sequence is empty, they will not have been assigned to at | |
| all by the loop. Hint: the built-in type "range()" represents | |
| immutable arithmetic sequences of integers. For instance, iterating | |
| "range(3)" successively yields 0, 1, and then 2. | |
| Changed in version 3.11: Starred elements are now allowed in the | |
| expression list. | |
| ''', | |
| 'formatstrings': r'''Format string syntax | |
| ******************** | |
| The "str.format()" method and the "Formatter" class share the same | |
| syntax for format strings (although in the case of "Formatter", | |
| subclasses can define their own format string syntax). The syntax is | |
| related to that of formatted string literals and template string | |
| literals, but it is less sophisticated and, in particular, does not | |
| support arbitrary expressions in interpolations. | |
| Format strings contain “replacement fields” surrounded by curly braces | |
| "{}". Anything that is not contained in braces is considered literal | |
| text, which is copied unchanged to the output. If you need to include | |
| a brace character in the literal text, it can be escaped by doubling: | |
| "{{" and "}}". | |
| The grammar for a replacement field is as follows: | |
| replacement_field: "{" [field_name] ["!" conversion] [":" format_spec] "}" | |
| field_name: arg_name ("." attribute_name | "[" element_index "]")* | |
| arg_name: [identifier | digit+] | |
| attribute_name: identifier | |
| element_index: digit+ | index_string | |
| index_string: <any source character except "]"> + | |
| conversion: "r" | "s" | "a" | |
| format_spec: format-spec:format_spec | |
| In less formal terms, the replacement field can start with a | |
| *field_name* that specifies the object whose value is to be formatted | |
| and inserted into the output instead of the replacement field. The | |
| *field_name* is optionally followed by a *conversion* field, which is | |
| preceded by an exclamation point "'!'", and a *format_spec*, which is | |
| preceded by a colon "':'". These specify a non-default format for the | |
| replacement value. | |
| See also the Format specification mini-language section. | |
| The *field_name* itself begins with an *arg_name* that is either a | |
| number or a keyword. If it’s a number, it refers to a positional | |
| argument, and if it’s a keyword, it refers to a named keyword | |
| argument. An *arg_name* is treated as a number if a call to | |
| "str.isdecimal()" on the string would return true. If the numerical | |
| arg_names in a format string are 0, 1, 2, … in sequence, they can all | |
| be omitted (not just some) and the numbers 0, 1, 2, … will be | |
| automatically inserted in that order. Because *arg_name* is not quote- | |
| delimited, it is not possible to specify arbitrary dictionary keys | |
| (e.g., the strings "'10'" or "':-]'") within a format string. The | |
| *arg_name* can be followed by any number of index or attribute | |
| expressions. An expression of the form "'.name'" selects the named | |
| attribute using "getattr()", while an expression of the form | |
| "'[index]'" does an index lookup using "__getitem__()". | |
| Changed in version 3.1: The positional argument specifiers can be | |
| omitted for "str.format()", so "'{} {}'.format(a, b)" is equivalent to | |
| "'{0} {1}'.format(a, b)". | |
| Changed in version 3.4: The positional argument specifiers can be | |
| omitted for "Formatter". | |
| Some simple format string examples: | |
| "First, thou shalt count to {0}" # References first positional argument | |
| "Bring me a {}" # Implicitly references the first positional argument | |
| "From {} to {}" # Same as "From {0} to {1}" | |
| "My quest is {name}" # References keyword argument 'name' | |
| "Weight in tons {0.weight}" # 'weight' attribute of first positional arg | |
| "Units destroyed: {players[0]}" # First element of keyword argument 'players'. | |
| The *conversion* field causes a type coercion before formatting. | |
| Normally, the job of formatting a value is done by the "__format__()" | |
| method of the value itself. However, in some cases it is desirable to | |
| force a type to be formatted as a string, overriding its own | |
| definition of formatting. By converting the value to a string before | |
| calling "__format__()", the normal formatting logic is bypassed. | |
| Three conversion flags are currently supported: "'!s'" which calls | |
| "str()" on the value, "'!r'" which calls "repr()" and "'!a'" which | |
| calls "ascii()". | |
| Some examples: | |
| "Harold's a clever {0!s}" # Calls str() on the argument first | |
| "Bring out the holy {name!r}" # Calls repr() on the argument first | |
| "More {!a}" # Calls ascii() on the argument first | |
| The *format_spec* field contains a specification of how the value | |
| should be presented, including such details as field width, alignment, | |
| padding, decimal precision and so on. Each value type can define its | |
| own “formatting mini-language” or interpretation of the *format_spec*. | |
| Most built-in types support a common formatting mini-language, which | |
| is described in the next section. | |
| A *format_spec* field can also include nested replacement fields | |
| within it. These nested replacement fields may contain a field name, | |
| conversion flag and format specification, but deeper nesting is not | |
| allowed. The replacement fields within the format_spec are | |
| substituted before the *format_spec* string is interpreted. This | |
| allows the formatting of a value to be dynamically specified. | |
| See the Format examples section for some examples. | |
| Format specification mini-language | |
| ================================== | |
| “Format specifications” are used within replacement fields contained | |
| within a format string to define how individual values are presented | |
| (see Format string syntax, f-strings, and t-strings). They can also be | |
| passed directly to the built-in "format()" function. Each formattable | |
| type may define how the format specification is to be interpreted. | |
| Most built-in types implement the following options for format | |
| specifications, although some of the formatting options are only | |
| supported by the numeric types. | |
| A general convention is that an empty format specification produces | |
| the same result as if you had called "str()" on the value. A non-empty | |
| format specification typically modifies the result. | |
| The general form of a *standard format specifier* is: | |
| format_spec: [options][width_and_precision][type] | |
| options: [[fill]align][sign]["z"]["#"]["0"] | |
| fill: <any character> | |
| align: "<" | ">" | "=" | "^" | |
| sign: "+" | "-" | " " | |
| width_and_precision: [width_with_grouping][precision_with_grouping] | |
| width_with_grouping: [width][grouping] | |
| precision_with_grouping: "." [precision][grouping] | "." grouping | |
| width: digit+ | |
| precision: digit+ | |
| grouping: "," | "_" | |
| type: "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | |
| | "G" | "n" | "o" | "s" | "x" | "X" | "%" | |
| If a valid *align* value is specified, it can be preceded by a *fill* | |
| character that can be any character and defaults to a space if | |
| omitted. It is not possible to use a literal curly brace (”"{"” or | |
| “"}"”) as the *fill* character in a formatted string literal or when | |
| using the "str.format()" method. However, it is possible to insert a | |
| curly brace with a nested replacement field. This limitation doesn’t | |
| affect the "format()" function. | |
| The meaning of the various alignment options is as follows: | |
| +-----------+------------------------------------------------------------+ | |
| | Option | Meaning | | |
| |===========|============================================================| | |
| | "'<'" | Forces the field to be left-aligned within the available | | |
| | | space (this is the default for most objects). | | |
| +-----------+------------------------------------------------------------+ | |
| | "'>'" | Forces the field to be right-aligned within the available | | |
| | | space (this is the default for numbers). | | |
| +-----------+------------------------------------------------------------+ | |
| | "'='" | Forces the padding to be placed after the sign (if any) | | |
| | | but before the digits. This is used for printing fields | | |
| | | in the form ‘+000000120’. This alignment option is only | | |
| | | valid for numeric types, excluding "complex". It becomes | | |
| | | the default for numbers when ‘0’ immediately precedes the | | |
| | | field width. | | |
| +-----------+------------------------------------------------------------+ | |
| | "'^'" | Forces the field to be centered within the available | | |
| | | space. | | |
| +-----------+------------------------------------------------------------+ | |
| Note that unless a minimum field width is defined, the field width | |
| will always be the same size as the data to fill it, so that the | |
| alignment option has no meaning in this case. | |
| The *sign* option is only valid for number types, and can be one of | |
| the following: | |
| +-----------+------------------------------------------------------------+ | |
| | Option | Meaning | | |
| |===========|============================================================| | |
| | "'+'" | Indicates that a sign should be used for both positive as | | |
| | | well as negative numbers. | | |
| +-----------+------------------------------------------------------------+ | |
| | "'-'" | Indicates that a sign should be used only for negative | | |
| | | numbers (this is the default behavior). | | |
| +-----------+------------------------------------------------------------+ | |
| | space | Indicates that a leading space should be used on positive | | |
| | | numbers, and a minus sign on negative numbers. | | |
| +-----------+------------------------------------------------------------+ | |
| The "'z'" option coerces negative zero floating-point values to | |
| positive zero after rounding to the format precision. This option is | |
| only valid for floating-point presentation types. | |
| Changed in version 3.11: Added the "'z'" option (see also **PEP | |
| 682**). | |
| The "'#'" option causes the “alternate form” to be used for the | |
| conversion. The alternate form is defined differently for different | |
| types. This option is only valid for integer, float and complex | |
| types. For integers, when binary, octal, or hexadecimal output is | |
| used, this option adds the respective prefix "'0b'", "'0o'", "'0x'", | |
| or "'0X'" to the output value. For float and complex the alternate | |
| form causes the result of the conversion to always contain a decimal- | |
| point character, even if no digits follow it. Normally, a decimal- | |
| point character appears in the result of these conversions only if a | |
| digit follows it. In addition, for "'g'" and "'G'" conversions, | |
| trailing zeros are not removed from the result. | |
| The *width* is a decimal integer defining the minimum total field | |
| width, including any prefixes, separators, and other formatting | |
| characters. If not specified, then the field width will be determined | |
| by the content. | |
| When no explicit alignment is given, preceding the *width* field by a | |
| zero ("'0'") character enables sign-aware zero-padding for numeric | |
| types, excluding "complex". This is equivalent to a *fill* character | |
| of "'0'" with an *alignment* type of "'='". | |
| Changed in version 3.10: Preceding the *width* field by "'0'" no | |
| longer affects the default alignment for strings. | |
| The *precision* is a decimal integer indicating how many digits should | |
| be displayed after the decimal point for presentation types "'f'" and | |
| "'F'", or before and after the decimal point for presentation types | |
| "'g'" or "'G'". For string presentation types the field indicates the | |
| maximum field size - in other words, how many characters will be used | |
| from the field content. The *precision* is not allowed for integer | |
| presentation types. | |
| The *grouping* option after *width* and *precision* fields specifies a | |
| digit group separator for the integral and fractional parts of a | |
| number respectively. It can be one of the following: | |
| +-----------+------------------------------------------------------------+ | |
| | Option | Meaning | | |
| |===========|============================================================| | |
| | "','" | Inserts a comma every 3 digits for integer presentation | | |
| | | type "'d'" and floating-point presentation types, | | |
| | | excluding "'n'". For other presentation types, this option | | |
| | | is not supported. | | |
| +-----------+------------------------------------------------------------+ | |
| | "'_'" | Inserts an underscore every 3 digits for integer | | |
| | | presentation type "'d'" and floating-point presentation | | |
| | | types, excluding "'n'". For integer presentation types | | |
| | | "'b'", "'o'", "'x'", and "'X'", underscores are inserted | | |
| | | every 4 digits. For other presentation types, this option | | |
| | | is not supported. | | |
| +-----------+------------------------------------------------------------+ | |
| For a locale-aware separator, use the "'n'" float presentation type or | |
| integer presentation type instead. | |
| Changed in version 3.1: Added the "','" option (see also **PEP 378**). | |
| Changed in version 3.6: Added the "'_'" option (see also **PEP 515**). | |
| Changed in version 3.14: Support the *grouping* option for the | |
| fractional part. | |
| Finally, the *type* determines how the data should be presented. | |
| The available string presentation types are: | |
| +-----------+------------------------------------------------------------+ | |
| | Type | Meaning | | |
| |===========|============================================================| | |
| | "'s'" | String format. This is the default type for strings and | | |
| | | may be omitted. | | |
| +-----------+------------------------------------------------------------+ | |
| | None | The same as "'s'". | | |
| +-----------+------------------------------------------------------------+ | |
| The available integer presentation types are: | |
| +-----------+------------------------------------------------------------+ | |
| | Type | Meaning | | |
| |===========|============================================================| | |
| | "'b'" | Binary format. Outputs the number in base 2. | | |
| +-----------+------------------------------------------------------------+ | |
| | "'c'" | Character. Converts the integer to the corresponding | | |
| | | unicode character before printing. | | |
| +-----------+------------------------------------------------------------+ | |
| | "'d'" | Decimal Integer. Outputs the number in base 10. | | |
| +-----------+------------------------------------------------------------+ | |
| | "'o'" | Octal format. Outputs the number in base 8. | | |
| +-----------+------------------------------------------------------------+ | |
| | "'x'" | Hex format. Outputs the number in base 16, using lower- | | |
| | | case letters for the digits above 9. | | |
| +-----------+------------------------------------------------------------+ | |
| | "'X'" | Hex format. Outputs the number in base 16, using upper- | | |
| | | case letters for the digits above 9. In case "'#'" is | | |
| | | specified, the prefix "'0x'" will be upper-cased to "'0X'" | | |
| | | as well. | | |
| +-----------+------------------------------------------------------------+ | |
| | "'n'" | Number. This is the same as "'d'", except that it uses the | | |
| | | current locale setting to insert the appropriate digit | | |
| | | group separators. Note that the default locale is not the | | |
| | | system locale. Depending on your use case, you may wish to | | |
| | | set "LC_NUMERIC" with "locale.setlocale()" before using | | |
| | | "'n'". | | |
| +-----------+------------------------------------------------------------+ | |
| | None | The same as "'d'". | | |
| +-----------+------------------------------------------------------------+ | |
| In addition to the above presentation types, integers can be formatted | |
| with the floating-point presentation types listed below (except "'n'" | |
| and "None"). When doing so, "float()" is used to convert the integer | |
| to a floating-point number before formatting. | |
| The available presentation types for "float" and "Decimal" values are: | |
| +-----------+------------------------------------------------------------+ | |
| | Type | Meaning | | |
| |===========|============================================================| | |
| | "'e'" | Scientific notation. For a given precision "p", formats | | |
| | | the number in scientific notation with the letter ‘e’ | | |
| | | separating the coefficient from the exponent. The | | |
| | | coefficient has one digit before and "p" digits after the | | |
| | | decimal point, for a total of "p + 1" significant digits. | | |
| | | With no precision given, uses a precision of "6" digits | | |
| | | after the decimal point for "float", and shows all | | |
| | | coefficient digits for "Decimal". If "p=0", the decimal | | |
| | | point is omitted unless the "#" option is used. For | | |
| | | "float", the exponent always contains at least two digits, | | |
| | | and is zero if the value is zero. | | |
| +-----------+------------------------------------------------------------+ | |
| | "'E'" | Scientific notation. Same as "'e'" except it uses an upper | | |
| | | case ‘E’ as the separator character. | | |
| +-----------+------------------------------------------------------------+ | |
| | "'f'" | Fixed-point notation. For a given precision "p", formats | | |
| | | the number as a decimal number with exactly "p" digits | | |
| | | following the decimal point. With no precision given, uses | | |
| | | a precision of "6" digits after the decimal point for | | |
| | | "float", and uses a precision large enough to show all | | |
| | | coefficient digits for "Decimal". If "p=0", the decimal | | |
| | | point is omitted unless the "#" option is used. | | |
| +-----------+------------------------------------------------------------+ | |
| | "'F'" | Fixed-point notation. Same as "'f'", but converts "nan" to | | |
| | | "NAN" and "inf" to "INF". | | |
| +-----------+------------------------------------------------------------+ | |
| | "'g'" | General format. For a given precision "p >= 1", this | | |
| | | rounds the number to "p" significant digits and then | | |
| | | formats the result in either fixed-point format or in | | |
| | | scientific notation, depending on its magnitude. A | | |
| | | precision of "0" is treated as equivalent to a precision | | |
| | | of "1". The precise rules are as follows: suppose that | | |
| | | the result formatted with presentation type "'e'" and | | |
| | | precision "p-1" would have exponent "exp". Then, if "m <= | | |
| | | exp < p", where "m" is -4 for floats and -6 for | | |
| | | "Decimals", the number is formatted with presentation type | | |
| | | "'f'" and precision "p-1-exp". Otherwise, the number is | | |
| | | formatted with presentation type "'e'" and precision | | |
| | | "p-1". In both cases insignificant trailing zeros are | | |
| | | removed from the significand, and the decimal point is | | |
| | | also removed if there are no remaining digits following | | |
| | | it, unless the "'#'" option is used. With no precision | | |
| | | given, uses a precision of "6" significant digits for | | |
| | | "float". For "Decimal", the coefficient of the result is | | |
| | | formed from the coefficient digits of the value; | | |
| | | scientific notation is used for values smaller than "1e-6" | | |
| | | in absolute value and values where the place value of the | | |
| | | least significant digit is larger than 1, and fixed-point | | |
| | | notation is used otherwise. Positive and negative | | |
| | | infinity, positive and negative zero, and nans, are | | |
| | | formatted as "inf", "-inf", "0", "-0" and "nan" | | |
| | | respectively, regardless of the precision. | | |
| +-----------+------------------------------------------------------------+ | |
| | "'G'" | General format. Same as "'g'" except switches to "'E'" if | | |
| | | the number gets too large. The representations of infinity | | |
| | | and NaN are uppercased, too. | | |
| +-----------+------------------------------------------------------------+ | |
| | "'n'" | Number. This is the same as "'g'", except that it uses the | | |
| | | current locale setting to insert the appropriate digit | | |
| | | group separators for the integral part of a number. Note | | |
| | | that the default locale is not the system locale. | | |
| | | Depending on your use case, you may wish to set | | |
| | | "LC_NUMERIC" with "locale.setlocale()" before using "'n'". | | |
| +-----------+------------------------------------------------------------+ | |
| | "'%'" | Percentage. Multiplies the number by 100 and displays in | | |
| | | fixed ("'f'") format, followed by a percent sign. | | |
| +-----------+------------------------------------------------------------+ | |
| | None | For "float" this is like the "'g'" type, except that when | | |
| | | fixed- point notation is used to format the result, it | | |
| | | always includes at least one digit past the decimal point, | | |
| | | and switches to the scientific notation when "exp >= p - | | |
| | | 1". When the precision is not specified, the latter will | | |
| | | be as large as needed to represent the given value | | |
| | | faithfully. For "Decimal", this is the same as either | | |
| | | "'g'" or "'G'" depending on the value of | | |
| | | "context.capitals" for the current decimal context. The | | |
| | | overall effect is to match the output of "str()" as | | |
| | | altered by the other format modifiers. | | |
| +-----------+------------------------------------------------------------+ | |
| The result should be correctly rounded to a given precision "p" of | |
| digits after the decimal point. The rounding mode for "float" matches | |
| that of the "round()" builtin. For "Decimal", the rounding mode of | |
| the current context will be used. | |
| The available presentation types for "complex" are the same as those | |
| for "float" ("'%'" is not allowed). Both the real and imaginary | |
| components of a complex number are formatted as floating-point | |
| numbers, according to the specified presentation type. They are | |
| separated by the mandatory sign of the imaginary part, the latter | |
| being terminated by a "j" suffix. If the presentation type is | |
| missing, the result will match the output of "str()" (complex numbers | |
| with a non-zero real part are also surrounded by parentheses), | |
| possibly altered by other format modifiers. | |
| Format examples | |
| =============== | |
| This section contains examples of the "str.format()" syntax and | |
| comparison with the old "%"-formatting. | |
| In most of the cases the syntax is similar to the old "%"-formatting, | |
| with the addition of the "{}" and with ":" used instead of "%". For | |
| example, "'%03.2f'" can be translated to "'{:03.2f}'". | |
| The new format syntax also supports new and different options, shown | |
| in the following examples. | |
| Accessing arguments by position: | |
| >>> '{0}, {1}, {2}'.format('a', 'b', 'c') | |
| 'a, b, c' | |
| >>> '{}, {}, {}'.format('a', 'b', 'c') # 3.1+ only | |
| 'a, b, c' | |
| >>> '{2}, {1}, {0}'.format('a', 'b', 'c') | |
| 'c, b, a' | |
| >>> '{2}, {1}, {0}'.format(*'abc') # unpacking argument sequence | |
| 'c, b, a' | |
| >>> '{0}{1}{0}'.format('abra', 'cad') # arguments' indices can be repeated | |
| 'abracadabra' | |
| Accessing arguments by name: | |
| >>> 'Coordinates: {latitude}, {longitude}'.format(latitude='37.24N', longitude='-115.81W') | |
| 'Coordinates: 37.24N, -115.81W' | |
| >>> coord = {'latitude': '37.24N', 'longitude': '-115.81W'} | |
| >>> 'Coordinates: {latitude}, {longitude}'.format(**coord) | |
| 'Coordinates: 37.24N, -115.81W' | |
| Accessing arguments’ attributes: | |
| >>> c = 3-5j | |
| >>> ('The complex number {0} is formed from the real part {0.real} ' | |
| ... 'and the imaginary part {0.imag}.').format(c) | |
| 'The complex number (3-5j) is formed from the real part 3.0 and the imaginary part -5.0.' | |
| >>> class Point: | |
| ... def __init__(self, x, y): | |
| ... self.x, self.y = x, y | |
| ... def __str__(self): | |
| ... return 'Point({self.x}, {self.y})'.format(self=self) | |
| ... | |
| >>> str(Point(4, 2)) | |
| 'Point(4, 2)' | |
| Accessing arguments’ items: | |
| >>> coord = (3, 5) | |
| >>> 'X: {0[0]}; Y: {0[1]}'.format(coord) | |
| 'X: 3; Y: 5' | |
| Replacing "%s" and "%r": | |
| >>> "repr() shows quotes: {!r}; str() doesn't: {!s}".format('test1', 'test2') | |
| "repr() shows quotes: 'test1'; str() doesn't: test2" | |
| Aligning the text and specifying a width: | |
| >>> '{:<30}'.format('left aligned') | |
| 'left aligned ' | |
| >>> '{:>30}'.format('right aligned') | |
| ' right aligned' | |
| >>> '{:^30}'.format('centered') | |
| ' centered ' | |
| >>> '{:*^30}'.format('centered') # use '*' as a fill char | |
| '***********centered***********' | |
| Replacing "%+f", "%-f", and "% f" and specifying a sign: | |
| >>> '{:+f}; {:+f}'.format(3.14, -3.14) # show it always | |
| '+3.140000; -3.140000' | |
| >>> '{: f}; {: f}'.format(3.14, -3.14) # show a space for positive numbers | |
| ' 3.140000; -3.140000' | |
| >>> '{:-f}; {:-f}'.format(3.14, -3.14) # show only the minus -- same as '{:f}; {:f}' | |
| '3.140000; -3.140000' | |
| Replacing "%x" and "%o" and converting the value to different bases: | |
| >>> # format also supports binary numbers | |
| >>> "int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}".format(42) | |
| 'int: 42; hex: 2a; oct: 52; bin: 101010' | |
| >>> # with 0x, 0o, or 0b as prefix: | |
| >>> "int: {0:d}; hex: {0:#x}; oct: {0:#o}; bin: {0:#b}".format(42) | |
| 'int: 42; hex: 0x2a; oct: 0o52; bin: 0b101010' | |
| Using the comma or the underscore as a digit group separator: | |
| >>> '{:,}'.format(1234567890) | |
| '1,234,567,890' | |
| >>> '{:_}'.format(1234567890) | |
| '1_234_567_890' | |
| >>> '{:_b}'.format(1234567890) | |
| '100_1001_1001_0110_0000_0010_1101_0010' | |
| >>> '{:_x}'.format(1234567890) | |
| '4996_02d2' | |
| >>> '{:_}'.format(123456789.123456789) | |
| '123_456_789.12345679' | |
| >>> '{:.,}'.format(123456789.123456789) | |
| '123456789.123,456,79' | |
| >>> '{:,._}'.format(123456789.123456789) | |
| '123,456,789.123_456_79' | |
| Expressing a percentage: | |
| >>> points = 19 | |
| >>> total = 22 | |
| >>> 'Correct answers: {:.2%}'.format(points/total) | |
| 'Correct answers: 86.36%' | |
| Using type-specific formatting: | |
| >>> import datetime as dt | |
| >>> d = dt.datetime(2010, 7, 4, 12, 15, 58) | |
| >>> '{:%Y-%m-%d %H:%M:%S}'.format(d) | |
| '2010-07-04 12:15:58' | |
| Nesting arguments and more complex examples: | |
| >>> for align, text in zip('<^>', ['left', 'center', 'right']): | |
| ... '{0:{fill}{align}16}'.format(text, fill=align, align=align) | |
| ... | |
| 'left<<<<<<<<<<<<' | |
| '^^^^^center^^^^^' | |
| '>>>>>>>>>>>right' | |
| >>> | |
| >>> octets = [192, 168, 0, 1] | |
| >>> '{:02X}{:02X}{:02X}{:02X}'.format(*octets) | |
| 'C0A80001' | |
| >>> int(_, 16) | |
| 3232235521 | |
| >>> | |
| >>> width = 5 | |
| >>> for num in range(5,12): | |
| ... for base in 'dXob': | |
| ... print('{0:{width}{base}}'.format(num, base=base, width=width), end=' ') | |
| ... print() | |
| ... | |
| 5 5 5 101 | |
| 6 6 6 110 | |
| 7 7 7 111 | |
| 8 8 10 1000 | |
| 9 9 11 1001 | |
| 10 A 12 1010 | |
| 11 B 13 1011 | |
| ''', | |
| 'function': r'''Function definitions | |
| ******************** | |
| A function definition defines a user-defined function object (see | |
| section The standard type hierarchy): | |
| funcdef: [decorators] "def" funcname [type_params] "(" [parameter_list] ")" | |
| ["->" expression] ":" suite | |
| decorators: decorator+ | |
| decorator: "@" assignment_expression NEWLINE | |
| parameter_list: defparameter ("," defparameter)* "," "/" ["," [parameter_list_no_posonly]] | |
| | parameter_list_no_posonly | |
| parameter_list_no_posonly: defparameter ("," defparameter)* ["," [parameter_list_starargs]] | |
| | parameter_list_starargs | |
| parameter_list_starargs: "*" star_parameter ("," defparameter)* ["," [parameter_star_kwargs]] | |
| | "*" ("," defparameter)+ ["," [parameter_star_kwargs]] | |
| | parameter_star_kwargs | |
| parameter_star_kwargs: "**" parameter [","] | |
| parameter: identifier [":" expression] | |
| star_parameter: identifier [":" ["*"] expression] | |
| defparameter: parameter ["=" expression] | |
| funcname: identifier | |
| A function definition is an executable statement. Its execution binds | |
| the function name in the current local namespace to a function object | |
| (a wrapper around the executable code for the function). This | |
| function object contains a reference to the current global namespace | |
| as the global namespace to be used when the function is called. | |
| The function definition does not execute the function body; this gets | |
| executed only when the function is called. [4] | |
| A function definition may be wrapped by one or more *decorator* | |
| expressions. Decorator expressions are evaluated when the function is | |
| defined, in the scope that contains the function definition. The | |
| result must be a callable, which is invoked with the function object | |
| as the only argument. The returned value is bound to the function name | |
| instead of the function object. Multiple decorators are applied in | |
| nested fashion. For example, the following code | |
| @f1(arg) | |
| @f2 | |
| def func(): pass | |
| is roughly equivalent to | |
| def func(): pass | |
| func = f1(arg)(f2(func)) | |
| except that the original function is not temporarily bound to the name | |
| "func". | |
| Changed in version 3.9: Functions may be decorated with any valid | |
| "assignment_expression". Previously, the grammar was much more | |
| restrictive; see **PEP 614** for details. | |
| A list of type parameters may be given in square brackets between the | |
| function’s name and the opening parenthesis for its parameter list. | |
| This indicates to static type checkers that the function is generic. | |
| At runtime, the type parameters can be retrieved from the function’s | |
| "__type_params__" attribute. See Generic functions for more. | |
| Changed in version 3.12: Type parameter lists are new in Python 3.12. | |
| When one or more *parameters* have the form *parameter* "=" | |
| *expression*, the function is said to have “default parameter values.” | |
| For a parameter with a default value, the corresponding *argument* may | |
| be omitted from a call, in which case the parameter’s default value is | |
| substituted. If a parameter has a default value, all following | |
| parameters up until the “"*"” must also have a default value — this is | |
| a syntactic restriction that is not expressed by the grammar. | |
| **Default parameter values are evaluated from left to right when the | |
| function definition is executed.** This means that the expression is | |
| evaluated once, when the function is defined, and that the same “pre- | |
| computed” value is used for each call. This is especially important | |
| to understand when a default parameter value is a mutable object, such | |
| as a list or a dictionary: if the function modifies the object (e.g. | |
| by appending an item to a list), the default parameter value is in | |
| effect modified. This is generally not what was intended. A way | |
| around this is to use "None" as the default, and explicitly test for | |
| it in the body of the function, for example: | |
| def whats_on_the_telly(penguin=None): | |
| if penguin is None: | |
| penguin = [] | |
| penguin.append("property of the zoo") | |
| return penguin | |
| Function call semantics are described in more detail in section Calls. | |
| A function call always assigns values to all parameters mentioned in | |
| the parameter list, either from positional arguments, from keyword | |
| arguments, or from default values. If the form “"*identifier"” is | |
| present, it is initialized to a tuple receiving any excess positional | |
| parameters, defaulting to the empty tuple. If the form | |
| “"**identifier"” is present, it is initialized to a new ordered | |
| mapping receiving any excess keyword arguments, defaulting to a new | |
| empty mapping of the same type. Parameters after “"*"” or | |
| “"*identifier"” are keyword-only parameters and may only be passed by | |
| keyword arguments. Parameters before “"/"” are positional-only | |
| parameters and may only be passed by positional arguments. | |
| Changed in version 3.8: The "/" function parameter syntax may be used | |
| to indicate positional-only parameters. See **PEP 570** for details. | |
| Parameters may have an *annotation* of the form “": expression"” | |
| following the parameter name. Any parameter may have an annotation, | |
| even those of the form "*identifier" or "**identifier". (As a special | |
| case, parameters of the form "*identifier" may have an annotation “": | |
| *expression"”.) Functions may have “return” annotation of the form | |
| “"-> expression"” after the parameter list. These annotations can be | |
| any valid Python expression. The presence of annotations does not | |
| change the semantics of a function. See Annotations for more | |
| information on annotations. | |
| Changed in version 3.11: Parameters of the form “"*identifier"” may | |
| have an annotation “": *expression"”. See **PEP 646**. | |
| It is also possible to create anonymous functions (functions not bound | |
| to a name), for immediate use in expressions. This uses lambda | |
| expressions, described in section Lambdas. Note that the lambda | |
| expression is merely a shorthand for a simplified function definition; | |
| a function defined in a “"def"” statement can be passed around or | |
| assigned to another name just like a function defined by a lambda | |
| expression. The “"def"” form is actually more powerful since it | |
| allows the execution of multiple statements and annotations. | |
| **Programmer’s note:** Functions are first-class objects. A “"def"” | |
| statement executed inside a function definition defines a local | |
| function that can be returned or passed around. Free variables used | |
| in the nested function can access the local variables of the function | |
| containing the def. See section Naming and binding for details. | |
| See also: | |
| **PEP 3107** - Function Annotations | |
| The original specification for function annotations. | |
| **PEP 484** - Type Hints | |
| Definition of a standard meaning for annotations: type hints. | |
| **PEP 526** - Syntax for Variable Annotations | |
| Ability to type hint variable declarations, including class | |
| variables and instance variables. | |
| **PEP 563** - Postponed Evaluation of Annotations | |
| Support for forward references within annotations by preserving | |
| annotations in a string form at runtime instead of eager | |
| evaluation. | |
| **PEP 318** - Decorators for Functions and Methods | |
| Function and method decorators were introduced. Class decorators | |
| were introduced in **PEP 3129**. | |
| ''', | |
| 'global': r'''The "global" statement | |
| ********************** | |
| global_stmt: "global" identifier ("," identifier)* | |
| The "global" statement causes the listed identifiers to be interpreted | |
| as globals. It would be impossible to assign to a global variable | |
| without "global", although free variables may refer to globals without | |
| being declared global. | |
| The "global" statement applies to the entire current scope (module, | |
| function body or class definition). A "SyntaxError" is raised if a | |
| variable is used or assigned to prior to its global declaration in the | |
| scope. | |
| At the module level, all variables are global, so a "global" statement | |
| has no effect. However, variables must still not be used or assigned | |
| to prior to their "global" declaration. This requirement is relaxed in | |
| the interactive prompt (*REPL*). | |
| **Programmer’s note:** "global" is a directive to the parser. It | |
| applies only to code parsed at the same time as the "global" | |
| statement. In particular, a "global" statement contained in a string | |
| or code object supplied to the built-in "exec()" function does not | |
| affect the code block *containing* the function call, and code | |
| contained in such a string is unaffected by "global" statements in the | |
| code containing the function call. The same applies to the "eval()" | |
| and "compile()" functions. | |
| ''', | |
| 'id-classes': r'''Reserved classes of identifiers | |
| ******************************* | |
| Certain classes of identifiers (besides keywords) have special | |
| meanings. These classes are identified by the patterns of leading and | |
| trailing underscore characters: | |
| "_*" | |
| Not imported by "from module import *". | |
| "_" | |
| In a "case" pattern within a "match" statement, "_" is a soft | |
| keyword that denotes a wildcard. | |
| Separately, the interactive interpreter makes the result of the | |
| last evaluation available in the variable "_". (It is stored in the | |
| "builtins" module, alongside built-in functions like "print".) | |
| Elsewhere, "_" is a regular identifier. It is often used to name | |
| “special” items, but it is not special to Python itself. | |
| Note: | |
| The name "_" is often used in conjunction with | |
| internationalization; refer to the documentation for the | |
| "gettext" module for more information on this convention.It is | |
| also commonly used for unused variables. | |
| "__*__" | |
| System-defined names, informally known as “dunder” names. These | |
| names are defined by the interpreter and its implementation | |
| (including the standard library). Current system names are | |
| discussed in the Special method names section and elsewhere. More | |
| will likely be defined in future versions of Python. *Any* use of | |
| "__*__" names, in any context, that does not follow explicitly | |
| documented use, is subject to breakage without warning. | |
| "__*" | |
| Class-private names. Names in this category, when used within the | |
| context of a class definition, are re-written to use a mangled form | |
| to help avoid name clashes between “private” attributes of base and | |
| derived classes. See section Identifiers (Names). | |
| ''', | |
| 'identifiers': r'''Names (identifiers and keywords) | |
| ******************************** | |
| "NAME" tokens represent *identifiers*, *keywords*, and *soft | |
| keywords*. | |
| Names are composed of the following characters: | |
| * uppercase and lowercase letters ("A-Z" and "a-z"), | |
| * the underscore ("_"), | |
| * digits ("0" through "9"), which cannot appear as the first | |
| character, and | |
| * non-ASCII characters. Valid names may only contain “letter-like” and | |
| “digit-like” characters; see Non-ASCII characters in names for | |
| details. | |
| Names must contain at least one character, but have no upper length | |
| limit. Case is significant. | |
| Formally, names are described by the following lexical definitions: | |
| NAME: name_start name_continue* | |
| name_start: "a"..."z" | "A"..."Z" | "_" | <non-ASCII character> | |
| name_continue: name_start | "0"..."9" | |
| identifier: <NAME, except keywords> | |
| Note that not all names matched by this grammar are valid; see Non- | |
| ASCII characters in names for details. | |
| Keywords | |
| ======== | |
| The following names are used as reserved words, or *keywords* of the | |
| language, and cannot be used as ordinary identifiers. They must be | |
| spelled exactly as written here: | |
| False await else import pass | |
| None break except in raise | |
| True class finally is return | |
| and continue for lambda try | |
| as def from nonlocal while | |
| assert del global not with | |
| async elif if or yield | |
| Soft Keywords | |
| ============= | |
| Added in version 3.10. | |
| Some names are only reserved under specific contexts. These are known | |
| as *soft keywords*: | |
| * "match", "case", and "_", when used in the "match" statement. | |
| * "type", when used in the "type" statement. | |
| * "lazy", when used before an "import" statement. | |
| These syntactically act as keywords in their specific contexts, but | |
| this distinction is done at the parser level, not when tokenizing. | |
| As soft keywords, their use in the grammar is possible while still | |
| preserving compatibility with existing code that uses these names as | |
| identifier names. | |
| Changed in version 3.12: "type" is now a soft keyword. | |
| Changed in version 3.15: "lazy" is now a soft keyword. | |
| Reserved classes of identifiers | |
| =============================== | |
| Certain classes of identifiers (besides keywords) have special | |
| meanings. These classes are identified by the patterns of leading and | |
| trailing underscore characters: | |
| "_*" | |
| Not imported by "from module import *". | |
| "_" | |
| In a "case" pattern within a "match" statement, "_" is a soft | |
| keyword that denotes a wildcard. | |
| Separately, the interactive interpreter makes the result of the | |
| last evaluation available in the variable "_". (It is stored in the | |
| "builtins" module, alongside built-in functions like "print".) | |
| Elsewhere, "_" is a regular identifier. It is often used to name | |
| “special” items, but it is not special to Python itself. | |
| Note: | |
| The name "_" is often used in conjunction with | |
| internationalization; refer to the documentation for the | |
| "gettext" module for more information on this convention.It is | |
| also commonly used for unused variables. | |
| "__*__" | |
| System-defined names, informally known as “dunder” names. These | |
| names are defined by the interpreter and its implementation | |
| (including the standard library). Current system names are | |
| discussed in the Special method names section and elsewhere. More | |
| will likely be defined in future versions of Python. *Any* use of | |
| "__*__" names, in any context, that does not follow explicitly | |
| documented use, is subject to breakage without warning. | |
| "__*" | |
| Class-private names. Names in this category, when used within the | |
| context of a class definition, are re-written to use a mangled form | |
| to help avoid name clashes between “private” attributes of base and | |
| derived classes. See section Identifiers (Names). | |
| Non-ASCII characters in names | |
| ============================= | |
| Names that contain non-ASCII characters need additional normalization | |
| and validation beyond the rules and grammar explained above. For | |
| example, "ř_1", "蛇", or "साँप" are valid names, but "r〰2", "€", or | |
| "🐍" are not. | |
| This section explains the exact rules. | |
| All names are converted into the normalization form NFKC while | |
| parsing. This means that, for example, some typographic variants of | |
| characters are converted to their “basic” form. For example, | |
| "fiⁿₐˡᵢᶻₐᵗᵢᵒₙ" normalizes to "finalization", so Python treats them as | |
| the same name: | |
| >>> fiⁿₐˡᵢᶻₐᵗᵢᵒₙ = 3 | |
| >>> finalization | |
| 3 | |
| Note: | |
| Normalization is done at the lexical level only. Run-time functions | |
| that take names as *strings* generally do not normalize their | |
| arguments. For example, the variable defined above is accessible at | |
| run time in the "globals()" dictionary as | |
| "globals()["finalization"]" but not "globals()["fiⁿₐˡᵢᶻₐᵗᵢᵒₙ"]". | |
| Similarly to how ASCII-only names must contain only letters, digits | |
| and the underscore, and cannot start with a digit, a valid name must | |
| start with a character in the “letter-like” set "xid_start", and the | |
| remaining characters must be in the “letter- and digit-like” set | |
| "xid_continue". | |
| These sets are based on the *XID_Start* and *XID_Continue* sets as | |
| defined by the Unicode standard annex UAX-31. Python’s "xid_start" | |
| additionally includes the underscore ("_"). Note that Python does not | |
| necessarily conform to UAX-31. | |
| A non-normative listing of characters in the *XID_Start* and | |
| *XID_Continue* sets as defined by Unicode is available in the | |
| DerivedCoreProperties.txt file in the Unicode Character Database. For | |
| reference, the construction rules for the "xid_*" sets are given | |
| below. | |
| The set "id_start" is defined as the union of: | |
| * Unicode category "<Lu>" - uppercase letters (includes "A" to "Z") | |
| * Unicode category "<Ll>" - lowercase letters (includes "a" to "z") | |
| * Unicode category "<Lt>" - titlecase letters | |
| * Unicode category "<Lm>" - modifier letters | |
| * Unicode category "<Lo>" - other letters | |
| * Unicode category "<Nl>" - letter numbers | |
| * {""_""} - the underscore | |
| * "<Other_ID_Start>" - an explicit set of characters in PropList.txt | |
| to support backwards compatibility | |
| The set "xid_start" then closes this set under NFKC normalization, by | |
| removing all characters whose normalization is not of the form | |
| "id_start id_continue*". | |
| The set "id_continue" is defined as the union of: | |
| * "id_start" (see above) | |
| * Unicode category "<Nd>" - decimal numbers (includes "0" to "9") | |
| * Unicode category "<Pc>" - connector punctuations | |
| * Unicode category "<Mn>" - nonspacing marks | |
| * Unicode category "<Mc>" - spacing combining marks | |
| * "<Other_ID_Continue>" - another explicit set of characters in | |
| PropList.txt to support backwards compatibility | |
| Again, "xid_continue" closes this set under NFKC normalization. | |
| Unicode categories use the version of the Unicode Character Database | |
| as included in the "unicodedata" module. | |
| See also: | |
| * **PEP 3131** – Supporting Non-ASCII Identifiers | |
| * **PEP 672** – Unicode-related Security Considerations for Python | |
| ''', | |
| 'if': r'''The "if" statement | |
| ****************** | |
| The "if" statement is used for conditional execution: | |
| if_stmt: "if" assignment_expression ":" suite | |
| ("elif" assignment_expression ":" suite)* | |
| ["else" ":" suite] | |
| It selects exactly one of the suites by evaluating the expressions one | |
| by one until one is found to be true (see section Boolean operations | |
| for the definition of true and false); then that suite is executed | |
| (and no other part of the "if" statement is executed or evaluated). | |
| If all expressions are false, the suite of the "else" clause, if | |
| present, is executed. | |
| ''', | |
| 'imaginary': r'''Imaginary literals | |
| ****************** | |
| Python has complex number objects, but no complex literals. Instead, | |
| *imaginary literals* denote complex numbers with a zero real part. | |
| For example, in math, the complex number 3+4.2*i* is written as the | |
| real number 3 added to the imaginary number 4.2*i*. Python uses a | |
| similar syntax, except the imaginary unit is written as "j" rather | |
| than *i*: | |
| 3+4.2j | |
| This is an expression composed of the integer literal "3", the | |
| operator ‘"+"’, and the imaginary literal "4.2j". Since these are | |
| three separate tokens, whitespace is allowed between them: | |
| 3 + 4.2j | |
| No whitespace is allowed *within* each token. In particular, the "j" | |
| suffix, may not be separated from the number before it. | |
| The number before the "j" has the same syntax as a floating-point | |
| literal. Thus, the following are valid imaginary literals: | |
| 4.2j | |
| 3.14j | |
| 10.j | |
| .001j | |
| 1e100j | |
| 3.14e-10j | |
| 3.14_15_93j | |
| Unlike in a floating-point literal the decimal point can be omitted if | |
| the imaginary number only has an integer part. The number is still | |
| evaluated as a floating-point number, not an integer: | |
| 10j | |
| 0j | |
| 1000000000000000000000000j # equivalent to 1e+24j | |
| The "j" suffix is case-insensitive. That means you can use "J" | |
| instead: | |
| 3.14J # equivalent to 3.14j | |
| Formally, imaginary literals are described by the following lexical | |
| definition: | |
| imagnumber: (floatnumber | digitpart) ("j" | "J") | |
| ''', | |
| 'import': r'''The "import" statement | |
| ********************** | |
| import_stmt: ["lazy"] "import" module ["as" identifier] ("," module ["as" identifier])* | |
| | ["lazy"] "from" relative_module "import" identifier ["as" identifier] | |
| ("," identifier ["as" identifier])* | |
| | ["lazy"] "from" relative_module "import" "(" identifier ["as" identifier] | |
| ("," identifier ["as" identifier])* [","] ")" | |
| | "from" relative_module "import" "*" | |
| module: (identifier ".")* identifier | |
| relative_module: "."* module | "."+ | |
| The basic import statement (no "from" clause) is executed in two | |
| steps: | |
| 1. find a module, loading and initializing it if necessary | |
| 2. define a name or names in the current namespace for the scope where | |
| the "import" statement occurs, just as an assignment statement | |
| would (including "global" and "nonlocal" semantics). | |
| When the statement contains multiple clauses (separated by commas) the | |
| two steps are carried out separately for each clause, just as though | |
| the clauses had been separated out into individual import statements. | |
| The details of the first step, finding and loading modules, are | |
| described in greater detail in the section on the import system, which | |
| also describes the various types of packages and modules that can be | |
| imported, as well as all the hooks that can be used to customize the | |
| import system. Note that failures in this step may indicate either | |
| that the module could not be located, *or* that an error occurred | |
| while initializing the module, which includes execution of the | |
| module’s code. | |
| If the requested module is retrieved successfully, it will be made | |
| available in the local namespace in one of three ways: | |
| * If the module name is followed by "as", then the name following "as" | |
| is bound directly to the imported module. | |
| * If no other name is specified, and the module being imported is a | |
| top level module, the module’s name is bound in the local namespace | |
| as a reference to the imported module | |
| * If the module being imported is *not* a top level module, then the | |
| name of the top level package that contains the module is bound in | |
| the local namespace as a reference to the top level package. The | |
| imported module must be accessed using its full qualified name | |
| rather than directly | |
| The "from" form uses a slightly more complex process: | |
| 1. find the module specified in the "from" clause, loading and | |
| initializing it if necessary; | |
| 2. for each of the identifiers specified in the "import" clauses: | |
| 1. check if the imported module has an attribute by that name | |
| 2. if not, attempt to import a submodule with that name and then | |
| check the imported module again for that attribute | |
| 3. if the attribute is not found, "ImportError" is raised. | |
| 4. otherwise, a reference to that value is stored in the current | |
| namespace, using the name in the "as" clause if it is present, | |
| otherwise using the attribute name | |
| Examples: | |
| import foo # foo imported and bound locally | |
| import foo.bar.baz # foo, foo.bar, and foo.bar.baz imported, foo bound locally | |
| import foo.bar.baz as fbb # foo, foo.bar, and foo.bar.baz imported, foo.bar.baz bound as fbb | |
| from foo.bar import baz # foo, foo.bar, and foo.bar.baz imported, foo.bar.baz bound as baz | |
| from foo import attr # foo imported and foo.attr bound as attr | |
| If the list of identifiers is replaced by a star ("'*'"), all public | |
| names defined in the module are bound in the local namespace for the | |
| scope where the "import" statement occurs. | |
| The *public names* defined by a module are determined by checking the | |
| module’s namespace for a variable named "__all__"; if defined, it must | |
| be a sequence of strings which are names defined or imported by that | |
| module. Names containing non-ASCII characters must be in the | |
| normalization form NFKC; see Non-ASCII characters in names for | |
| details. The names given in "__all__" are all considered public and | |
| are required to exist. If "__all__" is not defined, the set of public | |
| names includes all names found in the module’s namespace which do not | |
| begin with an underscore character ("'_'"). "__all__" should contain | |
| the entire public API. It is intended to avoid accidentally exporting | |
| items that are not part of the API (such as library modules which were | |
| imported and used within the module). | |
| The wild card form of import — "from module import *" — is only | |
| allowed at the module level. Attempting to use it in class or | |
| function definitions will raise a "SyntaxError". | |
| When specifying what module to import you do not have to specify the | |
| absolute name of the module. When a module or package is contained | |
| within another package it is possible to make a relative import within | |
| the same top package without having to mention the package name. By | |
| using leading dots in the specified module or package after "from" you | |
| can specify how high to traverse up the current package hierarchy | |
| without specifying exact names. One leading dot means the current | |
| package where the module making the import exists. Two dots means up | |
| one package level. Three dots is up two levels, etc. So if you execute | |
| "from . import mod" from a module in the "pkg" package then you will | |
| end up importing "pkg.mod". If you execute "from ..subpkg2 import mod" | |
| from within "pkg.subpkg1" you will import "pkg.subpkg2.mod". The | |
| specification for relative imports is contained in the Package | |
| Relative Imports section. | |
| "importlib.import_module()" is provided to support applications that | |
| determine dynamically the modules to be loaded. | |
| Raises an auditing event "import" with arguments "module", "filename", | |
| "sys.path", "sys.meta_path", "sys.path_hooks". | |
| Lazy imports | |
| ============ | |
| The "lazy" keyword is a soft keyword that only has special meaning | |
| when it appears immediately before an "import" or "from" statement. | |
| When an import statement is preceded by the "lazy" keyword, the import | |
| becomes *lazy*: the module is not loaded immediately at the import | |
| statement. Instead, a lazy proxy object is created and bound to the | |
| name. The actual module is loaded on first use of that name. | |
| Lazy imports are only permitted at module scope. Using "lazy" inside a | |
| function, class body, or "try"/"except"/"finally" block raises a | |
| "SyntaxError". Star imports cannot be lazy ("lazy from module import | |
| *" is a syntax error), and future statements cannot be lazy. | |
| When using "lazy from ... import", each imported name is bound to a | |
| lazy proxy object. The first access to any of these names triggers | |
| loading of the entire module and resolves only that specific name to | |
| its actual value. Other names remain as lazy proxies until they are | |
| accessed. | |
| Example: | |
| lazy import json | |
| import sys | |
| print('json' in sys.modules) # False - json module not yet loaded | |
| # First use triggers loading | |
| result = json.dumps({"hello": "world"}) | |
| print('json' in sys.modules) # True - now loaded | |
| If an error occurs during module loading (such as "ImportError" or | |
| "SyntaxError"), it is raised at the point where the lazy import is | |
| first used, not at the import statement itself. | |
| See **PEP 810** for the full specification of lazy imports. | |
| Added in version 3.15. | |
| Compatibility via "__lazy_modules__" | |
| ------------------------------------ | |
| As an alternative to using the "lazy" keyword, a module can opt into | |
| lazy loading for specific imports by defining a module-level | |
| "__lazy_modules__" variable. When present, it must be a container of | |
| fully qualified module name strings. Any regular (non-"lazy") | |
| "import" statement at module scope whose target appears in | |
| "__lazy_modules__" is treated as a lazy import, exactly as if the | |
| "lazy" keyword had been used. | |
| This provides a way to enable lazy loading for specific dependencies | |
| without changing individual "import" statements. This is useful when | |
| supporting Python versions older than 3.15 while using lazy imports in | |
| 3.15+: | |
| __lazy_modules__ = ["json", "pathlib"] | |
| import json # loaded lazily (name is in __lazy_modules__) | |
| import os # loaded eagerly (name not in __lazy_modules__) | |
| import pathlib # loaded lazily | |
| Relative imports are resolved to their absolute name before the | |
| lookup, so "__lazy_modules__" must always contain fully qualified | |
| module names. | |
| For "from"-style imports, the relevant name is the module following | |
| "from", not the names of its members: | |
| # In mypackage/mymodule.py | |
| __lazy_modules__ = ["mypackage", "mypackage.sub.utils"] | |
| from . import helper # loaded lazily: . resolves to mypackage | |
| from .sub.utils import func # loaded lazily: .sub.utils resolves to mypackage.sub.utils | |
| import json # loaded eagerly (not in __lazy_modules__) | |
| Imports inside functions, class bodies, or "try"/"except"/"finally" | |
| blocks are always eager, regardless of "__lazy_modules__". | |
| Added in version 3.15. | |
| Future statements | |
| ================= | |
| A *future statement* is a directive to the compiler that a particular | |
| module should be compiled using syntax or semantics that will be | |
| available in a specified future release of Python where the feature | |
| becomes standard. | |
| The future statement is intended to ease migration to future versions | |
| of Python that introduce incompatible changes to the language. It | |
| allows use of the new features on a per-module basis before the | |
| release in which the feature becomes standard. | |
| future_stmt: "from" "__future__" "import" feature ["as" identifier] | |
| ("," feature ["as" identifier])* | |
| | "from" "__future__" "import" "(" feature ["as" identifier] | |
| ("," feature ["as" identifier])* [","] ")" | |
| feature: identifier | |
| A future statement must appear near the top of the module. The only | |
| lines that can appear before a future statement are: | |
| * the module docstring (if any), | |
| * comments, | |
| * blank lines, and | |
| * other future statements. | |
| The only feature that requires using the future statement is | |
| "annotations" (see **PEP 563**). | |
| All historical features enabled by the future statement are still | |
| recognized by Python 3. The list includes "absolute_import", | |
| "division", "generators", "generator_stop", "unicode_literals", | |
| "print_function", "nested_scopes" and "with_statement". They are all | |
| redundant because they are always enabled, and only kept for backwards | |
| compatibility. | |
| A future statement is recognized and treated specially at compile | |
| time: Changes to the semantics of core constructs are often | |
| implemented by generating different code. It may even be the case | |
| that a new feature introduces new incompatible syntax (such as a new | |
| reserved word), in which case the compiler may need to parse the | |
| module differently. Such decisions cannot be pushed off until | |
| runtime. | |
| For any given release, the compiler knows which feature names have | |
| been defined, and raises a compile-time error if a future statement | |
| contains a feature not known to it. | |
| The direct runtime semantics are the same as for any import statement: | |
| there is a standard module "__future__", described later, and it will | |
| be imported in the usual way at the time the future statement is | |
| executed. | |
| The interesting runtime semantics depend on the specific feature | |
| enabled by the future statement. | |
| Note that there is nothing special about the statement: | |
| import __future__ [as name] | |
| That is not a future statement; it’s an ordinary import statement with | |
| no special semantics or syntax restrictions. | |
| Code compiled by calls to the built-in functions "exec()" and | |
| "compile()" that occur in a module "M" containing a future statement | |
| will, by default, use the new syntax or semantics associated with the | |
| future statement. This can be controlled by optional arguments to | |
| "compile()" — see the documentation of that function for details. | |
| A future statement typed at an interactive interpreter prompt will | |
| take effect for the rest of the interpreter session. If an | |
| interpreter is started with the "-i" option, is passed a script name | |
| to execute, and the script includes a future statement, it will be in | |
| effect in the interactive session started after the script is | |
| executed. | |
| See also: | |
| **PEP 236** - Back to the __future__ | |
| The original proposal for the __future__ mechanism. | |
| ''', | |
| 'in': r'''Membership test operations | |
| ************************** | |
| The operators "in" and "not in" test for membership. "x in s" | |
| evaluates to "True" if *x* is a member of *s*, and "False" otherwise. | |
| "x not in s" returns the negation of "x in s". All built-in sequences | |
| and set types support this as well as dictionary, for which "in" tests | |
| whether the dictionary has a given key. For container types such as | |
| list, tuple, set, frozenset, dict, or collections.deque, the | |
| expression "x in y" is equivalent to "any(x is e or x == e for e in | |
| y)". | |
| For the string and bytes types, "x in y" is "True" if and only if *x* | |
| is a substring of *y*. An equivalent test is "y.find(x) != -1". | |
| Empty strings are always considered to be a substring of any other | |
| string, so """ in "abc"" will return "True". | |
| For user-defined classes which define the "__contains__()" method, "x | |
| in y" returns "True" if "y.__contains__(x)" returns a true value, and | |
| "False" otherwise. | |
| For user-defined classes which do not define "__contains__()" but do | |
| define "__iter__()", "x in y" is "True" if some value "z", for which | |
| the expression "x is z or x == z" is true, is produced while iterating | |
| over "y". If an exception is raised during the iteration, it is as if | |
| "in" raised that exception. | |
| Lastly, the old-style iteration protocol is tried: if a class defines | |
| "__getitem__()", "x in y" is "True" if and only if there is a non- | |
| negative integer index *i* such that "x is y[i] or x == y[i]", and no | |
| lower integer index raises the "IndexError" exception. (If any other | |
| exception is raised, it is as if "in" raised that exception). | |
| The operator "not in" is defined to have the inverse truth value of | |
| "in". | |
| ''', | |
| 'integers': r'''Integer literals | |
| **************** | |
| Integer literals denote whole numbers. For example: | |
| 7 | |
| 3 | |
| 2147483647 | |
| There is no limit for the length of integer literals apart from what | |
| can be stored in available memory: | |
| 7922816251426433759354395033679228162514264337593543950336 | |
| Underscores can be used to group digits for enhanced readability, and | |
| are ignored for determining the numeric value of the literal. For | |
| example, the following literals are equivalent: | |
| 100_000_000_000 | |
| 100000000000 | |
| 1_00_00_00_00_000 | |
| Underscores can only occur between digits. For example, "_123", | |
| "321_", and "123__321" are *not* valid literals. | |
| Integers can be specified in binary (base 2), octal (base 8), or | |
| hexadecimal (base 16) using the prefixes "0b", "0o" and "0x", | |
| respectively. Hexadecimal digits 10 through 15 are represented by | |
| letters "A"-"F", case-insensitive. For example: | |
| 0b100110111 | |
| 0b_1110_0101 | |
| 0o177 | |
| 0o377 | |
| 0xdeadbeef | |
| 0xDead_Beef | |
| An underscore can follow the base specifier. For example, "0x_1f" is a | |
| valid literal, but "0_x1f" and "0x__1f" are not. | |
| Leading zeros in a non-zero decimal number are not allowed. For | |
| example, "0123" is not a valid literal. This is for disambiguation | |
| with C-style octal literals, which Python used before version 3.0. | |
| Formally, integer literals are described by the following lexical | |
| definitions: | |
| integer: decinteger | bininteger | octinteger | hexinteger | zerointeger | |
| decinteger: nonzerodigit (["_"] digit)* | |
| bininteger: "0" ("b" | "B") (["_"] bindigit)+ | |
| octinteger: "0" ("o" | "O") (["_"] octdigit)+ | |
| hexinteger: "0" ("x" | "X") (["_"] hexdigit)+ | |
| zerointeger: "0"+ (["_"] "0")* | |
| nonzerodigit: "1"..."9" | |
| digit: "0"..."9" | |
| bindigit: "0" | "1" | |
| octdigit: "0"..."7" | |
| hexdigit: digit | "a"..."f" | "A"..."F" | |
| Changed in version 3.6: Underscores are now allowed for grouping | |
| purposes in literals. | |
| ''', | |
| 'lambda': r'''Lambdas | |
| ******* | |
| lambda_expr: "lambda" [parameter_list] ":" expression | |
| Lambda expressions (sometimes called lambda forms) are used to create | |
| anonymous functions. The expression "lambda parameters: expression" | |
| yields a function object. The unnamed object behaves like a function | |
| object defined with: | |
| def <lambda>(parameters): | |
| return expression | |
| See section Function definitions for the syntax of parameter lists. | |
| Note that functions created with lambda expressions cannot contain | |
| statements or annotations. | |
| ''', | |
| 'lazy': r'''Lazy imports | |
| ************ | |
| The "lazy" keyword is a soft keyword that only has special meaning | |
| when it appears immediately before an "import" or "from" statement. | |
| When an import statement is preceded by the "lazy" keyword, the import | |
| becomes *lazy*: the module is not loaded immediately at the import | |
| statement. Instead, a lazy proxy object is created and bound to the | |
| name. The actual module is loaded on first use of that name. | |
| Lazy imports are only permitted at module scope. Using "lazy" inside a | |
| function, class body, or "try"/"except"/"finally" block raises a | |
| "SyntaxError". Star imports cannot be lazy ("lazy from module import | |
| *" is a syntax error), and future statements cannot be lazy. | |
| When using "lazy from ... import", each imported name is bound to a | |
| lazy proxy object. The first access to any of these names triggers | |
| loading of the entire module and resolves only that specific name to | |
| its actual value. Other names remain as lazy proxies until they are | |
| accessed. | |
| Example: | |
| lazy import json | |
| import sys | |
| print('json' in sys.modules) # False - json module not yet loaded | |
| # First use triggers loading | |
| result = json.dumps({"hello": "world"}) | |
| print('json' in sys.modules) # True - now loaded | |
| If an error occurs during module loading (such as "ImportError" or | |
| "SyntaxError"), it is raised at the point where the lazy import is | |
| first used, not at the import statement itself. | |
| See **PEP 810** for the full specification of lazy imports. | |
| Added in version 3.15. | |
| Compatibility via "__lazy_modules__" | |
| ==================================== | |
| As an alternative to using the "lazy" keyword, a module can opt into | |
| lazy loading for specific imports by defining a module-level | |
| "__lazy_modules__" variable. When present, it must be a container of | |
| fully qualified module name strings. Any regular (non-"lazy") | |
| "import" statement at module scope whose target appears in | |
| "__lazy_modules__" is treated as a lazy import, exactly as if the | |
| "lazy" keyword had been used. | |
| This provides a way to enable lazy loading for specific dependencies | |
| without changing individual "import" statements. This is useful when | |
| supporting Python versions older than 3.15 while using lazy imports in | |
| 3.15+: | |
| __lazy_modules__ = ["json", "pathlib"] | |
| import json # loaded lazily (name is in __lazy_modules__) | |
| import os # loaded eagerly (name not in __lazy_modules__) | |
| import pathlib # loaded lazily | |
| Relative imports are resolved to their absolute name before the | |
| lookup, so "__lazy_modules__" must always contain fully qualified | |
| module names. | |
| For "from"-style imports, the relevant name is the module following | |
| "from", not the names of its members: | |
| # In mypackage/mymodule.py | |
| __lazy_modules__ = ["mypackage", "mypackage.sub.utils"] | |
| from . import helper # loaded lazily: . resolves to mypackage | |
| from .sub.utils import func # loaded lazily: .sub.utils resolves to mypackage.sub.utils | |
| import json # loaded eagerly (not in __lazy_modules__) | |
| Imports inside functions, class bodies, or "try"/"except"/"finally" | |
| blocks are always eager, regardless of "__lazy_modules__". | |
| Added in version 3.15. | |
| ''', | |
| 'lists': r'''List displays | |
| ************* | |
| A *list display* is a possibly empty series of expressions enclosed in | |
| square brackets. For example: | |
| >>> ["one", "two", "three"] | |
| ['one', 'two', 'three'] | |
| >>> ["one"] # One-element list | |
| ['one'] | |
| >>> [] # empty list | |
| [] | |
| See Container displays for general information on displays. | |
| The formal grammar for list displays is: | |
| list: '[' [flexible_expression_list] ']' | |
| ''', | |
| 'match': r'''The "match" statement | |
| ********************* | |
| Added in version 3.10. | |
| The match statement is used for pattern matching. Syntax: | |
| match_stmt: 'match' subject_expr ":" NEWLINE INDENT case_block+ DEDENT | |
| subject_expr: flexible_expression "," [flexible_expression_list [',']] | |
| | assignment_expression | |
| case_block: 'case' patterns [guard] ":" suite | |
| Note: | |
| This section uses single quotes to denote soft keywords. | |
| Pattern matching takes a pattern as input (following "case") and a | |
| subject value (following "match"). The pattern (which may contain | |
| subpatterns) is matched against the subject value. The outcomes are: | |
| * A match success or failure (also termed a pattern success or | |
| failure). | |
| * Possible binding of matched values to a name. The prerequisites for | |
| this are further discussed below. | |
| The "match" and "case" keywords are soft keywords. | |
| See also: | |
| * **PEP 634** – Structural Pattern Matching: Specification | |
| * **PEP 636** – Structural Pattern Matching: Tutorial | |
| Overview | |
| ======== | |
| Here’s an overview of the logical flow of a match statement: | |
| 1. The subject expression "subject_expr" is evaluated and a resulting | |
| subject value obtained. If the subject expression contains a comma, | |
| a tuple is constructed using the standard rules. | |
| 2. Each pattern in a "case_block" is attempted to match with the | |
| subject value. The specific rules for success or failure are | |
| described below. The match attempt can also bind some or all of the | |
| standalone names within the pattern. The precise pattern binding | |
| rules vary per pattern type and are specified below. **Name | |
| bindings made during a successful pattern match outlive the | |
| executed block and can be used after the match statement**. | |
| Note: | |
| During failed pattern matches, some subpatterns may succeed. Do | |
| not rely on bindings being made for a failed match. Conversely, | |
| do not rely on variables remaining unchanged after a failed | |
| match. The exact behavior is dependent on implementation and may | |
| vary. This is an intentional decision made to allow different | |
| implementations to add optimizations. | |
| 3. If the pattern succeeds, the corresponding guard (if present) is | |
| evaluated. In this case all name bindings are guaranteed to have | |
| happened. | |
| * If the guard evaluates as true or is missing, the "block" inside | |
| "case_block" is executed. | |
| * Otherwise, the next "case_block" is attempted as described above. | |
| * If there are no further case blocks, the match statement is | |
| completed. | |
| Note: | |
| Users should generally never rely on a pattern being evaluated. | |
| Depending on implementation, the interpreter may cache values or use | |
| other optimizations which skip repeated evaluations. | |
| A sample match statement: | |
| >>> flag = False | |
| >>> match (100, 200): | |
| ... case (100, 300): # Mismatch: 200 != 300 | |
| ... print('Case 1') | |
| ... case (100, 200) if flag: # Successful match, but guard fails | |
| ... print('Case 2') | |
| ... case (100, y): # Matches and binds y to 200 | |
| ... print(f'Case 3, y: {y}') | |
| ... case _: # Pattern not attempted | |
| ... print('Case 4, I match anything!') | |
| ... | |
| Case 3, y: 200 | |
| In this case, "if flag" is a guard. Read more about that in the next | |
| section. | |
| Guards | |
| ====== | |
| guard: "if" assignment_expression | |
| A "guard" (which is part of the "case") must succeed for code inside | |
| the "case" block to execute. It takes the form: "if" followed by an | |
| expression. | |
| The logical flow of a "case" block with a "guard" follows: | |
| 1. Check that the pattern in the "case" block succeeded. If the | |
| pattern failed, the "guard" is not evaluated and the next "case" | |
| block is checked. | |
| 2. If the pattern succeeded, evaluate the "guard". | |
| * If the "guard" condition evaluates as true, the case block is | |
| selected. | |
| * If the "guard" condition evaluates as false, the case block is | |
| not selected. | |
| * If the "guard" raises an exception during evaluation, the | |
| exception bubbles up. | |
| Guards are allowed to have side effects as they are expressions. | |
| Guard evaluation must proceed from the first to the last case block, | |
| one at a time, skipping case blocks whose pattern(s) don’t all | |
| succeed. (I.e., guard evaluation must happen in order.) Guard | |
| evaluation must stop once a case block is selected. | |
| Irrefutable Case Blocks | |
| ======================= | |
| An irrefutable case block is a match-all case block. A match | |
| statement may have at most one irrefutable case block, and it must be | |
| last. | |
| A case block is considered irrefutable if it has no guard and its | |
| pattern is irrefutable. A pattern is considered irrefutable if we can | |
| prove from its syntax alone that it will always succeed. Only the | |
| following patterns are irrefutable: | |
| * AS Patterns whose left-hand side is irrefutable | |
| * OR Patterns containing at least one irrefutable pattern | |
| * Capture Patterns | |
| * Wildcard Patterns | |
| * parenthesized irrefutable patterns | |
| Patterns | |
| ======== | |
| Note: | |
| This section uses grammar notations beyond standard EBNF: | |
| * the notation "SEP.RULE+" is shorthand for "RULE (SEP RULE)*" | |
| * the notation "!RULE" is shorthand for a negative lookahead | |
| assertion | |
| The top-level syntax for "patterns" is: | |
| patterns: open_sequence_pattern | pattern | |
| pattern: as_pattern | or_pattern | |
| closed_pattern: | literal_pattern | |
| | capture_pattern | |
| | wildcard_pattern | |
| | value_pattern | |
| | group_pattern | |
| | sequence_pattern | |
| | mapping_pattern | |
| | class_pattern | |
| The descriptions below will include a description “in simple terms” of | |
| what a pattern does for illustration purposes (credits to Raymond | |
| Hettinger for a document that inspired most of the descriptions). Note | |
| that these descriptions are purely for illustration purposes and **may | |
| not** reflect the underlying implementation. Furthermore, they do not | |
| cover all valid forms. | |
| OR Patterns | |
| ----------- | |
| An OR pattern is two or more patterns separated by vertical bars "|". | |
| Syntax: | |
| or_pattern: "|".closed_pattern+ | |
| Only the final subpattern may be irrefutable, and each subpattern must | |
| bind the same set of names to avoid ambiguity. | |
| An OR pattern matches each of its subpatterns in turn to the subject | |
| value, until one succeeds. The OR pattern is then considered | |
| successful. Otherwise, if none of the subpatterns succeed, the OR | |
| pattern fails. | |
| In simple terms, "P1 | P2 | ..." will try to match "P1", if it fails | |
| it will try to match "P2", succeeding immediately if any succeeds, | |
| failing otherwise. | |
| AS Patterns | |
| ----------- | |
| An AS pattern matches an OR pattern on the left of the "as" keyword | |
| against a subject. Syntax: | |
| as_pattern: or_pattern "as" capture_pattern | |
| If the OR pattern fails, the AS pattern fails. Otherwise, the AS | |
| pattern binds the subject to the name on the right of the as keyword | |
| and succeeds. "capture_pattern" cannot be a "_". | |
| In simple terms "P as NAME" will match with "P", and on success it | |
| will set "NAME = <subject>". | |
| Literal Patterns | |
| ---------------- | |
| A literal pattern corresponds to most literals in Python. Syntax: | |
| literal_pattern: signed_number | |
| | signed_number "+" NUMBER | |
| | signed_number "-" NUMBER | |
| | strings | |
| | "None" | |
| | "True" | |
| | "False" | |
| signed_number: ["+" | "-"] NUMBER | |
| The rule "strings" and the token "NUMBER" are defined in the standard | |
| Python grammar. Triple-quoted strings are supported. Raw strings and | |
| byte strings are supported. f-strings and t-strings are not | |
| supported. | |
| The forms "signed_number '+' NUMBER" and "signed_number '-' NUMBER" | |
| are for expressing complex numbers; they require a real number on the | |
| left and an imaginary number on the right. E.g. "3 + 4j". | |
| In simple terms, "LITERAL" will succeed only if "<subject> == | |
| LITERAL". For the singletons "None", "True" and "False", the "is" | |
| operator is used. | |
| Capture Patterns | |
| ---------------- | |
| A capture pattern binds the subject value to a name. Syntax: | |
| capture_pattern: !'_' NAME | |
| A single underscore "_" is not a capture pattern (this is what "!'_'" | |
| expresses). It is instead treated as a "wildcard_pattern". | |
| In a given pattern, a given name can only be bound once. E.g. "case | |
| x, x: ..." is invalid while "case [x] | x: ..." is allowed. | |
| Capture patterns always succeed. The binding follows scoping rules | |
| established by the assignment expression operator in **PEP 572**; the | |
| name becomes a local variable in the closest containing function scope | |
| unless there’s an applicable "global" or "nonlocal" statement. | |
| In simple terms "NAME" will always succeed and it will set "NAME = | |
| <subject>". | |
| Wildcard Patterns | |
| ----------------- | |
| A wildcard pattern always succeeds (matches anything) and binds no | |
| name. Syntax: | |
| wildcard_pattern: '_' | |
| "_" is a soft keyword within any pattern, but only within patterns. | |
| It is an identifier, as usual, even within "match" subject | |
| expressions, "guard"s, and "case" blocks. | |
| In simple terms, "_" will always succeed. | |
| Value Patterns | |
| -------------- | |
| A value pattern represents a named value in Python. Syntax: | |
| value_pattern: attr | |
| attr: name_or_attr "." NAME | |
| name_or_attr: attr | NAME | |
| The dotted name in the pattern is looked up using standard Python name | |
| resolution rules. The pattern succeeds if the value found compares | |
| equal to the subject value (using the "==" equality operator). | |
| In simple terms "NAME1.NAME2" will succeed only if "<subject> == | |
| NAME1.NAME2" | |
| Note: | |
| If the same value occurs multiple times in the same match statement, | |
| the interpreter may cache the first value found and reuse it rather | |
| than repeat the same lookup. This cache is strictly tied to a given | |
| execution of a given match statement. | |
| Group Patterns | |
| -------------- | |
| A group pattern allows users to add parentheses around patterns to | |
| emphasize the intended grouping. Otherwise, it has no additional | |
| syntax. Syntax: | |
| group_pattern: "(" pattern ")" | |
| In simple terms "(P)" has the same effect as "P". | |
| Sequence Patterns | |
| ----------------- | |
| A sequence pattern contains several subpatterns to be matched against | |
| sequence elements. The syntax is similar to the unpacking of a list or | |
| tuple. | |
| sequence_pattern: "[" [maybe_sequence_pattern] "]" | |
| | "(" [open_sequence_pattern] ")" | |
| open_sequence_pattern: maybe_star_pattern "," [maybe_sequence_pattern] | |
| maybe_sequence_pattern: ",".maybe_star_pattern+ ","? | |
| maybe_star_pattern: star_pattern | pattern | |
| star_pattern: "*" (capture_pattern | wildcard_pattern) | |
| There is no difference if parentheses or square brackets are used for | |
| sequence patterns (i.e. "(...)" vs "[...]" ). | |
| Note: | |
| A single pattern enclosed in parentheses without a trailing comma | |
| (e.g. "(3 | 4)") is a group pattern. While a single pattern enclosed | |
| in square brackets (e.g. "[3 | 4]") is still a sequence pattern. | |
| At most one star subpattern may be in a sequence pattern. The star | |
| subpattern may occur in any position. If no star subpattern is | |
| present, the sequence pattern is a fixed-length sequence pattern; | |
| otherwise it is a variable-length sequence pattern. | |
| The following is the logical flow for matching a sequence pattern | |
| against a subject value: | |
| 1. If the subject value is not a sequence [2], the sequence pattern | |
| fails. | |
| 2. If the subject value is an instance of "str", "bytes" or | |
| "bytearray" the sequence pattern fails. | |
| 3. The subsequent steps depend on whether the sequence pattern is | |
| fixed or variable-length. | |
| If the sequence pattern is fixed-length: | |
| 1. If the length of the subject sequence is not equal to the number | |
| of subpatterns, the sequence pattern fails | |
| 2. Subpatterns in the sequence pattern are matched to their | |
| corresponding items in the subject sequence from left to right. | |
| Matching stops as soon as a subpattern fails. If all | |
| subpatterns succeed in matching their corresponding item, the | |
| sequence pattern succeeds. | |
| Otherwise, if the sequence pattern is variable-length: | |
| 1. If the length of the subject sequence is less than the number of | |
| non-star subpatterns, the sequence pattern fails. | |
| 2. The leading non-star subpatterns are matched to their | |
| corresponding items as for fixed-length sequences. | |
| 3. If the previous step succeeds, the star subpattern matches a | |
| list formed of the remaining subject items, excluding the | |
| remaining items corresponding to non-star subpatterns following | |
| the star subpattern. | |
| 4. Remaining non-star subpatterns are matched to their | |
| corresponding subject items, as for a fixed-length sequence. | |
| Note: | |
| The length of the subject sequence is obtained via "len()" (i.e. | |
| via the "__len__()" protocol). This length may be cached by the | |
| interpreter in a similar manner as value patterns. | |
| In simple terms "[P1, P2, P3," … ", P<N>]" matches only if all the | |
| following happens: | |
| * check "<subject>" is a sequence | |
| * "len(subject) == <N>" | |
| * "P1" matches "<subject>[0]" (note that this match can also bind | |
| names) | |
| * "P2" matches "<subject>[1]" (note that this match can also bind | |
| names) | |
| * … and so on for the corresponding pattern/element. | |
| Mapping Patterns | |
| ---------------- | |
| A mapping pattern contains one or more key-value patterns. The syntax | |
| is similar to the construction of a dictionary. Syntax: | |
| mapping_pattern: "{" [items_pattern] "}" | |
| items_pattern: ",".key_value_pattern+ ","? | |
| key_value_pattern: (literal_pattern | value_pattern) ":" pattern | |
| | double_star_pattern | |
| double_star_pattern: "**" capture_pattern | |
| At most one double star pattern may be in a mapping pattern. The | |
| double star pattern must be the last subpattern in the mapping | |
| pattern. | |
| Duplicate keys in mapping patterns are disallowed. Duplicate literal | |
| keys will raise a "SyntaxError". Two keys that otherwise have the same | |
| value will raise a "ValueError" at runtime. | |
| The following is the logical flow for matching a mapping pattern | |
| against a subject value: | |
| 1. If the subject value is not a mapping [3],the mapping pattern | |
| fails. | |
| 2. If every key given in the mapping pattern is present in the subject | |
| mapping, and the pattern for each key matches the corresponding | |
| item of the subject mapping, the mapping pattern succeeds. | |
| 3. If duplicate keys are detected in the mapping pattern, the pattern | |
| is considered invalid. A "SyntaxError" is raised for duplicate | |
| literal values; or a "ValueError" for named keys of the same value. | |
| Note: | |
| Key-value pairs are matched using the two-argument form of the | |
| mapping subject’s "get()" method. Matched key-value pairs must | |
| already be present in the mapping, and not created on-the-fly via | |
| "__missing__()" or "__getitem__()". | |
| In simple terms "{KEY1: P1, KEY2: P2, ... }" matches only if all the | |
| following happens: | |
| * check "<subject>" is a mapping | |
| * "KEY1 in <subject>" | |
| * "P1" matches "<subject>[KEY1]" | |
| * … and so on for the corresponding KEY/pattern pair. | |
| Class Patterns | |
| -------------- | |
| A class pattern represents a class and its positional and keyword | |
| arguments (if any). Syntax: | |
| class_pattern: name_or_attr "(" [pattern_arguments ","?] ")" | |
| pattern_arguments: positional_patterns ["," keyword_patterns] | |
| | keyword_patterns | |
| positional_patterns: ",".pattern+ | |
| keyword_patterns: ",".keyword_pattern+ | |
| keyword_pattern: NAME "=" pattern | |
| The same keyword should not be repeated in class patterns. | |
| The following is the logical flow for matching a class pattern against | |
| a subject value: | |
| 1. If "name_or_attr" is not an instance of the builtin "type" , raise | |
| "TypeError". | |
| 2. If the subject value is not an instance of "name_or_attr" (tested | |
| via "isinstance()"), the class pattern fails. | |
| 3. If no pattern arguments are present, the pattern succeeds. | |
| Otherwise, the subsequent steps depend on whether keyword or | |
| positional argument patterns are present. | |
| For a number of built-in types (specified below), a single | |
| positional subpattern is accepted which will match the entire | |
| subject; for these types keyword patterns also work as for other | |
| types. | |
| If only keyword patterns are present, they are processed as | |
| follows, one by one: | |
| 1. The keyword is looked up as an attribute on the subject. | |
| * If this raises an exception other than "AttributeError", the | |
| exception bubbles up. | |
| * If this raises "AttributeError", the class pattern has failed. | |
| * Else, the subpattern associated with the keyword pattern is | |
| matched against the subject’s attribute value. If this fails, | |
| the class pattern fails; if this succeeds, the match proceeds | |
| to the next keyword. | |
| 2. If all keyword patterns succeed, the class pattern succeeds. | |
| If any positional patterns are present, they are converted to | |
| keyword patterns using the "__match_args__" attribute on the class | |
| "name_or_attr" before matching: | |
| 1. The equivalent of "getattr(cls, "__match_args__", ())" is | |
| called. | |
| * If this raises an exception, the exception bubbles up. | |
| * If the returned value is not a tuple, the conversion fails and | |
| "TypeError" is raised. | |
| * If there are more positional patterns than | |
| "len(cls.__match_args__)", "TypeError" is raised. | |
| * Otherwise, positional pattern "i" is converted to a keyword | |
| pattern using "__match_args__[i]" as the keyword. | |
| "__match_args__[i]" must be a string; if not "TypeError" is | |
| raised. | |
| * If there are duplicate keywords, "TypeError" is raised. | |
| See also: | |
| Customizing positional arguments in class pattern matching | |
| 2. Once all positional patterns have been converted to keyword | |
| patterns, the match proceeds as if there were only keyword | |
| patterns. | |
| For the following built-in types the handling of positional | |
| subpatterns is different: | |
| * "bool" | |
| * "bytearray" | |
| * "bytes" | |
| * "dict" | |
| * "float" | |
| * "frozendict" | |
| * "frozenset" | |
| * "int" | |
| * "list" | |
| * "set" | |
| * "str" | |
| * "tuple" | |
| These classes accept a single positional argument, and the pattern | |
| there is matched against the whole object rather than an attribute. | |
| For example "int(0|1)" matches the value "0", but not the value | |
| "0.0". | |
| In simple terms "CLS(P1, attr=P2)" matches only if the following | |
| happens: | |
| * "isinstance(<subject>, CLS)" | |
| * convert "P1" to a keyword pattern using "CLS.__match_args__" | |
| * For each keyword argument "attr=P2": | |
| * "hasattr(<subject>, "attr")" | |
| * "P2" matches "<subject>.attr" | |
| * … and so on for the corresponding keyword argument/pattern pair. | |
| See also: | |
| * **PEP 634** – Structural Pattern Matching: Specification | |
| * **PEP 636** – Structural Pattern Matching: Tutorial | |
| ''', | |
| 'naming': r'''Naming and binding | |
| ****************** | |
| Binding of names | |
| ================ | |
| *Names* refer to objects. Names are introduced by name binding | |
| operations. | |
| The following constructs bind names: | |
| * formal parameters to functions, | |
| * class definitions, | |
| * function definitions, | |
| * assignment expressions, | |
| * targets that are identifiers if occurring in an assignment: | |
| * "for" loop header, | |
| * after "as" in a "with" statement, "except" clause, "except*" | |
| clause, or in the as-pattern in structural pattern matching, | |
| * in a capture pattern in structural pattern matching | |
| * "import" statements. | |
| * "type" statements. | |
| * type parameter lists. | |
| The "import" statement of the form "from ... import *" binds all names | |
| defined in the imported module, except those beginning with an | |
| underscore. This form may only be used at the module level. | |
| A target occurring in a "del" statement is also considered bound for | |
| this purpose (though the actual semantics are to unbind the name). | |
| Each assignment or import statement occurs within a block defined by a | |
| class or function definition or at the module level (the top-level | |
| code block). | |
| If a name is bound in a block, it is a local variable of that block, | |
| unless declared as "nonlocal" or "global". If a name is bound at the | |
| module level, it is a global variable. (The variables of the module | |
| code block are local and global.) If a variable is used in a code | |
| block but not defined there, it is a *free variable*. | |
| Each occurrence of a name in the program text refers to the *binding* | |
| of that name established by the following name resolution rules. | |
| Resolution of names | |
| =================== | |
| A *scope* defines the visibility of a name within a block. If a local | |
| variable is defined in a block, its scope includes that block. If the | |
| definition occurs in a function block, the scope extends to any blocks | |
| contained within the defining one, unless a contained block introduces | |
| a different binding for the name. | |
| When a name is used in a code block, it is resolved using the nearest | |
| enclosing scope. The set of all such scopes visible to a code block | |
| is called the block’s *environment*. | |
| When a name is not found at all, a "NameError" exception is raised. If | |
| the current scope is a function scope, and the name refers to a local | |
| variable that has not yet been bound to a value at the point where the | |
| name is used, an "UnboundLocalError" exception is raised. | |
| "UnboundLocalError" is a subclass of "NameError". | |
| If a name binding operation occurs anywhere within a code block, all | |
| uses of the name within the block are treated as references to the | |
| current block. This can lead to errors when a name is used within a | |
| block before it is bound. This rule is subtle. Python lacks | |
| declarations and allows name binding operations to occur anywhere | |
| within a code block. The local variables of a code block can be | |
| determined by scanning the entire text of the block for name binding | |
| operations. See the FAQ entry on UnboundLocalError for examples. | |
| If the "global" statement occurs within a block, all uses of the names | |
| specified in the statement refer to the bindings of those names in the | |
| top-level namespace. Names are resolved in the top-level namespace by | |
| searching the global namespace, i.e. the namespace of the module | |
| containing the code block, and the builtins namespace, the namespace | |
| of the module "builtins". The global namespace is searched first. If | |
| the names are not found there, the builtins namespace is searched | |
| next. If the names are also not found in the builtins namespace, new | |
| variables are created in the global namespace. The global statement | |
| must precede all uses of the listed names. | |
| The "global" statement has the same scope as a name binding operation | |
| in the same block. If the nearest enclosing scope for a free variable | |
| contains a global statement, the free variable is treated as a global. | |
| The "nonlocal" statement causes corresponding names to refer to | |
| previously bound variables in the nearest enclosing function scope. | |
| "SyntaxError" is raised at compile time if the given name does not | |
| exist in any enclosing function scope. Type parameters cannot be | |
| rebound with the "nonlocal" statement. | |
| The namespace for a module is automatically created the first time a | |
| module is imported. The main module for a script is always called | |
| "__main__". | |
| Class definition blocks and arguments to "exec()" and "eval()" are | |
| special in the context of name resolution. A class definition is an | |
| executable statement that may use and define names. These references | |
| follow the normal rules for name resolution with an exception that | |
| unbound local variables are looked up in the global namespace. The | |
| namespace of the class definition becomes the attribute dictionary of | |
| the class. The scope of names defined in a class block is limited to | |
| the class block; it does not extend to the code blocks of methods. | |
| This includes comprehensions and generator expressions, but it does | |
| not include annotation scopes, which have access to their enclosing | |
| class scopes. This means that the following will fail: | |
| class A: | |
| a = 42 | |
| b = list(a + i for i in range(10)) | |
| However, the following will succeed: | |
| class A: | |
| type Alias = Nested | |
| class Nested: pass | |
| print(A.Alias.__value__) # <type 'A.Nested'> | |
| Annotation scopes | |
| ================= | |
| *Annotations*, type parameter lists and "type" statements introduce | |
| *annotation scopes*, which behave mostly like function scopes, but | |
| with some exceptions discussed below. | |
| Annotation scopes are used in the following contexts: | |
| * *Function annotations*. | |
| * *Variable annotations*. | |
| * Type parameter lists for generic type aliases. | |
| * Type parameter lists for generic functions. A generic function’s | |
| annotations are executed within the annotation scope, but its | |
| defaults and decorators are not. | |
| * Type parameter lists for generic classes. A generic class’s base | |
| classes and keyword arguments are executed within the annotation | |
| scope, but its decorators are not. | |
| * The bounds, constraints, and default values for type parameters | |
| (lazily evaluated). | |
| * The value of type aliases (lazily evaluated). | |
| Annotation scopes differ from function scopes in the following ways: | |
| * Annotation scopes have access to their enclosing class namespace. If | |
| an annotation scope is immediately within a class scope, or within | |
| another annotation scope that is immediately within a class scope, | |
| the code in the annotation scope can use names defined in the class | |
| scope as if it were executed directly within the class body. This | |
| contrasts with regular functions defined within classes, which | |
| cannot access names defined in the class scope. | |
| * Expressions in annotation scopes cannot contain "yield", "yield | |
| from", "await", or ":=" expressions. (These expressions are allowed | |
| in other scopes contained within the annotation scope.) | |
| * Names defined in annotation scopes cannot be rebound with "nonlocal" | |
| statements in inner scopes. This includes only type parameters, as | |
| no other syntactic elements that can appear within annotation scopes | |
| can introduce new names. | |
| * While annotation scopes have an internal name, that name is not | |
| reflected in the *qualified name* of objects defined within the | |
| scope. Instead, the "__qualname__" of such objects is as if the | |
| object were defined in the enclosing scope. | |
| Added in version 3.12: Annotation scopes were introduced in Python | |
| 3.12 as part of **PEP 695**. | |
| Changed in version 3.13: Annotation scopes are also used for type | |
| parameter defaults, as introduced by **PEP 696**. | |
| Changed in version 3.14: Annotation scopes are now also used for | |
| annotations, as specified in **PEP 649** and **PEP 749**. | |
| Lazy evaluation | |
| =============== | |
| Most annotation scopes are *lazily evaluated*. This includes | |
| annotations, the values of type aliases created through the "type" | |
| statement, and the bounds, constraints, and default values of type | |
| variables created through the type parameter syntax. This means that | |
| they are not evaluated when the type alias or type variable is | |
| created, or when the object carrying annotations is created. Instead, | |
| they are only evaluated when necessary, for example when the | |
| "__value__" attribute on a type alias is accessed. | |
| Example: | |
| >>> type Alias = 1/0 | |
| >>> Alias.__value__ | |
| Traceback (most recent call last): | |
| ... | |
| ZeroDivisionError: division by zero | |
| >>> def func[T: 1/0](): pass | |
| >>> T = func.__type_params__[0] | |
| >>> T.__bound__ | |
| Traceback (most recent call last): | |
| ... | |
| ZeroDivisionError: division by zero | |
| Here the exception is raised only when the "__value__" attribute of | |
| the type alias or the "__bound__" attribute of the type variable is | |
| accessed. | |
| This behavior is primarily useful for references to types that have | |
| not yet been defined when the type alias or type variable is created. | |
| For example, lazy evaluation enables creation of mutually recursive | |
| type aliases: | |
| from typing import Literal | |
| type SimpleExpr = int | Parenthesized | |
| type Parenthesized = tuple[Literal["("], Expr, Literal[")"]] | |
| type Expr = SimpleExpr | tuple[SimpleExpr, Literal["+", "-"], Expr] | |
| Lazily evaluated values are evaluated in annotation scope, which means | |
| that names that appear inside the lazily evaluated value are looked up | |
| as if they were used in the immediately enclosing scope. | |
| Added in version 3.12. | |
| Builtins and restricted execution | |
| ================================= | |
| **CPython implementation detail:** Users should not touch | |
| "__builtins__"; it is strictly an implementation detail. Users | |
| wanting to override values in the builtins namespace should "import" | |
| the "builtins" module and modify its attributes appropriately. | |
| The builtins namespace associated with the execution of a code block | |
| is actually found by looking up the name "__builtins__" in its global | |
| namespace; this should be a dictionary or a module (in the latter case | |
| the module’s dictionary is used). By default, when in the "__main__" | |
| module, "__builtins__" is the built-in module "builtins"; when in any | |
| other module, "__builtins__" is an alias for the dictionary of the | |
| "builtins" module itself. | |
| Interaction with dynamic features | |
| ================================= | |
| Name resolution of free variables occurs at runtime, not at compile | |
| time. This means that the following code will print 42: | |
| i = 10 | |
| def f(): | |
| print(i) | |
| i = 42 | |
| f() | |
| The "eval()" and "exec()" functions do not have access to the full | |
| environment for resolving names. Names may be resolved in the local | |
| and global namespaces of the caller. Free variables are not resolved | |
| in the nearest enclosing namespace, but in the global namespace. [1] | |
| The "exec()" and "eval()" functions have optional arguments to | |
| override the global and local namespace. If only one namespace is | |
| specified, it is used for both. | |
| ''', | |
| 'nonlocal': r'''The "nonlocal" statement | |
| ************************ | |
| nonlocal_stmt: "nonlocal" identifier ("," identifier)* | |
| When the definition of a function or class is nested (enclosed) within | |
| the definitions of other functions, its nonlocal scopes are the local | |
| scopes of the enclosing functions. The "nonlocal" statement causes the | |
| listed identifiers to refer to names previously bound in nonlocal | |
| scopes. It allows encapsulated code to rebind such nonlocal | |
| identifiers. If a name is bound in more than one nonlocal scope, the | |
| nearest binding is used. If a name is not bound in any nonlocal scope, | |
| or if there is no nonlocal scope, a "SyntaxError" is raised. | |
| The "nonlocal" statement applies to the entire scope of a function or | |
| class body. A "SyntaxError" is raised if a variable is used or | |
| assigned to prior to its nonlocal declaration in the scope. | |
| See also: | |
| **PEP 3104** - Access to Names in Outer Scopes | |
| The specification for the "nonlocal" statement. | |
| **Programmer’s note:** "nonlocal" is a directive to the parser and | |
| applies only to code parsed along with it. See the note for the | |
| "global" statement. | |
| ''', | |
| 'numbers': r'''Numeric literals | |
| **************** | |
| "NUMBER" tokens represent numeric literals, of which there are three | |
| types: integers, floating-point numbers, and imaginary numbers. | |
| NUMBER: integer | floatnumber | imagnumber | |
| The numeric value of a numeric literal is the same as if it were | |
| passed as a string to the "int", "float" or "complex" class | |
| constructor, respectively. Note that not all valid inputs for those | |
| constructors are also valid literals. | |
| Numeric literals do not include a sign; a phrase like "-1" is actually | |
| an expression composed of the unary operator ‘"-"’ and the literal | |
| "1". | |
| Integer literals | |
| ================ | |
| Integer literals denote whole numbers. For example: | |
| 7 | |
| 3 | |
| 2147483647 | |
| There is no limit for the length of integer literals apart from what | |
| can be stored in available memory: | |
| 7922816251426433759354395033679228162514264337593543950336 | |
| Underscores can be used to group digits for enhanced readability, and | |
| are ignored for determining the numeric value of the literal. For | |
| example, the following literals are equivalent: | |
| 100_000_000_000 | |
| 100000000000 | |
| 1_00_00_00_00_000 | |
| Underscores can only occur between digits. For example, "_123", | |
| "321_", and "123__321" are *not* valid literals. | |
| Integers can be specified in binary (base 2), octal (base 8), or | |
| hexadecimal (base 16) using the prefixes "0b", "0o" and "0x", | |
| respectively. Hexadecimal digits 10 through 15 are represented by | |
| letters "A"-"F", case-insensitive. For example: | |
| 0b100110111 | |
| 0b_1110_0101 | |
| 0o177 | |
| 0o377 | |
| 0xdeadbeef | |
| 0xDead_Beef | |
| An underscore can follow the base specifier. For example, "0x_1f" is a | |
| valid literal, but "0_x1f" and "0x__1f" are not. | |
| Leading zeros in a non-zero decimal number are not allowed. For | |
| example, "0123" is not a valid literal. This is for disambiguation | |
| with C-style octal literals, which Python used before version 3.0. | |
| Formally, integer literals are described by the following lexical | |
| definitions: | |
| integer: decinteger | bininteger | octinteger | hexinteger | zerointeger | |
| decinteger: nonzerodigit (["_"] digit)* | |
| bininteger: "0" ("b" | "B") (["_"] bindigit)+ | |
| octinteger: "0" ("o" | "O") (["_"] octdigit)+ | |
| hexinteger: "0" ("x" | "X") (["_"] hexdigit)+ | |
| zerointeger: "0"+ (["_"] "0")* | |
| nonzerodigit: "1"..."9" | |
| digit: "0"..."9" | |
| bindigit: "0" | "1" | |
| octdigit: "0"..."7" | |
| hexdigit: digit | "a"..."f" | "A"..."F" | |
| Changed in version 3.6: Underscores are now allowed for grouping | |
| purposes in literals. | |
| Floating-point literals | |
| ======================= | |
| Floating-point (float) literals, such as "3.14" or "1.5", denote | |
| approximations of real numbers. | |
| They consist of *integer* and *fraction* parts, each composed of | |
| decimal digits. The parts are separated by a decimal point, ".": | |
| 2.71828 | |
| 4.0 | |
| Unlike in integer literals, leading zeros are allowed. For example, | |
| "077.010" is legal, and denotes the same number as "77.01". | |
| As in integer literals, single underscores may occur between digits to | |
| help readability: | |
| 96_485.332_123 | |
| 3.14_15_93 | |
| Either of these parts, but not both, can be empty. For example: | |
| 10. # (equivalent to 10.0) | |
| .001 # (equivalent to 0.001) | |
| Optionally, the integer and fraction may be followed by an *exponent*: | |
| the letter "e" or "E", followed by an optional sign, "+" or "-", and a | |
| number in the same format as the integer and fraction parts. The "e" | |
| or "E" represents “times ten raised to the power of”: | |
| 1.0e3 # (represents 1.0×10³, or 1000.0) | |
| 1.166e-5 # (represents 1.166×10⁻⁵, or 0.00001166) | |
| 6.02214076e+23 # (represents 6.02214076×10²³, or 602214076000000000000000.) | |
| In floats with only integer and exponent parts, the decimal point may | |
| be omitted: | |
| 1e3 # (equivalent to 1.e3 and 1.0e3) | |
| 0e0 # (equivalent to 0.) | |
| Formally, floating-point literals are described by the following | |
| lexical definitions: | |
| floatnumber: | |
| | digitpart "." [digitpart] [exponent] | |
| | "." digitpart [exponent] | |
| | digitpart exponent | |
| digitpart: digit (["_"] digit)* | |
| exponent: ("e" | "E") ["+" | "-"] digitpart | |
| Changed in version 3.6: Underscores are now allowed for grouping | |
| purposes in literals. | |
| Imaginary literals | |
| ================== | |
| Python has complex number objects, but no complex literals. Instead, | |
| *imaginary literals* denote complex numbers with a zero real part. | |
| For example, in math, the complex number 3+4.2*i* is written as the | |
| real number 3 added to the imaginary number 4.2*i*. Python uses a | |
| similar syntax, except the imaginary unit is written as "j" rather | |
| than *i*: | |
| 3+4.2j | |
| This is an expression composed of the integer literal "3", the | |
| operator ‘"+"’, and the imaginary literal "4.2j". Since these are | |
| three separate tokens, whitespace is allowed between them: | |
| 3 + 4.2j | |
| No whitespace is allowed *within* each token. In particular, the "j" | |
| suffix, may not be separated from the number before it. | |
| The number before the "j" has the same syntax as a floating-point | |
| literal. Thus, the following are valid imaginary literals: | |
| 4.2j | |
| 3.14j | |
| 10.j | |
| .001j | |
| 1e100j | |
| 3.14e-10j | |
| 3.14_15_93j | |
| Unlike in a floating-point literal the decimal point can be omitted if | |
| the imaginary number only has an integer part. The number is still | |
| evaluated as a floating-point number, not an integer: | |
| 10j | |
| 0j | |
| 1000000000000000000000000j # equivalent to 1e+24j | |
| The "j" suffix is case-insensitive. That means you can use "J" | |
| instead: | |
| 3.14J # equivalent to 3.14j | |
| Formally, imaginary literals are described by the following lexical | |
| definition: | |
| imagnumber: (floatnumber | digitpart) ("j" | "J") | |
| ''', | |
| 'numeric-types': r'''Emulating numeric types | |
| *********************** | |
| The following methods can be defined to emulate numeric objects. | |
| Methods corresponding to operations that are not supported by the | |
| particular kind of number implemented (e.g., bitwise operations for | |
| non-integral numbers) should be left undefined. | |
| object.__add__(self, other) | |
| object.__sub__(self, other) | |
| object.__mul__(self, other) | |
| object.__matmul__(self, other) | |
| object.__truediv__(self, other) | |
| object.__floordiv__(self, other) | |
| object.__mod__(self, other) | |
| object.__divmod__(self, other) | |
| object.__pow__(self, other[, modulo]) | |
| object.__lshift__(self, other) | |
| object.__rshift__(self, other) | |
| object.__and__(self, other) | |
| object.__xor__(self, other) | |
| object.__or__(self, other) | |
| These methods are called to implement the binary arithmetic | |
| operations ("+", "-", "*", "@", "/", "//", "%", "divmod()", | |
| "pow()", "**", "<<", ">>", "&", "^", "|"). For instance, to | |
| evaluate the expression "x + y", where *x* is an instance of a | |
| class that has an "__add__()" method, "type(x).__add__(x, y)" is | |
| called. The "__divmod__()" method should be the equivalent to | |
| using "__floordiv__()" and "__mod__()"; it should not be related to | |
| "__truediv__()". Note that "__pow__()" should be defined to accept | |
| an optional third argument if the three-argument version of the | |
| built-in "pow()" function is to be supported. | |
| If one of those methods does not support the operation with the | |
| supplied arguments, it should return "NotImplemented". | |
| object.__radd__(self, other) | |
| object.__rsub__(self, other) | |
| object.__rmul__(self, other) | |
| object.__rmatmul__(self, other) | |
| object.__rtruediv__(self, other) | |
| object.__rfloordiv__(self, other) | |
| object.__rmod__(self, other) | |
| object.__rdivmod__(self, other) | |
| object.__rpow__(self, other[, modulo]) | |
| object.__rlshift__(self, other) | |
| object.__rrshift__(self, other) | |
| object.__rand__(self, other) | |
| object.__rxor__(self, other) | |
| object.__ror__(self, other) | |
| These methods are called to implement the binary arithmetic | |
| operations ("+", "-", "*", "@", "/", "//", "%", "divmod()", | |
| "pow()", "**", "<<", ">>", "&", "^", "|") with reflected (swapped) | |
| operands. These functions are only called if the operands are of | |
| different types, when the left operand does not support the | |
| corresponding operation [3], or the right operand’s class is | |
| derived from the left operand’s class. [4] For instance, to | |
| evaluate the expression "x - y", where *y* is an instance of a | |
| class that has an "__rsub__()" method, "type(y).__rsub__(y, x)" is | |
| called if "type(x).__sub__(x, y)" returns "NotImplemented" or | |
| "type(y)" is a subclass of "type(x)". [5] | |
| Note that "__rpow__()" should be defined to accept an optional | |
| third argument if the three-argument version of the built-in | |
| "pow()" function is to be supported. | |
| Changed in version 3.14: Three-argument "pow()" now try calling | |
| "__rpow__()" if necessary. Previously it was only called in two- | |
| argument "pow()" and the binary power operator. | |
| Note: | |
| If the right operand’s type is a subclass of the left operand’s | |
| type and that subclass provides a different implementation of the | |
| reflected method for the operation, this method will be called | |
| before the left operand’s non-reflected method. This behavior | |
| allows subclasses to override their ancestors’ operations. | |
| object.__iadd__(self, other) | |
| object.__isub__(self, other) | |
| object.__imul__(self, other) | |
| object.__imatmul__(self, other) | |
| object.__itruediv__(self, other) | |
| object.__ifloordiv__(self, other) | |
| object.__imod__(self, other) | |
| object.__ipow__(self, other[, modulo]) | |
| object.__ilshift__(self, other) | |
| object.__irshift__(self, other) | |
| object.__iand__(self, other) | |
| object.__ixor__(self, other) | |
| object.__ior__(self, other) | |
| These methods are called to implement the augmented arithmetic | |
| assignments ("+=", "-=", "*=", "@=", "/=", "//=", "%=", "**=", | |
| "<<=", ">>=", "&=", "^=", "|="). These methods should attempt to | |
| do the operation in-place (modifying *self*) and return the result | |
| (which could be, but does not have to be, *self*). If a specific | |
| method is not defined, or if that method returns "NotImplemented", | |
| the augmented assignment falls back to the normal methods. For | |
| instance, if *x* is an instance of a class with an "__iadd__()" | |
| method, "x += y" is equivalent to "x = x.__iadd__(y)" . If | |
| "__iadd__()" does not exist, or if "x.__iadd__(y)" returns | |
| "NotImplemented", "x.__add__(y)" and "y.__radd__(x)" are | |
| considered, as with the evaluation of "x + y". In certain | |
| situations, augmented assignment can result in unexpected errors | |
| (see Why does a_tuple[i] += [‘item’] raise an exception when the | |
| addition works?), but this behavior is in fact part of the data | |
| model. | |
| object.__neg__(self) | |
| object.__pos__(self) | |
| object.__abs__(self) | |
| object.__invert__(self) | |
| Called to implement the unary arithmetic operations ("-", "+", | |
| "abs()" and "~"). | |
| object.__complex__(self) | |
| object.__int__(self) | |
| object.__float__(self) | |
| Called to implement the built-in functions "complex()", "int()" and | |
| "float()". Should return a value of the appropriate type. | |
| object.__index__(self) | |
| Called to implement "operator.index()", and whenever Python needs | |
| to losslessly convert the numeric object to an integer object (such | |
| as in slicing, or in the built-in "bin()", "hex()" and "oct()" | |
| functions). Presence of this method indicates that the numeric | |
| object is an integer type. Must return an integer. | |
| If "__int__()", "__float__()" and "__complex__()" are not defined | |
| then corresponding built-in functions "int()", "float()" and | |
| "complex()" fall back to "__index__()". | |
| object.__round__(self[, ndigits]) | |
| object.__trunc__(self) | |
| object.__floor__(self) | |
| object.__ceil__(self) | |
| Called to implement the built-in function "round()" and "math" | |
| functions "trunc()", "floor()" and "ceil()". Unless *ndigits* is | |
| passed to "__round__()" all these methods should return the value | |
| of the object truncated to an "Integral" (typically an "int"). | |
| Changed in version 3.14: "int()" no longer delegates to the | |
| "__trunc__()" method. | |
| ''', | |
| 'objects': r'''Objects, values and types | |
| ************************* | |
| *Objects* are Python’s abstraction for data. All data in a Python | |
| program is represented by objects or by relations between objects. | |
| Even code is represented by objects. | |
| Every object has an identity, a type and a value. An object’s | |
| *identity* never changes once it has been created; you may think of it | |
| as the object’s address in memory. The "is" operator compares the | |
| identity of two objects; the "id()" function returns an integer | |
| representing its identity. | |
| **CPython implementation detail:** For CPython, "id(x)" is the memory | |
| address where "x" is stored. | |
| An object’s type determines the operations that the object supports | |
| (e.g., “does it have a length?”) and also defines the possible values | |
| for objects of that type. The "type()" function returns an object’s | |
| type (which is an object itself). Like its identity, an object’s | |
| *type* is also unchangeable. [1] | |
| The *value* of some objects can change. Objects whose value can | |
| change are said to be *mutable*; objects whose value is unchangeable | |
| once they are created are called *immutable*. (The value of an | |
| immutable container object that contains a reference to a mutable | |
| object can change when the latter’s value is changed; however the | |
| container is still considered immutable, because the collection of | |
| objects it contains cannot be changed. So, immutability is not | |
| strictly the same as having an unchangeable value, it is more subtle.) | |
| An object’s mutability is determined by its type; for instance, | |
| numbers, strings and tuples are immutable, while dictionaries and | |
| lists are mutable. | |
| Objects are never explicitly destroyed; however, when they become | |
| unreachable they may be garbage-collected. An implementation is | |
| allowed to postpone garbage collection or omit it altogether — it is a | |
| matter of implementation quality how garbage collection is | |
| implemented, as long as no objects are collected that are still | |
| reachable. | |
| **CPython implementation detail:** CPython currently uses a reference- | |
| counting scheme with (optional) delayed detection of cyclically linked | |
| garbage, which collects most objects as soon as they become | |
| unreachable, but is not guaranteed to collect garbage containing | |
| circular references. See the documentation of the "gc" module for | |
| information on controlling the collection of cyclic garbage. Other | |
| implementations act differently and CPython may change. Do not depend | |
| on immediate finalization of objects when they become unreachable (so | |
| you should always close files explicitly). | |
| Note that the use of the implementation’s tracing or debugging | |
| facilities may keep objects alive that would normally be collectable. | |
| Also note that catching an exception with a "try"…"except" statement | |
| may keep objects alive. | |
| Some objects contain references to “external” resources such as open | |
| files or windows. It is understood that these resources are freed | |
| when the object is garbage-collected, but since garbage collection is | |
| not guaranteed to happen, such objects also provide an explicit way to | |
| release the external resource, usually a "close()" method. Programs | |
| are strongly recommended to explicitly close such objects. The | |
| "try"…"finally" statement and the "with" statement provide convenient | |
| ways to do this. | |
| Some objects contain references to other objects; these are called | |
| *containers*. Examples of containers are tuples, lists and | |
| dictionaries. The references are part of a container’s value. In | |
| most cases, when we talk about the value of a container, we imply the | |
| values, not the identities of the contained objects; however, when we | |
| talk about the mutability of a container, only the identities of the | |
| immediately contained objects are implied. So, if an immutable | |
| container (like a tuple) contains a reference to a mutable object, its | |
| value changes if that mutable object is changed. | |
| Types affect almost all aspects of object behavior. Even the | |
| importance of object identity is affected in some sense: for immutable | |
| types, operations that compute new values may actually return a | |
| reference to any existing object with the same type and value, while | |
| for mutable objects this is not allowed. For example, after "a = 1; b | |
| = 1", *a* and *b* may or may not refer to the same object with the | |
| value one, depending on the implementation. This is because "int" is | |
| an immutable type, so the reference to "1" can be reused. This | |
| behaviour depends on the implementation used, so should not be relied | |
| upon, but is something to be aware of when making use of object | |
| identity tests. However, after "c = []; d = []", *c* and *d* are | |
| guaranteed to refer to two different, unique, newly created empty | |
| lists. (Note that "e = f = []" assigns the *same* object to both *e* | |
| and *f*.) | |
| ''', | |
| 'operator-summary': r'''Operator precedence | |
| ******************* | |
| The following table summarizes the operator precedence in Python, from | |
| highest precedence (most binding) to lowest precedence (least | |
| binding). Operators in the same box have the same precedence. Unless | |
| the syntax is explicitly given, operators are binary. Operators in | |
| the same box group left to right (except for exponentiation and | |
| conditional expressions, which group from right to left). | |
| Note that comparisons, membership tests, and identity tests, all have | |
| the same precedence and have a left-to-right chaining feature as | |
| described in the Comparisons section. | |
| +-------------------------------------------------+---------------------------------------+ | |
| | Operator | Description | | |
| |=================================================|=======================================| | |
| | "(expressions...)", "[expressions...]", "{key: | Binding or parenthesized expression, | | |
| | value...}", "{expressions...}" | list display, dictionary display, set | | |
| | | display | | |
| +-------------------------------------------------+---------------------------------------+ | |
| | "x[index]", "x[index:index]" "x(arguments...)", | Subscription (including slicing), | | |
| | "x.attribute" | call, attribute reference | | |
| +-------------------------------------------------+---------------------------------------+ | |
| | "await x" | Await expression | | |
| +-------------------------------------------------+---------------------------------------+ | |
| | "**" | Exponentiation [5] | | |
| +-------------------------------------------------+---------------------------------------+ | |
| | "+x", "-x", "~x" | Positive, negative, bitwise NOT | | |
| +-------------------------------------------------+---------------------------------------+ | |
| | "*", "@", "/", "//", "%" | Multiplication, matrix | | |
| | | multiplication, division, floor | | |
| | | division, remainder [6] | | |
| +-------------------------------------------------+---------------------------------------+ | |
| | "+", "-" | Addition and subtraction | | |
| +-------------------------------------------------+---------------------------------------+ | |
| | "<<", ">>" | Shifts | | |
| +-------------------------------------------------+---------------------------------------+ | |
| | "&" | Bitwise AND | | |
| +-------------------------------------------------+---------------------------------------+ | |
| | "^" | Bitwise XOR | | |
| +-------------------------------------------------+---------------------------------------+ | |
| | "|" | Bitwise OR | | |
| +-------------------------------------------------+---------------------------------------+ | |
| | "in", "not in", "is", "is not", "<", "<=", ">", | Comparisons, including membership | | |
| | ">=", "!=", "==" | tests and identity tests | | |
| +-------------------------------------------------+---------------------------------------+ | |
| | "not x" | Boolean NOT | | |
| +-------------------------------------------------+---------------------------------------+ | |
| | "and" | Boolean AND | | |
| +-------------------------------------------------+---------------------------------------+ | |
| | "or" | Boolean OR | | |
| +-------------------------------------------------+---------------------------------------+ | |
| | "if" – "else" | Conditional expression | | |
| +-------------------------------------------------+---------------------------------------+ | |
| | "lambda" | Lambda expression | | |
| +-------------------------------------------------+---------------------------------------+ | |
| | ":=" | Assignment expression | | |
| +-------------------------------------------------+---------------------------------------+ | |
| -[ Footnotes ]- | |
| [1] While "abs(x%y) < abs(y)" is true mathematically, for floats it | |
| may not be true numerically due to roundoff. For example, and | |
| assuming a platform on which a Python float is an IEEE 754 double- | |
| precision number, in order that "-1e-100 % 1e100" have the same | |
| sign as "1e100", the computed result is "-1e-100 + 1e100", which | |
| is numerically exactly equal to "1e100". The function | |
| "math.fmod()" returns a result whose sign matches the sign of the | |
| first argument instead, and so returns "-1e-100" in this case. | |
| Which approach is more appropriate depends on the application. | |
| [2] If x is very close to an exact integer multiple of y, it’s | |
| possible for "x//y" to be one larger than "(x-x%y)//y" due to | |
| rounding. In such cases, Python returns the latter result, in | |
| order to preserve that "divmod(x,y)[0] * y + x % y" be very close | |
| to "x". | |
| [3] The Unicode standard distinguishes between *code points* (e.g. | |
| U+0041) and *abstract characters* (e.g. “LATIN CAPITAL LETTER A”). | |
| While most abstract characters in Unicode are only represented | |
| using one code point, there is a number of abstract characters | |
| that can in addition be represented using a sequence of more than | |
| one code point. For example, the abstract character “LATIN | |
| CAPITAL LETTER C WITH CEDILLA” can be represented as a single | |
| *precomposed character* at code position U+00C7, or as a sequence | |
| of a *base character* at code position U+0043 (LATIN CAPITAL | |
| LETTER C), followed by a *combining character* at code position | |
| U+0327 (COMBINING CEDILLA). | |
| The comparison operators on strings compare at the level of | |
| Unicode code points. This may be counter-intuitive to humans. For | |
| example, ""\u00C7" == "\u0043\u0327"" is "False", even though both | |
| strings represent the same abstract character “LATIN CAPITAL | |
| LETTER C WITH CEDILLA”. | |
| To compare strings at the level of abstract characters (that is, | |
| in a way intuitive to humans), use "unicodedata.normalize()". | |
| [4] Due to automatic garbage-collection, free lists, and the dynamic | |
| nature of descriptors, you may notice seemingly unusual behaviour | |
| in certain uses of the "is" operator, like those involving | |
| comparisons between instance methods, or constants. Check their | |
| documentation for more info. | |
| [5] The power operator "**" binds less tightly than an arithmetic or | |
| bitwise unary operator on its right, that is, "2**-1" is "0.5". | |
| [6] The "%" operator is also used for string formatting; the same | |
| precedence applies. | |
| ''', | |
| 'pass': r'''The "pass" statement | |
| ******************** | |
| pass_stmt: "pass" | |
| "pass" is a null operation — when it is executed, nothing happens. It | |
| is useful as a placeholder when a statement is required syntactically, | |
| but no code needs to be executed, for example: | |
| def f(arg): pass # a function that does nothing (yet) | |
| class C: pass # a class with no methods (yet) | |
| ''', | |
| 'power': r'''The power operator | |
| ****************** | |
| The power operator binds more tightly than unary operators on its | |
| left; it binds less tightly than unary operators on its right. The | |
| syntax is: | |
| power: (await_expr | primary) ["**" u_expr] | |
| Thus, in an unparenthesized sequence of power and unary operators, the | |
| operators are evaluated from right to left (this does not constrain | |
| the evaluation order for the operands): "-1**2" results in "-1". | |
| The power operator has the same semantics as the built-in "pow()" | |
| function, when called with two arguments: it yields its left argument | |
| raised to the power of its right argument. Numeric arguments are first | |
| converted to a common type, and the result is of that type. | |
| For int operands, the result has the same type as the operands unless | |
| the second argument is negative; in that case, all arguments are | |
| converted to float and a float result is delivered. For example, | |
| "10**2" returns "100", but "10**-2" returns "0.01". | |
| Raising "0.0" to a negative power results in a "ZeroDivisionError". | |
| Raising a negative number to a fractional power results in a "complex" | |
| number. (In earlier versions it raised a "ValueError".) | |
| This operation can be customized using the special "__pow__()" and | |
| "__rpow__()" methods. | |
| ''', | |
| 'raise': r'''The "raise" statement | |
| ********************* | |
| raise_stmt: "raise" [expression ["from" expression]] | |
| If no expressions are present, "raise" re-raises the exception that is | |
| currently being handled, which is also known as the *active | |
| exception*. If there isn’t currently an active exception, a | |
| "RuntimeError" exception is raised indicating that this is an error. | |
| Otherwise, "raise" evaluates the first expression as the exception | |
| object. It must be either a subclass or an instance of | |
| "BaseException". If it is a class, the exception instance will be | |
| obtained when needed by instantiating the class with no arguments. | |
| The *type* of the exception is the exception instance’s class, the | |
| *value* is the instance itself. | |
| A traceback object is normally created automatically when an exception | |
| is raised and attached to it as the "__traceback__" attribute. You can | |
| create an exception and set your own traceback in one step using the | |
| "with_traceback()" exception method (which returns the same exception | |
| instance, with its traceback set to its argument), like so: | |
| raise Exception("foo occurred").with_traceback(tracebackobj) | |
| The "from" clause is used for exception chaining: if given, the second | |
| *expression* must be another exception class or instance. If the | |
| second expression is an exception instance, it will be attached to the | |
| raised exception as the "__cause__" attribute (which is writable). If | |
| the expression is an exception class, the class will be instantiated | |
| and the resulting exception instance will be attached to the raised | |
| exception as the "__cause__" attribute. If the raised exception is not | |
| handled, both exceptions will be printed: | |
| >>> try: | |
| ... print(1 / 0) | |
| ... except Exception as exc: | |
| ... raise RuntimeError("Something bad happened") from exc | |
| ... | |
| Traceback (most recent call last): | |
| File "<stdin>", line 2, in <module> | |
| print(1 / 0) | |
| ~~^~~ | |
| ZeroDivisionError: division by zero | |
| The above exception was the direct cause of the following exception: | |
| Traceback (most recent call last): | |
| File "<stdin>", line 4, in <module> | |
| raise RuntimeError("Something bad happened") from exc | |
| RuntimeError: Something bad happened | |
| A similar mechanism works implicitly if a new exception is raised when | |
| an exception is already being handled. An exception may be handled | |
| when an "except" or "finally" clause, or a "with" statement, is used. | |
| The previous exception is then attached as the new exception’s | |
| "__context__" attribute: | |
| >>> try: | |
| ... print(1 / 0) | |
| ... except: | |
| ... raise RuntimeError("Something bad happened") | |
| ... | |
| Traceback (most recent call last): | |
| File "<stdin>", line 2, in <module> | |
| print(1 / 0) | |
| ~~^~~ | |
| ZeroDivisionError: division by zero | |
| During handling of the above exception, another exception occurred: | |
| Traceback (most recent call last): | |
| File "<stdin>", line 4, in <module> | |
| raise RuntimeError("Something bad happened") | |
| RuntimeError: Something bad happened | |
| Exception chaining can be explicitly suppressed by specifying "None" | |
| in the "from" clause: | |
| >>> try: | |
| ... print(1 / 0) | |
| ... except: | |
| ... raise RuntimeError("Something bad happened") from None | |
| ... | |
| Traceback (most recent call last): | |
| File "<stdin>", line 4, in <module> | |
| RuntimeError: Something bad happened | |
| Additional information on exceptions can be found in section | |
| Exceptions, and information about handling exceptions is in section | |
| The try statement. | |
| Changed in version 3.3: "None" is now permitted as "Y" in "raise X | |
| from Y".Added the "__suppress_context__" attribute to suppress | |
| automatic display of the exception context. | |
| Changed in version 3.11: If the traceback of the active exception is | |
| modified in an "except" clause, a subsequent "raise" statement re- | |
| raises the exception with the modified traceback. Previously, the | |
| exception was re-raised with the traceback it had when it was caught. | |
| ''', | |
| 'return': r'''The "return" statement | |
| ********************** | |
| return_stmt: "return" [expression_list] | |
| "return" may only occur syntactically nested in a function definition, | |
| not within a nested class definition. | |
| If an expression list is present, it is evaluated, else "None" is | |
| substituted. | |
| "return" leaves the current function call with the expression list (or | |
| "None") as return value. | |
| When "return" passes control out of a "try" statement with a "finally" | |
| clause, that "finally" clause is executed before really leaving the | |
| function. | |
| In a generator function, the "return" statement indicates that the | |
| generator is done and will cause "StopIteration" to be raised. The | |
| returned value (if any) is used as an argument to construct | |
| "StopIteration" and becomes the "StopIteration.value" attribute. | |
| In an asynchronous generator function, an empty "return" statement | |
| indicates that the asynchronous generator is done and will cause | |
| "StopAsyncIteration" to be raised. A non-empty "return" statement is | |
| a syntax error in an asynchronous generator function. | |
| ''', | |
| 'sequence-types': r'''Emulating container types | |
| ************************* | |
| The following methods can be defined to implement container objects. | |
| None of them are provided by the "object" class itself. Containers | |
| usually are *sequences* (such as "lists" or "tuples") or *mappings* | |
| (like *dictionaries*), but can represent other containers as well. | |
| The first set of methods is used either to emulate a sequence or to | |
| emulate a mapping; the difference is that for a sequence, the | |
| allowable keys should be the integers *k* for which "0 <= k < N" where | |
| *N* is the length of the sequence, or "slice" objects, which define a | |
| range of items. It is also recommended that mappings provide the | |
| methods "keys()", "values()", "items()", "get()", "clear()", | |
| "setdefault()", "pop()", "popitem()", "copy()", and "update()" | |
| behaving similar to those for Python’s standard "dictionary" objects. | |
| The "collections.abc" module provides a "MutableMapping" *abstract | |
| base class* to help create those methods from a base set of | |
| "__getitem__()", "__setitem__()", "__delitem__()", and "keys()". | |
| Mutable sequences should provide methods "append()", "clear()", | |
| "count()", "extend()", "index()", "insert()", "pop()", "remove()", and | |
| "reverse()", like Python standard "list" objects. Finally, sequence | |
| types should implement addition (meaning concatenation) and | |
| multiplication (meaning repetition) by defining the methods | |
| "__add__()", "__radd__()", "__iadd__()", "__mul__()", "__rmul__()" and | |
| "__imul__()" described below; they should not define other numerical | |
| operators. | |
| It is recommended that both mappings and sequences implement the | |
| "__contains__()" method to allow efficient use of the "in" operator; | |
| for mappings, "in" should search the mapping’s keys; for sequences, it | |
| should search through the values. It is further recommended that both | |
| mappings and sequences implement the "__iter__()" method to allow | |
| efficient iteration through the container; for mappings, "__iter__()" | |
| should iterate through the object’s keys; for sequences, it should | |
| iterate through the values. | |
| object.__len__(self) | |
| Called to implement the built-in function "len()". Should return | |
| the length of the object, an integer ">=" 0. Also, an object that | |
| doesn’t define a "__bool__()" method and whose "__len__()" method | |
| returns zero is considered to be false in a Boolean context. | |
| **CPython implementation detail:** In CPython, the length is | |
| required to be at most "sys.maxsize". If the length is larger than | |
| "sys.maxsize" some features (such as "len()") may raise | |
| "OverflowError". To prevent raising "OverflowError" by truth value | |
| testing, an object must define a "__bool__()" method. | |
| object.__length_hint__(self) | |
| Called to implement "operator.length_hint()". Should return an | |
| estimated length for the object (which may be greater or less than | |
| the actual length). The length must be an integer ">=" 0. The | |
| return value may also be "NotImplemented", which is treated the | |
| same as if the "__length_hint__" method didn’t exist at all. This | |
| method is purely an optimization and is never required for | |
| correctness. | |
| Added in version 3.4. | |
| object.__getitem__(self, subscript) | |
| Called to implement *subscription*, that is, "self[subscript]". See | |
| Subscriptions and slicings for details on the syntax. | |
| There are two types of built-in objects that support subscription | |
| via "__getitem__()": | |
| * **sequences**, where *subscript* (also called *index*) should be | |
| an integer or a "slice" object. See the sequence documentation | |
| for the expected behavior, including handling "slice" objects and | |
| negative indices. | |
| * **mappings**, where *subscript* is also called the *key*. See | |
| mapping documentation for the expected behavior. | |
| If *subscript* is of an inappropriate type, "__getitem__()" should | |
| raise "TypeError". If *subscript* has an inappropriate value, | |
| "__getitem__()" should raise an "LookupError" or one of its | |
| subclasses ("IndexError" for sequences; "KeyError" for mappings). | |
| Note: | |
| Slicing is handled by "__getitem__()", "__setitem__()", and | |
| "__delitem__()". A call like | |
| a[1:2] = b | |
| is translated to | |
| a[slice(1, 2, None)] = b | |
| and so forth. Missing slice items are always filled in with | |
| "None". | |
| Note: | |
| The sequence iteration protocol (used, for example, in "for" | |
| loops), expects that an "IndexError" will be raised for illegal | |
| indexes to allow proper detection of the end of a sequence. | |
| Note: | |
| When subscripting a *class*, the special class method | |
| "__class_getitem__()" may be called instead of "__getitem__()". | |
| See __class_getitem__ versus __getitem__ for more details. | |
| object.__setitem__(self, key, value) | |
| Called to implement assignment to "self[key]". Same note as for | |
| "__getitem__()". This should only be implemented for mappings if | |
| the objects support changes to the values for keys, or if new keys | |
| can be added, or for sequences if elements can be replaced. The | |
| same exceptions should be raised for improper *key* values as for | |
| the "__getitem__()" method. | |
| object.__delitem__(self, key) | |
| Called to implement deletion of "self[key]". Same note as for | |
| "__getitem__()". This should only be implemented for mappings if | |
| the objects support removal of keys, or for sequences if elements | |
| can be removed from the sequence. The same exceptions should be | |
| raised for improper *key* values as for the "__getitem__()" method. | |
| object.__missing__(self, key) | |
| Called by "dict"."__getitem__()" to implement "self[key]" for dict | |
| subclasses when key is not in the dictionary. | |
| object.__iter__(self) | |
| This method is called when an *iterator* is required for a | |
| container. This method should return a new iterator object that can | |
| iterate over all the objects in the container. For mappings, it | |
| should iterate over the keys of the container. | |
| object.__reversed__(self) | |
| Called (if present) by the "reversed()" built-in to implement | |
| reverse iteration. It should return a new iterator object that | |
| iterates over all the objects in the container in reverse order. | |
| If the "__reversed__()" method is not provided, the "reversed()" | |
| built-in will fall back to using the sequence protocol ("__len__()" | |
| and "__getitem__()"). Objects that support the sequence protocol | |
| should only provide "__reversed__()" if they can provide an | |
| implementation that is more efficient than the one provided by | |
| "reversed()". | |
| The membership test operators ("in" and "not in") are normally | |
| implemented as an iteration through a container. However, container | |
| objects can supply the following special method with a more efficient | |
| implementation, which also does not require the object be iterable. | |
| object.__contains__(self, item) | |
| Called to implement membership test operators. Should return true | |
| if *item* is in *self*, false otherwise. For mapping objects, this | |
| should consider the keys of the mapping rather than the values or | |
| the key-item pairs. | |
| For objects that don’t define "__contains__()", the membership test | |
| first tries iteration via "__iter__()", then the old sequence | |
| iteration protocol via "__getitem__()", see this section in the | |
| language reference. | |
| ''', | |
| 'shifting': r'''Shifting operations | |
| ******************* | |
| The shifting operations have lower priority than the arithmetic | |
| operations: | |
| shift_expr: a_expr | shift_expr ("<<" | ">>") a_expr | |
| These operators accept integers as arguments. They shift the first | |
| argument to the left or right by the number of bits given by the | |
| second argument. | |
| The left shift operation can be customized using the special | |
| "__lshift__()" and "__rlshift__()" methods. The right shift operation | |
| can be customized using the special "__rshift__()" and "__rrshift__()" | |
| methods. | |
| A right shift by *n* bits is defined as floor division by "pow(2,n)". | |
| A left shift by *n* bits is defined as multiplication with "pow(2,n)". | |
| ''', | |
| 'slicings': r'''Slicings | |
| ******** | |
| A more advanced form of subscription, *slicing*, is commonly used to | |
| extract a portion of a sequence. In this form, the subscript is a | |
| *slice*: up to three expressions separated by colons. Any of the | |
| expressions may be omitted, but a slice must contain at least one | |
| colon: | |
| >>> number_names = ['zero', 'one', 'two', 'three', 'four', 'five'] | |
| >>> number_names[1:3] | |
| ['one', 'two'] | |
| >>> number_names[1:] | |
| ['one', 'two', 'three', 'four', 'five'] | |
| >>> number_names[:3] | |
| ['zero', 'one', 'two'] | |
| >>> number_names[:] | |
| ['zero', 'one', 'two', 'three', 'four', 'five'] | |
| >>> number_names[::2] | |
| ['zero', 'two', 'four'] | |
| >>> number_names[:-3] | |
| ['zero', 'one', 'two'] | |
| >>> del number_names[4:] | |
| >>> number_names | |
| ['zero', 'one', 'two', 'three'] | |
| When a slice is evaluated, the interpreter constructs a "slice" object | |
| whose "start", "stop" and "step" attributes, respectively, are the | |
| results of the expressions between the colons. Any missing expression | |
| evaluates to "None". This "slice" object is then passed to the | |
| "__getitem__()" or "__class_getitem__()" *special method*, as above. | |
| # continuing with the SubscriptionDemo instance defined above: | |
| >>> demo[2:3] | |
| subscripted with: slice(2, 3, None) | |
| >>> demo[::'spam'] | |
| subscripted with: slice(None, None, 'spam') | |
| ''', | |
| 'specialattrs': r'''Special Attributes | |
| ****************** | |
| The implementation adds a few special read-only attributes to several | |
| object types, where they are relevant. Some of these are not reported | |
| by the "dir()" built-in function. | |
| definition.__name__ | |
| The name of the class, function, method, descriptor, or generator | |
| instance. | |
| definition.__qualname__ | |
| The *qualified name* of the class, function, method, descriptor, or | |
| generator instance. | |
| Added in version 3.3. | |
| definition.__module__ | |
| The name of the module in which a class or function was defined. | |
| definition.__doc__ | |
| The documentation string of a class or function, or "None" if | |
| undefined. | |
| definition.__type_params__ | |
| The type parameters of generic classes, functions, and type | |
| aliases. For classes and functions that are not generic, this will | |
| be an empty tuple. | |
| Added in version 3.12. | |
| ''', | |
| 'specialnames': r'''Special method names | |
| ******************** | |
| A class can implement certain operations that are invoked by special | |
| syntax (such as arithmetic operations or subscripting and slicing) by | |
| defining methods with special names. This is Python’s approach to | |
| *operator overloading*, allowing classes to define their own behavior | |
| with respect to language operators. For instance, if a class defines | |
| a method named "__getitem__()", and "x" is an instance of this class, | |
| then "x[i]" is roughly equivalent to "type(x).__getitem__(x, i)". | |
| Except where mentioned, attempts to execute an operation raise an | |
| exception when no appropriate method is defined (typically | |
| "AttributeError" or "TypeError"). | |
| Setting a special method to "None" indicates that the corresponding | |
| operation is not available. For example, if a class sets "__iter__()" | |
| to "None", the class is not iterable, so calling "iter()" on its | |
| instances will raise a "TypeError" (without falling back to | |
| "__getitem__()"). [2] | |
| When implementing a class that emulates any built-in type, it is | |
| important that the emulation only be implemented to the degree that it | |
| makes sense for the object being modelled. For example, some | |
| sequences may work well with retrieval of individual elements, but | |
| extracting a slice may not make sense. (One example of this is the | |
| NodeList interface in the W3C’s Document Object Model.) | |
| Basic customization | |
| =================== | |
| object.__new__(cls[, ...]) | |
| Called to create a new instance of class *cls*. "__new__()" is a | |
| static method (special-cased so you need not declare it as such) | |
| that takes the class of which an instance was requested as its | |
| first argument. The remaining arguments are those passed to the | |
| object constructor expression (the call to the class). The return | |
| value of "__new__()" should be the new object instance (usually an | |
| instance of *cls*). | |
| Typical implementations create a new instance of the class by | |
| invoking the superclass’s "__new__()" method using | |
| "super().__new__(cls[, ...])" with appropriate arguments and then | |
| modifying the newly created instance as necessary before returning | |
| it. | |
| If "__new__()" is invoked during object construction and it returns | |
| an instance of *cls*, then the new instance’s "__init__()" method | |
| will be invoked like "__init__(self[, ...])", where *self* is the | |
| new instance and the remaining arguments are the same as were | |
| passed to the object constructor. | |
| If "__new__()" does not return an instance of *cls*, then the new | |
| instance’s "__init__()" method will not be invoked. | |
| "__new__()" is intended mainly to allow subclasses of immutable | |
| types (like int, str, or tuple) to customize instance creation. It | |
| is also commonly overridden in custom metaclasses in order to | |
| customize class creation. | |
| object.__init__(self[, ...]) | |
| Called after the instance has been created (by "__new__()"), but | |
| before it is returned to the caller. The arguments are those | |
| passed to the class constructor expression. If a base class has an | |
| "__init__()" method, the derived class’s "__init__()" method, if | |
| any, must explicitly call it to ensure proper initialization of the | |
| base class part of the instance; for example: | |
| "super().__init__([args...])". | |
| Because "__new__()" and "__init__()" work together in constructing | |
| objects ("__new__()" to create it, and "__init__()" to customize | |
| it), no non-"None" value may be returned by "__init__()"; doing so | |
| will cause a "TypeError" to be raised at runtime. | |
| object.__del__(self) | |
| Called when the instance is about to be destroyed. This is also | |
| called a finalizer or (improperly) a destructor. If a base class | |
| has a "__del__()" method, the derived class’s "__del__()" method, | |
| if any, must explicitly call it to ensure proper deletion of the | |
| base class part of the instance. | |
| It is possible (though not recommended!) for the "__del__()" method | |
| to postpone destruction of the instance by creating a new reference | |
| to it. This is called object *resurrection*. It is | |
| implementation-dependent whether "__del__()" is called a second | |
| time when a resurrected object is about to be destroyed; the | |
| current *CPython* implementation only calls it once. | |
| It is not guaranteed that "__del__()" methods are called for | |
| objects that still exist when the interpreter exits. | |
| "weakref.finalize" provides a straightforward way to register a | |
| cleanup function to be called when an object is garbage collected. | |
| Note: | |
| "del x" doesn’t directly call "x.__del__()" — the former | |
| decrements the reference count for "x" by one, and the latter is | |
| only called when "x"’s reference count reaches zero. | |
| **CPython implementation detail:** It is possible for a reference | |
| cycle to prevent the reference count of an object from going to | |
| zero. In this case, the cycle will be later detected and deleted | |
| by the *cyclic garbage collector*. A common cause of reference | |
| cycles is when an exception has been caught in a local variable. | |
| The frame’s locals then reference the exception, which references | |
| its own traceback, which references the locals of all frames caught | |
| in the traceback. | |
| See also: Documentation for the "gc" module. | |
| Warning: | |
| Due to the precarious circumstances under which "__del__()" | |
| methods are invoked, exceptions that occur during their execution | |
| are ignored, and a warning is printed to "sys.stderr" instead. | |
| In particular: | |
| * "__del__()" can be invoked when arbitrary code is being | |
| executed, including from any arbitrary thread. If "__del__()" | |
| needs to take a lock or invoke any other blocking resource, it | |
| may deadlock as the resource may already be taken by the code | |
| that gets interrupted to execute "__del__()". | |
| * "__del__()" can be executed during interpreter shutdown. As a | |
| consequence, the global variables it needs to access (including | |
| other modules) may already have been deleted or set to "None". | |
| Python guarantees that globals whose name begins with a single | |
| underscore are deleted from their module before other globals | |
| are deleted; if no other references to such globals exist, this | |
| may help in assuring that imported modules are still available | |
| at the time when the "__del__()" method is called. | |
| object.__repr__(self) | |
| Called by the "repr()" built-in function to compute the “official” | |
| string representation of an object. If at all possible, this | |
| should look like a valid Python expression that could be used to | |
| recreate an object with the same value (given an appropriate | |
| environment). If this is not possible, a string of the form | |
| "<...some useful description...>" should be returned. The return | |
| value must be a string object. If a class defines "__repr__()" but | |
| not "__str__()", then "__repr__()" is also used when an “informal” | |
| string representation of instances of that class is required. | |
| This is typically used for debugging, so it is important that the | |
| representation is information-rich and unambiguous. A default | |
| implementation is provided by the "object" class itself. | |
| object.__str__(self) | |
| Called by "str(object)", the default "__format__()" implementation, | |
| and the built-in function "print()", to compute the “informal” or | |
| nicely printable string representation of an object. The return | |
| value must be a str object. | |
| This method differs from "object.__repr__()" in that there is no | |
| expectation that "__str__()" return a valid Python expression: a | |
| more convenient or concise representation can be used. | |
| The default implementation defined by the built-in type "object" | |
| calls "object.__repr__()". | |
| object.__bytes__(self) | |
| Called by bytes to compute a byte-string representation of an | |
| object. This should return a "bytes" object. The "object" class | |
| itself does not provide this method. | |
| object.__format__(self, format_spec) | |
| Called by the "format()" built-in function, and by extension, | |
| evaluation of formatted string literals and the "str.format()" | |
| method, to produce a “formatted” string representation of an | |
| object. The *format_spec* argument is a string that contains a | |
| description of the formatting options desired. The interpretation | |
| of the *format_spec* argument is up to the type implementing | |
| "__format__()", however most classes will either delegate | |
| formatting to one of the built-in types, or use a similar | |
| formatting option syntax. | |
| See Format specification mini-language for a description of the | |
| standard formatting syntax. | |
| The return value must be a string object. | |
| The default implementation by the "object" class should be given an | |
| empty *format_spec* string. It delegates to "__str__()". | |
| Changed in version 3.4: The __format__ method of "object" itself | |
| raises a "TypeError" if passed any non-empty string. | |
| Changed in version 3.7: "object.__format__(x, '')" is now | |
| equivalent to "str(x)" rather than "format(str(x), '')". | |
| object.__lt__(self, other) | |
| object.__le__(self, other) | |
| object.__eq__(self, other) | |
| object.__ne__(self, other) | |
| object.__gt__(self, other) | |
| object.__ge__(self, other) | |
| These are the so-called “rich comparison” methods. The | |
| correspondence between operator symbols and method names is as | |
| follows: "x<y" calls "x.__lt__(y)", "x<=y" calls "x.__le__(y)", | |
| "x==y" calls "x.__eq__(y)", "x!=y" calls "x.__ne__(y)", "x>y" calls | |
| "x.__gt__(y)", and "x>=y" calls "x.__ge__(y)". | |
| A rich comparison method may return the singleton "NotImplemented" | |
| if it does not implement the operation for a given pair of | |
| arguments. By convention, "False" and "True" are returned for a | |
| successful comparison. However, these methods can return any value, | |
| so if the comparison operator is used in a Boolean context (e.g., | |
| in the condition of an "if" statement), Python will call "bool()" | |
| on the value to determine if the result is true or false. | |
| By default, "object" implements "__eq__()" by using "is", returning | |
| "NotImplemented" in the case of a false comparison: "True if x is y | |
| else NotImplemented". For "__ne__()", by default it delegates to | |
| "__eq__()" and inverts the result unless it is "NotImplemented". | |
| There are no other implied relationships among the comparison | |
| operators or default implementations; for example, the truth of | |
| "(x<y or x==y)" does not imply "x<=y". To automatically generate | |
| ordering operations from a single root operation, see | |
| "@functools.total_ordering". | |
| By default, the "object" class provides implementations consistent | |
| with Value comparisons: equality compares according to object | |
| identity, and order comparisons raise "TypeError". Each default | |
| method may generate these results directly, but may also return | |
| "NotImplemented". | |
| See the paragraph on "__hash__()" for some important notes on | |
| creating *hashable* objects which support custom comparison | |
| operations and are usable as dictionary keys. | |
| There are no swapped-argument versions of these methods (to be used | |
| when the left argument does not support the operation but the right | |
| argument does); rather, "__lt__()" and "__gt__()" are each other’s | |
| reflection, "__le__()" and "__ge__()" are each other’s reflection, | |
| and "__eq__()" and "__ne__()" are their own reflection. If the | |
| operands are of different types, and the right operand’s type is a | |
| direct or indirect subclass of the left operand’s type, the | |
| reflected method of the right operand has priority, otherwise the | |
| left operand’s method has priority. Virtual subclassing is not | |
| considered. | |
| When no appropriate method returns any value other than | |
| "NotImplemented", the "==" and "!=" operators will fall back to | |
| "is" and "is not", respectively. | |
| object.__hash__(self) | |
| Called by built-in function "hash()" and for operations on members | |
| of hashed collections including "set", "frozenset", "dict", and | |
| "frozendict". The "__hash__()" method should return an integer. The | |
| only required property is that objects which compare equal have the | |
| same hash value; it is advised to mix together the hash values of | |
| the components of the object that also play a part in comparison of | |
| objects by packing them into a tuple and hashing the tuple. | |
| Example: | |
| def __hash__(self): | |
| return hash((self.name, self.nick, self.color)) | |
| Note: | |
| "hash()" truncates the value returned from an object’s custom | |
| "__hash__()" method to the size of a "Py_ssize_t". This is | |
| typically 8 bytes on 64-bit builds and 4 bytes on 32-bit builds. | |
| If an object’s "__hash__()" must interoperate on builds of | |
| different bit sizes, be sure to check the width on all supported | |
| builds. An easy way to do this is with "python -c "import sys; | |
| print(sys.hash_info.width)"". | |
| If a class does not define an "__eq__()" method it should not | |
| define a "__hash__()" operation either; if it defines "__eq__()" | |
| but not "__hash__()", its instances will not be usable as items in | |
| hashable collections. If a class defines mutable objects and | |
| implements an "__eq__()" method, it should not implement | |
| "__hash__()", since the implementation of *hashable* collections | |
| requires that a key’s hash value is immutable (if the object’s hash | |
| value changes, it will be in the wrong hash bucket). | |
| User-defined classes have "__eq__()" and "__hash__()" methods by | |
| default (inherited from the "object" class); with them, all objects | |
| compare unequal (except with themselves) and "x.__hash__()" returns | |
| an appropriate value such that "x == y" implies both that "x is y" | |
| and "hash(x) == hash(y)". | |
| A class that overrides "__eq__()" and does not define "__hash__()" | |
| will have its "__hash__()" implicitly set to "None". When the | |
| "__hash__()" method of a class is "None", instances of the class | |
| will raise an appropriate "TypeError" when a program attempts to | |
| retrieve their hash value, and will also be correctly identified as | |
| unhashable when checking "isinstance(obj, | |
| collections.abc.Hashable)". | |
| If a class that overrides "__eq__()" needs to retain the | |
| implementation of "__hash__()" from a parent class, the interpreter | |
| must be told this explicitly by setting "__hash__ = | |
| <ParentClass>.__hash__". | |
| If a class that does not override "__eq__()" wishes to suppress | |
| hash support, it should include "__hash__ = None" in the class | |
| definition. A class which defines its own "__hash__()" that | |
| explicitly raises a "TypeError" would be incorrectly identified as | |
| hashable by an "isinstance(obj, collections.abc.Hashable)" call. | |
| Note: | |
| By default, the "__hash__()" values of str and bytes objects are | |
| “salted” with an unpredictable random value. Although they | |
| remain constant within an individual Python process, they are not | |
| predictable between repeated invocations of Python.This is | |
| intended to provide protection against a denial-of-service caused | |
| by carefully chosen inputs that exploit the worst case | |
| performance of a dict insertion, *O*(*n*^2) complexity. See | |
| https://ocert.org/advisories/ocert-2011-003.html for | |
| details.Changing hash values affects the iteration order of sets. | |
| Python has never made guarantees about this ordering (and it | |
| typically varies between 32-bit and 64-bit builds).See also | |
| "PYTHONHASHSEED". | |
| Changed in version 3.3: Hash randomization is enabled by default. | |
| object.__bool__(self) | |
| Called to implement truth value testing and the built-in operation | |
| "bool()"; should return "False" or "True". When this method is not | |
| defined, "__len__()" is called, if it is defined, and the object is | |
| considered true if its result is nonzero. If a class defines | |
| neither "__len__()" nor "__bool__()" (which is true of the "object" | |
| class itself), all its instances are considered true. | |
| Customizing attribute access | |
| ============================ | |
| The following methods can be defined to customize the meaning of | |
| attribute access (use of, assignment to, or deletion of "x.name") for | |
| class instances. | |
| object.__getattr__(self, name) | |
| Called when the default attribute access fails with an | |
| "AttributeError" (either "__getattribute__()" raises an | |
| "AttributeError" because *name* is not an instance attribute or an | |
| attribute in the class tree for "self"; or "__get__()" of a *name* | |
| property raises "AttributeError"). This method should either | |
| return the (computed) attribute value or raise an "AttributeError" | |
| exception. The "object" class itself does not provide this method. | |
| Note that if the attribute is found through the normal mechanism, | |
| "__getattr__()" is not called. (This is an intentional asymmetry | |
| between "__getattr__()" and "__setattr__()".) This is done both for | |
| efficiency reasons and because otherwise "__getattr__()" would have | |
| no way to access other attributes of the instance. Note that at | |
| least for instance variables, you can take total control by not | |
| inserting any values in the instance attribute dictionary (but | |
| instead inserting them in another object). See the | |
| "__getattribute__()" method below for a way to actually get total | |
| control over attribute access. | |
| object.__getattribute__(self, name) | |
| Called unconditionally to implement attribute accesses for | |
| instances of the class. If the class also defines "__getattr__()", | |
| the latter will not be called unless "__getattribute__()" either | |
| calls it explicitly or raises an "AttributeError". This method | |
| should return the (computed) attribute value or raise an | |
| "AttributeError" exception. In order to avoid infinite recursion in | |
| this method, its implementation should always call the base class | |
| method with the same name to access any attributes it needs, for | |
| example, "object.__getattribute__(self, name)". | |
| Note: | |
| This method may still be bypassed when looking up special methods | |
| as the result of implicit invocation via language syntax or | |
| built-in functions. See Special method lookup. | |
| For certain sensitive attribute accesses, raises an auditing event | |
| "object.__getattr__" with arguments "obj" and "name". | |
| object.__setattr__(self, name, value) | |
| Called when an attribute assignment is attempted. This is called | |
| instead of the normal mechanism (i.e. store the value in the | |
| instance dictionary). *name* is the attribute name, *value* is the | |
| value to be assigned to it. | |
| If "__setattr__()" wants to assign to an instance attribute, it | |
| should call the base class method with the same name, for example, | |
| "object.__setattr__(self, name, value)". | |
| For certain sensitive attribute assignments, raises an auditing | |
| event "object.__setattr__" with arguments "obj", "name", "value". | |
| object.__delattr__(self, name) | |
| Like "__setattr__()" but for attribute deletion instead of | |
| assignment. This should only be implemented if "del obj.name" is | |
| meaningful for the object. | |
| For certain sensitive attribute deletions, raises an auditing event | |
| "object.__delattr__" with arguments "obj" and "name". | |
| object.__dir__(self) | |
| Called when "dir()" is called on the object. An iterable must be | |
| returned. "dir()" converts the returned iterable to a list and | |
| sorts it. | |
| Customizing module attribute access | |
| ----------------------------------- | |
| module.__getattr__() | |
| module.__dir__() | |
| Special names "__getattr__" and "__dir__" can be also used to | |
| customize access to module attributes. The "__getattr__" function at | |
| the module level should accept one argument which is the name of an | |
| attribute and return the computed value or raise an "AttributeError". | |
| If an attribute is not found on a module object through the normal | |
| lookup, i.e. "object.__getattribute__()", then "__getattr__" is | |
| searched in the module "__dict__" before raising an "AttributeError". | |
| If found, it is called with the attribute name and the result is | |
| returned. | |
| The "__dir__" function should accept no arguments, and return an | |
| iterable of strings that represents the names accessible on module. If | |
| present, this function overrides the standard "dir()" search on a | |
| module. | |
| module.__class__ | |
| For a more fine grained customization of the module behavior (setting | |
| attributes, properties, etc.), one can set the "__class__" attribute | |
| of a module object to a subclass of "types.ModuleType". For example: | |
| import sys | |
| from types import ModuleType | |
| class VerboseModule(ModuleType): | |
| def __repr__(self): | |
| return f'Verbose {self.__name__}' | |
| def __setattr__(self, attr, value): | |
| print(f'Setting {attr}...') | |
| super().__setattr__(attr, value) | |
| sys.modules[__name__].__class__ = VerboseModule | |
| Note: | |
| Defining module "__getattr__" and setting module "__class__" only | |
| affect lookups made using the attribute access syntax – directly | |
| accessing the module globals (whether by code within the module, or | |
| via a reference to the module’s globals dictionary) is unaffected. | |
| Changed in version 3.5: "__class__" module attribute is now writable. | |
| Added in version 3.7: "__getattr__" and "__dir__" module attributes. | |
| See also: | |
| **PEP 562** - Module __getattr__ and __dir__ | |
| Describes the "__getattr__" and "__dir__" functions on modules. | |
| Implementing Descriptors | |
| ------------------------ | |
| The following methods only apply when an instance of the class | |
| containing the method (a so-called *descriptor* class) appears in an | |
| *owner* class (the descriptor must be in either the owner’s class | |
| dictionary or in the class dictionary for one of its parents). In the | |
| examples below, “the attribute” refers to the attribute whose name is | |
| the key of the property in the owner class’ "__dict__". The "object" | |
| class itself does not implement any of these protocols. | |
| object.__get__(self, instance, owner=None) | |
| Called to get the attribute of the owner class (class attribute | |
| access) or of an instance of that class (instance attribute | |
| access). The optional *owner* argument is the owner class, while | |
| *instance* is the instance that the attribute was accessed through, | |
| or "None" when the attribute is accessed through the *owner*. | |
| This method should return the computed attribute value or raise an | |
| "AttributeError" exception. | |
| **PEP 252** specifies that "__get__()" is callable with one or two | |
| arguments. Python’s own built-in descriptors support this | |
| specification; however, it is likely that some third-party tools | |
| have descriptors that require both arguments. Python’s own | |
| "__getattribute__()" implementation always passes in both arguments | |
| whether they are required or not. | |
| object.__set__(self, instance, value) | |
| Called to set the attribute on an instance *instance* of the owner | |
| class to a new value, *value*. | |
| Note, adding "__set__()" or "__delete__()" changes the kind of | |
| descriptor to a “data descriptor”. See Invoking Descriptors for | |
| more details. | |
| object.__delete__(self, instance) | |
| Called to delete the attribute on an instance *instance* of the | |
| owner class. | |
| Instances of descriptors may also have the "__objclass__" attribute | |
| present: | |
| object.__objclass__ | |
| The attribute "__objclass__" is interpreted by the "inspect" module | |
| as specifying the class where this object was defined (setting this | |
| appropriately can assist in runtime introspection of dynamic class | |
| attributes). For callables, it may indicate that an instance of the | |
| given type (or a subclass) is expected or required as the first | |
| positional argument (for example, CPython sets this attribute for | |
| unbound methods that are implemented in C). | |
| Invoking Descriptors | |
| -------------------- | |
| In general, a descriptor is an object attribute with “binding | |
| behavior”, one whose attribute access has been overridden by methods | |
| in the descriptor protocol: "__get__()", "__set__()", and | |
| "__delete__()". If any of those methods are defined for an object, it | |
| is said to be a descriptor. | |
| The default behavior for attribute access is to get, set, or delete | |
| the attribute from an object’s dictionary. For instance, "a.x" has a | |
| lookup chain starting with "a.__dict__['x']", then | |
| "type(a).__dict__['x']", and continuing through the base classes of | |
| "type(a)" excluding metaclasses. | |
| However, if the looked-up value is an object defining one of the | |
| descriptor methods, then Python may override the default behavior and | |
| invoke the descriptor method instead. Where this occurs in the | |
| precedence chain depends on which descriptor methods were defined and | |
| how they were called. | |
| The starting point for descriptor invocation is a binding, "a.x". How | |
| the arguments are assembled depends on "a": | |
| Direct Call | |
| The simplest and least common call is when user code directly | |
| invokes a descriptor method: "x.__get__(a)". | |
| Instance Binding | |
| If binding to an object instance, "a.x" is transformed into the | |
| call: "type(a).__dict__['x'].__get__(a, type(a))". | |
| Class Binding | |
| If binding to a class, "A.x" is transformed into the call: | |
| "A.__dict__['x'].__get__(None, A)". | |
| Super Binding | |
| A dotted lookup such as "super(A, a).x" searches | |
| "a.__class__.__mro__" for a base class "B" following "A" and then | |
| returns "B.__dict__['x'].__get__(a, A)". If not a descriptor, "x" | |
| is returned unchanged. | |
| For instance bindings, the precedence of descriptor invocation depends | |
| on which descriptor methods are defined. A descriptor can define any | |
| combination of "__get__()", "__set__()" and "__delete__()". If it | |
| does not define "__get__()", then accessing the attribute will return | |
| the descriptor object itself unless there is a value in the object’s | |
| instance dictionary. If the descriptor defines "__set__()" and/or | |
| "__delete__()", it is a data descriptor; if it defines neither, it is | |
| a non-data descriptor. Normally, data descriptors define both | |
| "__get__()" and "__set__()", while non-data descriptors have just the | |
| "__get__()" method. Data descriptors with "__get__()" and "__set__()" | |
| (and/or "__delete__()") defined always override a redefinition in an | |
| instance dictionary. In contrast, non-data descriptors can be | |
| overridden by instances. | |
| Python methods (including those decorated with "@staticmethod" and | |
| "@classmethod") are implemented as non-data descriptors. Accordingly, | |
| instances can redefine and override methods. This allows individual | |
| instances to acquire behaviors that differ from other instances of the | |
| same class. | |
| The "@property" decorator is implemented as a data descriptor. | |
| Accordingly, instances cannot override the behavior of a property. | |
| __slots__ | |
| --------- | |
| *__slots__* allow us to explicitly declare data members (like | |
| properties) and deny the creation of "__dict__" and *__weakref__* | |
| (unless explicitly declared in *__slots__* or available in a parent.) | |
| The space saved over using "__dict__" can be significant. Attribute | |
| lookup speed can be significantly improved as well. | |
| object.__slots__ | |
| This class variable can be assigned a string, iterable, or sequence | |
| of strings with variable names used by instances. *__slots__* | |
| reserves space for the declared variables and prevents the | |
| automatic creation of "__dict__" and *__weakref__* for each | |
| instance. | |
| Notes on using *__slots__*: | |
| * When inheriting from a class without *__slots__*, the "__dict__" and | |
| *__weakref__* attribute of the instances will always be accessible. | |
| * Without a "__dict__" variable, instances cannot be assigned new | |
| variables not listed in the *__slots__* definition. Attempts to | |
| assign to an unlisted variable name raises "AttributeError". If | |
| dynamic assignment of new variables is desired, then add | |
| "'__dict__'" to the sequence of strings in the *__slots__* | |
| declaration. | |
| * Without a *__weakref__* variable for each instance, classes defining | |
| *__slots__* do not support "weak references" to its instances. If | |
| weak reference support is needed, then add "'__weakref__'" to the | |
| sequence of strings in the *__slots__* declaration. | |
| * *__slots__* are implemented at the class level by creating | |
| descriptors for each variable name. As a result, class attributes | |
| cannot be used to set default values for instance variables defined | |
| by *__slots__*; otherwise, the class attribute would overwrite the | |
| descriptor assignment. | |
| * The action of a *__slots__* declaration is not limited to the class | |
| where it is defined. *__slots__* declared in parents are available | |
| in child classes. However, instances of a child subclass will get a | |
| "__dict__" and *__weakref__* unless the subclass also defines | |
| *__slots__* (which should only contain names of any *additional* | |
| slots). | |
| * If a class defines a slot also defined in a base class, the instance | |
| variable defined by the base class slot is inaccessible (except by | |
| retrieving its descriptor directly from the base class). This | |
| renders the meaning of the program undefined. In the future, a | |
| check may be added to prevent this. | |
| * "TypeError" will be raised if *__slots__* other than *__dict__* and | |
| *__weakref__* are defined for a class derived from a ""variable- | |
| length" built-in type" such as "int", "bytes", and "type", except | |
| "tuple". | |
| * Any non-string *iterable* may be assigned to *__slots__*. | |
| * If a "dictionary" is used to assign *__slots__*, the dictionary keys | |
| will be used as the slot names. The values of the dictionary can be | |
| used to provide per-attribute docstrings that will be recognised by | |
| "inspect.getdoc()" and displayed in the output of "help()". | |
| * "__class__" assignment works only if both classes have the same | |
| *__slots__*. | |
| * Multiple inheritance with multiple slotted parent classes can be | |
| used, but only one parent is allowed to have attributes created by | |
| slots (the other bases must have empty slot layouts) - violations | |
| raise "TypeError". | |
| * If an *iterator* is used for *__slots__* then a *descriptor* is | |
| created for each of the iterator’s values. However, the *__slots__* | |
| attribute will be an empty iterator. | |
| Changed in version 3.15: Allowed defining the *__dict__* and | |
| *__weakref__* *__slots__* for any class. Allowed defining any | |
| *__slots__* for a class derived from "tuple". | |
| Customizing class creation | |
| ========================== | |
| Whenever a class inherits from another class, "__init_subclass__()" is | |
| called on the parent class. This way, it is possible to write classes | |
| which change the behavior of subclasses. This is closely related to | |
| class decorators, but where class decorators only affect the specific | |
| class they’re applied to, "__init_subclass__" solely applies to future | |
| subclasses of the class defining the method. | |
| classmethod object.__init_subclass__(cls) | |
| This method is called whenever the containing class is subclassed. | |
| *cls* is then the new subclass. If defined as a normal instance | |
| method, this method is implicitly converted to a class method. | |
| Keyword arguments which are given to a new class are passed to the | |
| parent class’s "__init_subclass__". For compatibility with other | |
| classes using "__init_subclass__", one should take out the needed | |
| keyword arguments and pass the others over to the base class, as | |
| in: | |
| class Philosopher: | |
| def __init_subclass__(cls, /, default_name, **kwargs): | |
| super().__init_subclass__(**kwargs) | |
| cls.default_name = default_name | |
| class AustralianPhilosopher(Philosopher, default_name="Bruce"): | |
| pass | |
| The default implementation "object.__init_subclass__" does nothing, | |
| but raises an error if it is called with any arguments. | |
| Note: | |
| The metaclass hint "metaclass" is consumed by the rest of the | |
| type machinery, and is never passed to "__init_subclass__" | |
| implementations. The actual metaclass (rather than the explicit | |
| hint) can be accessed as "type(cls)". | |
| Added in version 3.6. | |
| When a class is created, "type.__new__()" scans the class variables | |
| and makes callbacks to those with a "__set_name__()" hook. | |
| object.__set_name__(self, owner, name) | |
| Automatically called at the time the owning class *owner* is | |
| created. The object has been assigned to *name* in that class: | |
| class A: | |
| x = C() # Automatically calls: x.__set_name__(A, 'x') | |
| If the class variable is assigned after the class is created, | |
| "__set_name__()" will not be called automatically. If needed, | |
| "__set_name__()" can be called directly: | |
| class A: | |
| pass | |
| c = C() | |
| A.x = c # The hook is not called | |
| c.__set_name__(A, 'x') # Manually invoke the hook | |
| See Creating the class object for more details. | |
| Added in version 3.6. | |
| Metaclasses | |
| ----------- | |
| By default, classes are constructed using "type()". The class body is | |
| executed in a new namespace and the class name is bound locally to the | |
| result of "type(name, bases, namespace)". | |
| The class creation process can be customized by passing the | |
| "metaclass" keyword argument in the class definition line, or by | |
| inheriting from an existing class that included such an argument. In | |
| the following example, both "MyClass" and "MySubclass" are instances | |
| of "Meta": | |
| class Meta(type): | |
| pass | |
| class MyClass(metaclass=Meta): | |
| pass | |
| class MySubclass(MyClass): | |
| pass | |
| Any other keyword arguments that are specified in the class definition | |
| are passed through to all metaclass operations described below. | |
| When a class definition is executed, the following steps occur: | |
| * MRO entries are resolved; | |
| * the appropriate metaclass is determined; | |
| * the class namespace is prepared; | |
| * the class body is executed; | |
| * the class object is created. | |
| Resolving MRO entries | |
| --------------------- | |
| object.__mro_entries__(self, bases) | |
| If a base that appears in a class definition is not an instance of | |
| "type", then an "__mro_entries__()" method is searched on the base. | |
| If an "__mro_entries__()" method is found, the base is substituted | |
| with the result of a call to "__mro_entries__()" when creating the | |
| class. The method is called with the original bases tuple passed to | |
| the *bases* parameter, and must return a tuple of classes that will | |
| be used instead of the base. The returned tuple may be empty: in | |
| these cases, the original base is ignored. | |
| See also: | |
| "types.resolve_bases()" | |
| Dynamically resolve bases that are not instances of "type". | |
| "types.get_original_bases()" | |
| Retrieve a class’s “original bases” prior to modifications by | |
| "__mro_entries__()". | |
| **PEP 560** | |
| Core support for typing module and generic types. | |
| Determining the appropriate metaclass | |
| ------------------------------------- | |
| The appropriate metaclass for a class definition is determined as | |
| follows: | |
| * if no bases and no explicit metaclass are given, then "type()" is | |
| used; | |
| * if an explicit metaclass is given and it is *not* an instance of | |
| "type()", then it is used directly as the metaclass; | |
| * if an instance of "type()" is given as the explicit metaclass, or | |
| bases are defined, then the most derived metaclass is used. | |
| The most derived metaclass is selected from the explicitly specified | |
| metaclass (if any) and the metaclasses (i.e. "type(cls)") of all | |
| specified base classes. The most derived metaclass is one which is a | |
| subtype of *all* of these candidate metaclasses. If none of the | |
| candidate metaclasses meets that criterion, then the class definition | |
| will fail with "TypeError". | |
| Preparing the class namespace | |
| ----------------------------- | |
| Once the appropriate metaclass has been identified, then the class | |
| namespace is prepared. If the metaclass has a "__prepare__" attribute, | |
| it is called as "namespace = metaclass.__prepare__(name, bases, | |
| **kwds)" (where the additional keyword arguments, if any, come from | |
| the class definition). The "__prepare__" method should be implemented | |
| as a "classmethod". The namespace returned by "__prepare__" is passed | |
| in to "__new__", but when the final class object is created the | |
| namespace is copied into a new "dict". | |
| If the metaclass has no "__prepare__" attribute, then the class | |
| namespace is initialised as an empty ordered mapping. | |
| See also: | |
| **PEP 3115** - Metaclasses in Python 3000 | |
| Introduced the "__prepare__" namespace hook | |
| Executing the class body | |
| ------------------------ | |
| The class body is executed (approximately) as "exec(body, globals(), | |
| namespace)". The key difference from a normal call to "exec()" is that | |
| lexical scoping allows the class body (including any methods) to | |
| reference names from the current and outer scopes when the class | |
| definition occurs inside a function. | |
| However, even when the class definition occurs inside the function, | |
| methods defined inside the class still cannot see names defined at the | |
| class scope. Class variables must be accessed through the first | |
| parameter of instance or class methods, or through the implicit | |
| lexically scoped "__class__" reference described in the next section. | |
| Creating the class object | |
| ------------------------- | |
| Once the class namespace has been populated by executing the class | |
| body, the class object is created by calling "metaclass(name, bases, | |
| namespace, **kwds)" (the additional keywords passed here are the same | |
| as those passed to "__prepare__"). | |
| This class object is the one that will be referenced by the zero- | |
| argument form of "super()". "__class__" is an implicit closure | |
| reference created by the compiler if any methods in a class body refer | |
| to either "__class__" or "super". This allows the zero argument form | |
| of "super()" to correctly identify the class being defined based on | |
| lexical scoping, while the class or instance that was used to make the | |
| current call is identified based on the first argument passed to the | |
| method. | |
| **CPython implementation detail:** In CPython 3.6 and later, the | |
| "__class__" cell is passed to the metaclass as a "__classcell__" entry | |
| in the class namespace. If present, this must be propagated up to the | |
| "type.__new__" call in order for the class to be initialised | |
| correctly. Failing to do so will result in a "RuntimeError" in Python | |
| 3.8. | |
| When using the default metaclass "type", or any metaclass that | |
| ultimately calls "type.__new__", the following additional | |
| customization steps are invoked after creating the class object: | |
| 1. The "type.__new__" method collects all of the attributes in the | |
| class namespace that define a "__set_name__()" method; | |
| 2. Those "__set_name__" methods are called with the class being | |
| defined and the assigned name of that particular attribute; | |
| 3. The "__init_subclass__()" hook is called on the immediate parent of | |
| the new class in its method resolution order. | |
| After the class object is created, it is passed to the class | |
| decorators included in the class definition (if any) and the resulting | |
| object is bound in the local namespace as the defined class. | |
| When a new class is created by "type.__new__", the object provided as | |
| the namespace parameter is copied to a new ordered mapping and the | |
| original object is discarded. The new copy is wrapped in a read-only | |
| proxy, which becomes the "__dict__" attribute of the class object. | |
| See also: | |
| **PEP 3135** - New super | |
| Describes the implicit "__class__" closure reference | |
| Uses for metaclasses | |
| -------------------- | |
| The potential uses for metaclasses are boundless. Some ideas that have | |
| been explored include enum, logging, interface checking, automatic | |
| delegation, automatic property creation, proxies, frameworks, and | |
| automatic resource locking/synchronization. | |
| Customizing instance and subclass checks | |
| ======================================== | |
| The following methods are used to override the default behavior of the | |
| "isinstance()" and "issubclass()" built-in functions. | |
| In particular, the metaclass "abc.ABCMeta" implements these methods in | |
| order to allow the addition of Abstract Base Classes (ABCs) as | |
| “virtual base classes” to any class or type (including built-in | |
| types), including other ABCs. | |
| type.__instancecheck__(self, instance) | |
| Return true if *instance* should be considered a (direct or | |
| indirect) instance of *class*. If defined, called to implement | |
| "isinstance(instance, class)". | |
| type.__subclasscheck__(self, subclass) | |
| Return true if *subclass* should be considered a (direct or | |
| indirect) subclass of *class*. If defined, called to implement | |
| "issubclass(subclass, class)". | |
| Note that these methods are looked up on the type (metaclass) of a | |
| class. They cannot be defined as class methods in the actual class. | |
| This is consistent with the lookup of special methods that are called | |
| on instances, only in this case the instance is itself a class. | |
| See also: | |
| **PEP 3119** - Introducing Abstract Base Classes | |
| Includes the specification for customizing "isinstance()" and | |
| "issubclass()" behavior through "__instancecheck__()" and | |
| "__subclasscheck__()", with motivation for this functionality in | |
| the context of adding Abstract Base Classes (see the "abc" | |
| module) to the language. | |
| Emulating generic types | |
| ======================= | |
| When using *type annotations*, it is often useful to *parameterize* a | |
| *generic type* using Python’s square-brackets notation. For example, | |
| the annotation "list[int]" might be used to signify a "list" in which | |
| all the elements are of type "int". | |
| See also: | |
| **PEP 484** - Type Hints | |
| Introducing Python’s framework for type annotations | |
| Generic Alias Types | |
| Documentation for objects representing parameterized generic | |
| classes | |
| Generics, user-defined generics and "typing.Generic" | |
| Documentation on how to implement generic classes that can be | |
| parameterized at runtime and understood by static type-checkers. | |
| A class can *generally* only be parameterized if it defines the | |
| special class method "__class_getitem__()". | |
| classmethod object.__class_getitem__(cls, key) | |
| Return an object representing the specialization of a generic class | |
| by type arguments found in *key*. | |
| When defined on a class, "__class_getitem__()" is automatically a | |
| class method. As such, there is no need for it to be decorated with | |
| "@classmethod" when it is defined. | |
| The purpose of *__class_getitem__* | |
| ---------------------------------- | |
| The purpose of "__class_getitem__()" is to allow runtime | |
| parameterization of standard-library generic classes in order to more | |
| easily apply *type hints* to these classes. | |
| To implement custom generic classes that can be parameterized at | |
| runtime and understood by static type-checkers, users should either | |
| inherit from a standard library class that already implements | |
| "__class_getitem__()", or inherit from "typing.Generic", which has its | |
| own implementation of "__class_getitem__()". | |
| Custom implementations of "__class_getitem__()" on classes defined | |
| outside of the standard library may not be understood by third-party | |
| type-checkers such as mypy. Using "__class_getitem__()" on any class | |
| for purposes other than type hinting is discouraged. | |
| *__class_getitem__* versus *__getitem__* | |
| ---------------------------------------- | |
| Usually, the subscription of an object using square brackets will call | |
| the "__getitem__()" instance method defined on the object’s class. | |
| However, if the object being subscribed is itself a class, the class | |
| method "__class_getitem__()" may be called instead. | |
| "__class_getitem__()" should return a GenericAlias object if it is | |
| properly defined. | |
| Presented with the *expression* "obj[x]", the Python interpreter | |
| follows something like the following process to decide whether | |
| "__getitem__()" or "__class_getitem__()" should be called: | |
| from inspect import isclass | |
| def subscribe(obj, x): | |
| """Return the result of the expression 'obj[x]'""" | |
| class_of_obj = type(obj) | |
| # If the class of obj defines __getitem__, | |
| # call class_of_obj.__getitem__(obj, x) | |
| if hasattr(class_of_obj, '__getitem__'): | |
| return class_of_obj.__getitem__(obj, x) | |
| # Else, if obj is a class and defines __class_getitem__, | |
| # call obj.__class_getitem__(x) | |
| elif isclass(obj) and hasattr(obj, '__class_getitem__'): | |
| return obj.__class_getitem__(x) | |
| # Else, raise an exception | |
| else: | |
| raise TypeError( | |
| f"'{class_of_obj.__name__}' object is not subscriptable" | |
| ) | |
| In Python, all classes are themselves instances of other classes. The | |
| class of a class is known as that class’s *metaclass*, and most | |
| classes have the "type" class as their metaclass. "type" does not | |
| define "__getitem__()", meaning that expressions such as "list[int]", | |
| "dict[str, float]" and "tuple[str, bytes]" all result in | |
| "__class_getitem__()" being called: | |
| >>> # list has class "type" as its metaclass, like most classes: | |
| >>> type(list) | |
| <class 'type'> | |
| >>> type(dict) == type(list) == type(tuple) == type(str) == type(bytes) | |
| True | |
| >>> # "list[int]" calls "list.__class_getitem__(int)" | |
| >>> list[int] | |
| list[int] | |
| >>> # list.__class_getitem__ returns a GenericAlias object: | |
| >>> type(list[int]) | |
| <class 'types.GenericAlias'> | |
| However, if a class has a custom metaclass that defines | |
| "__getitem__()", subscribing the class may result in different | |
| behaviour. An example of this can be found in the "enum" module: | |
| >>> from enum import Enum | |
| >>> class Menu(Enum): | |
| ... """A breakfast menu""" | |
| ... SPAM = 'spam' | |
| ... BACON = 'bacon' | |
| ... | |
| >>> # Enum classes have a custom metaclass: | |
| >>> type(Menu) | |
| <class 'enum.EnumMeta'> | |
| >>> # EnumMeta defines __getitem__, | |
| >>> # so __class_getitem__ is not called, | |
| >>> # and the result is not a GenericAlias object: | |
| >>> Menu['SPAM'] | |
| <Menu.SPAM: 'spam'> | |
| >>> type(Menu['SPAM']) | |
| <enum 'Menu'> | |
| See also: | |
| **PEP 560** - Core Support for typing module and generic types | |
| Introducing "__class_getitem__()", and outlining when a | |
| subscription results in "__class_getitem__()" being called | |
| instead of "__getitem__()" | |
| Emulating callable objects | |
| ========================== | |
| object.__call__(self[, args...]) | |
| Called when the instance is “called” as a function; if this method | |
| is defined, "x(arg1, arg2, ...)" roughly translates to | |
| "type(x).__call__(x, arg1, ...)". The "object" class itself does | |
| not provide this method. | |
| Emulating container types | |
| ========================= | |
| The following methods can be defined to implement container objects. | |
| None of them are provided by the "object" class itself. Containers | |
| usually are *sequences* (such as "lists" or "tuples") or *mappings* | |
| (like *dictionaries*), but can represent other containers as well. | |
| The first set of methods is used either to emulate a sequence or to | |
| emulate a mapping; the difference is that for a sequence, the | |
| allowable keys should be the integers *k* for which "0 <= k < N" where | |
| *N* is the length of the sequence, or "slice" objects, which define a | |
| range of items. It is also recommended that mappings provide the | |
| methods "keys()", "values()", "items()", "get()", "clear()", | |
| "setdefault()", "pop()", "popitem()", "copy()", and "update()" | |
| behaving similar to those for Python’s standard "dictionary" objects. | |
| The "collections.abc" module provides a "MutableMapping" *abstract | |
| base class* to help create those methods from a base set of | |
| "__getitem__()", "__setitem__()", "__delitem__()", and "keys()". | |
| Mutable sequences should provide methods "append()", "clear()", | |
| "count()", "extend()", "index()", "insert()", "pop()", "remove()", and | |
| "reverse()", like Python standard "list" objects. Finally, sequence | |
| types should implement addition (meaning concatenation) and | |
| multiplication (meaning repetition) by defining the methods | |
| "__add__()", "__radd__()", "__iadd__()", "__mul__()", "__rmul__()" and | |
| "__imul__()" described below; they should not define other numerical | |
| operators. | |
| It is recommended that both mappings and sequences implement the | |
| "__contains__()" method to allow efficient use of the "in" operator; | |
| for mappings, "in" should search the mapping’s keys; for sequences, it | |
| should search through the values. It is further recommended that both | |
| mappings and sequences implement the "__iter__()" method to allow | |
| efficient iteration through the container; for mappings, "__iter__()" | |
| should iterate through the object’s keys; for sequences, it should | |
| iterate through the values. | |
| object.__len__(self) | |
| Called to implement the built-in function "len()". Should return | |
| the length of the object, an integer ">=" 0. Also, an object that | |
| doesn’t define a "__bool__()" method and whose "__len__()" method | |
| returns zero is considered to be false in a Boolean context. | |
| **CPython implementation detail:** In CPython, the length is | |
| required to be at most "sys.maxsize". If the length is larger than | |
| "sys.maxsize" some features (such as "len()") may raise | |
| "OverflowError". To prevent raising "OverflowError" by truth value | |
| testing, an object must define a "__bool__()" method. | |
| object.__length_hint__(self) | |
| Called to implement "operator.length_hint()". Should return an | |
| estimated length for the object (which may be greater or less than | |
| the actual length). The length must be an integer ">=" 0. The | |
| return value may also be "NotImplemented", which is treated the | |
| same as if the "__length_hint__" method didn’t exist at all. This | |
| method is purely an optimization and is never required for | |
| correctness. | |
| Added in version 3.4. | |
| object.__getitem__(self, subscript) | |
| Called to implement *subscription*, that is, "self[subscript]". See | |
| Subscriptions and slicings for details on the syntax. | |
| There are two types of built-in objects that support subscription | |
| via "__getitem__()": | |
| * **sequences**, where *subscript* (also called *index*) should be | |
| an integer or a "slice" object. See the sequence documentation | |
| for the expected behavior, including handling "slice" objects and | |
| negative indices. | |
| * **mappings**, where *subscript* is also called the *key*. See | |
| mapping documentation for the expected behavior. | |
| If *subscript* is of an inappropriate type, "__getitem__()" should | |
| raise "TypeError". If *subscript* has an inappropriate value, | |
| "__getitem__()" should raise an "LookupError" or one of its | |
| subclasses ("IndexError" for sequences; "KeyError" for mappings). | |
| Note: | |
| Slicing is handled by "__getitem__()", "__setitem__()", and | |
| "__delitem__()". A call like | |
| a[1:2] = b | |
| is translated to | |
| a[slice(1, 2, None)] = b | |
| and so forth. Missing slice items are always filled in with | |
| "None". | |
| Note: | |
| The sequence iteration protocol (used, for example, in "for" | |
| loops), expects that an "IndexError" will be raised for illegal | |
| indexes to allow proper detection of the end of a sequence. | |
| Note: | |
| When subscripting a *class*, the special class method | |
| "__class_getitem__()" may be called instead of "__getitem__()". | |
| See __class_getitem__ versus __getitem__ for more details. | |
| object.__setitem__(self, key, value) | |
| Called to implement assignment to "self[key]". Same note as for | |
| "__getitem__()". This should only be implemented for mappings if | |
| the objects support changes to the values for keys, or if new keys | |
| can be added, or for sequences if elements can be replaced. The | |
| same exceptions should be raised for improper *key* values as for | |
| the "__getitem__()" method. | |
| object.__delitem__(self, key) | |
| Called to implement deletion of "self[key]". Same note as for | |
| "__getitem__()". This should only be implemented for mappings if | |
| the objects support removal of keys, or for sequences if elements | |
| can be removed from the sequence. The same exceptions should be | |
| raised for improper *key* values as for the "__getitem__()" method. | |
| object.__missing__(self, key) | |
| Called by "dict"."__getitem__()" to implement "self[key]" for dict | |
| subclasses when key is not in the dictionary. | |
| object.__iter__(self) | |
| This method is called when an *iterator* is required for a | |
| container. This method should return a new iterator object that can | |
| iterate over all the objects in the container. For mappings, it | |
| should iterate over the keys of the container. | |
| object.__reversed__(self) | |
| Called (if present) by the "reversed()" built-in to implement | |
| reverse iteration. It should return a new iterator object that | |
| iterates over all the objects in the container in reverse order. | |
| If the "__reversed__()" method is not provided, the "reversed()" | |
| built-in will fall back to using the sequence protocol ("__len__()" | |
| and "__getitem__()"). Objects that support the sequence protocol | |
| should only provide "__reversed__()" if they can provide an | |
| implementation that is more efficient than the one provided by | |
| "reversed()". | |
| The membership test operators ("in" and "not in") are normally | |
| implemented as an iteration through a container. However, container | |
| objects can supply the following special method with a more efficient | |
| implementation, which also does not require the object be iterable. | |
| object.__contains__(self, item) | |
| Called to implement membership test operators. Should return true | |
| if *item* is in *self*, false otherwise. For mapping objects, this | |
| should consider the keys of the mapping rather than the values or | |
| the key-item pairs. | |
| For objects that don’t define "__contains__()", the membership test | |
| first tries iteration via "__iter__()", then the old sequence | |
| iteration protocol via "__getitem__()", see this section in the | |
| language reference. | |
| Emulating numeric types | |
| ======================= | |
| The following methods can be defined to emulate numeric objects. | |
| Methods corresponding to operations that are not supported by the | |
| particular kind of number implemented (e.g., bitwise operations for | |
| non-integral numbers) should be left undefined. | |
| object.__add__(self, other) | |
| object.__sub__(self, other) | |
| object.__mul__(self, other) | |
| object.__matmul__(self, other) | |
| object.__truediv__(self, other) | |
| object.__floordiv__(self, other) | |
| object.__mod__(self, other) | |
| object.__divmod__(self, other) | |
| object.__pow__(self, other[, modulo]) | |
| object.__lshift__(self, other) | |
| object.__rshift__(self, other) | |
| object.__and__(self, other) | |
| object.__xor__(self, other) | |
| object.__or__(self, other) | |
| These methods are called to implement the binary arithmetic | |
| operations ("+", "-", "*", "@", "/", "//", "%", "divmod()", | |
| "pow()", "**", "<<", ">>", "&", "^", "|"). For instance, to | |
| evaluate the expression "x + y", where *x* is an instance of a | |
| class that has an "__add__()" method, "type(x).__add__(x, y)" is | |
| called. The "__divmod__()" method should be the equivalent to | |
| using "__floordiv__()" and "__mod__()"; it should not be related to | |
| "__truediv__()". Note that "__pow__()" should be defined to accept | |
| an optional third argument if the three-argument version of the | |
| built-in "pow()" function is to be supported. | |
| If one of those methods does not support the operation with the | |
| supplied arguments, it should return "NotImplemented". | |
| object.__radd__(self, other) | |
| object.__rsub__(self, other) | |
| object.__rmul__(self, other) | |
| object.__rmatmul__(self, other) | |
| object.__rtruediv__(self, other) | |
| object.__rfloordiv__(self, other) | |
| object.__rmod__(self, other) | |
| object.__rdivmod__(self, other) | |
| object.__rpow__(self, other[, modulo]) | |
| object.__rlshift__(self, other) | |
| object.__rrshift__(self, other) | |
| object.__rand__(self, other) | |
| object.__rxor__(self, other) | |
| object.__ror__(self, other) | |
| These methods are called to implement the binary arithmetic | |
| operations ("+", "-", "*", "@", "/", "//", "%", "divmod()", | |
| "pow()", "**", "<<", ">>", "&", "^", "|") with reflected (swapped) | |
| operands. These functions are only called if the operands are of | |
| different types, when the left operand does not support the | |
| corresponding operation [3], or the right operand’s class is | |
| derived from the left operand’s class. [4] For instance, to | |
| evaluate the expression "x - y", where *y* is an instance of a | |
| class that has an "__rsub__()" method, "type(y).__rsub__(y, x)" is | |
| called if "type(x).__sub__(x, y)" returns "NotImplemented" or | |
| "type(y)" is a subclass of "type(x)". [5] | |
| Note that "__rpow__()" should be defined to accept an optional | |
| third argument if the three-argument version of the built-in | |
| "pow()" function is to be supported. | |
| Changed in version 3.14: Three-argument "pow()" now try calling | |
| "__rpow__()" if necessary. Previously it was only called in two- | |
| argument "pow()" and the binary power operator. | |
| Note: | |
| If the right operand’s type is a subclass of the left operand’s | |
| type and that subclass provides a different implementation of the | |
| reflected method for the operation, this method will be called | |
| before the left operand’s non-reflected method. This behavior | |
| allows subclasses to override their ancestors’ operations. | |
| object.__iadd__(self, other) | |
| object.__isub__(self, other) | |
| object.__imul__(self, other) | |
| object.__imatmul__(self, other) | |
| object.__itruediv__(self, other) | |
| object.__ifloordiv__(self, other) | |
| object.__imod__(self, other) | |
| object.__ipow__(self, other[, modulo]) | |
| object.__ilshift__(self, other) | |
| object.__irshift__(self, other) | |
| object.__iand__(self, other) | |
| object.__ixor__(self, other) | |
| object.__ior__(self, other) | |
| These methods are called to implement the augmented arithmetic | |
| assignments ("+=", "-=", "*=", "@=", "/=", "//=", "%=", "**=", | |
| "<<=", ">>=", "&=", "^=", "|="). These methods should attempt to | |
| do the operation in-place (modifying *self*) and return the result | |
| (which could be, but does not have to be, *self*). If a specific | |
| method is not defined, or if that method returns "NotImplemented", | |
| the augmented assignment falls back to the normal methods. For | |
| instance, if *x* is an instance of a class with an "__iadd__()" | |
| method, "x += y" is equivalent to "x = x.__iadd__(y)" . If | |
| "__iadd__()" does not exist, or if "x.__iadd__(y)" returns | |
| "NotImplemented", "x.__add__(y)" and "y.__radd__(x)" are | |
| considered, as with the evaluation of "x + y". In certain | |
| situations, augmented assignment can result in unexpected errors | |
| (see Why does a_tuple[i] += [‘item’] raise an exception when the | |
| addition works?), but this behavior is in fact part of the data | |
| model. | |
| object.__neg__(self) | |
| object.__pos__(self) | |
| object.__abs__(self) | |
| object.__invert__(self) | |
| Called to implement the unary arithmetic operations ("-", "+", | |
| "abs()" and "~"). | |
| object.__complex__(self) | |
| object.__int__(self) | |
| object.__float__(self) | |
| Called to implement the built-in functions "complex()", "int()" and | |
| "float()". Should return a value of the appropriate type. | |
| object.__index__(self) | |
| Called to implement "operator.index()", and whenever Python needs | |
| to losslessly convert the numeric object to an integer object (such | |
| as in slicing, or in the built-in "bin()", "hex()" and "oct()" | |
| functions). Presence of this method indicates that the numeric | |
| object is an integer type. Must return an integer. | |
| If "__int__()", "__float__()" and "__complex__()" are not defined | |
| then corresponding built-in functions "int()", "float()" and | |
| "complex()" fall back to "__index__()". | |
| object.__round__(self[, ndigits]) | |
| object.__trunc__(self) | |
| object.__floor__(self) | |
| object.__ceil__(self) | |
| Called to implement the built-in function "round()" and "math" | |
| functions "trunc()", "floor()" and "ceil()". Unless *ndigits* is | |
| passed to "__round__()" all these methods should return the value | |
| of the object truncated to an "Integral" (typically an "int"). | |
| Changed in version 3.14: "int()" no longer delegates to the | |
| "__trunc__()" method. | |
| With Statement Context Managers | |
| =============================== | |
| A *context manager* is an object that defines the runtime context to | |
| be established when executing a "with" statement. The context manager | |
| handles the entry into, and the exit from, the desired runtime context | |
| for the execution of the block of code. Context managers are normally | |
| invoked using the "with" statement (described in section The with | |
| statement), but can also be used by directly invoking their methods. | |
| Typical uses of context managers include saving and restoring various | |
| kinds of global state, locking and unlocking resources, closing opened | |
| files, etc. | |
| For more information on context managers, see Context Manager Types. | |
| The "object" class itself does not provide the context manager | |
| methods. | |
| object.__enter__(self) | |
| Enter the runtime context related to this object. The "with" | |
| statement will bind this method’s return value to the target(s) | |
| specified in the "as" clause of the statement, if any. | |
| object.__exit__(self, exc_type, exc_value, traceback) | |
| Exit the runtime context related to this object. The parameters | |
| describe the exception that caused the context to be exited. If the | |
| context was exited without an exception, all three arguments will | |
| be "None". | |
| If an exception is supplied, and the method wishes to suppress the | |
| exception (i.e., prevent it from being propagated), it should | |
| return a true value. Otherwise, the exception will be processed | |
| normally upon exit from this method. | |
| Note that "__exit__()" methods should not reraise the passed-in | |
| exception; this is the caller’s responsibility. | |
| See also: | |
| **PEP 343** - The “with” statement | |
| The specification, background, and examples for the Python "with" | |
| statement. | |
| Customizing positional arguments in class pattern matching | |
| ========================================================== | |
| When using a class name in a pattern, positional arguments in the | |
| pattern are not allowed by default, i.e. "case MyClass(x, y)" is | |
| typically invalid without special support in "MyClass". To be able to | |
| use that kind of pattern, the class needs to define a *__match_args__* | |
| attribute. | |
| object.__match_args__ | |
| This class variable can be assigned a tuple of strings. When this | |
| class is used in a class pattern with positional arguments, each | |
| positional argument will be converted into a keyword argument, | |
| using the corresponding value in *__match_args__* as the keyword. | |
| The absence of this attribute is equivalent to setting it to "()". | |
| For example, if "MyClass.__match_args__" is "("left", "center", | |
| "right")" that means that "case MyClass(x, y)" is equivalent to "case | |
| MyClass(left=x, center=y)". Note that the number of arguments in the | |
| pattern must be smaller than or equal to the number of elements in | |
| *__match_args__*; if it is larger, the pattern match attempt will | |
| raise a "TypeError". | |
| Added in version 3.10. | |
| See also: | |
| **PEP 634** - Structural Pattern Matching | |
| The specification for the Python "match" statement. | |
| Emulating buffer types | |
| ====================== | |
| The buffer protocol provides a way for Python objects to expose | |
| efficient access to a low-level memory array. This protocol is | |
| implemented by builtin types such as "bytes" and "memoryview", and | |
| third-party libraries may define additional buffer types. | |
| While buffer types are usually implemented in C, it is also possible | |
| to implement the protocol in Python. | |
| object.__buffer__(self, flags) | |
| Called when a buffer is requested from *self* (for example, by the | |
| "memoryview" constructor). The *flags* argument is an integer | |
| representing the kind of buffer requested, affecting for example | |
| whether the returned buffer is read-only or writable. | |
| "inspect.BufferFlags" provides a convenient way to interpret the | |
| flags. The method must return a "memoryview" object. | |
| **Thread safety:** In *free-threaded* Python, implementations must | |
| manage any internal export counter using atomic operations. The | |
| method must be safe to call concurrently from multiple threads, and | |
| the returned buffer’s underlying data must remain valid until the | |
| corresponding "__release_buffer__()" call completes. See Thread | |
| safety for memoryview objects for details. | |
| object.__release_buffer__(self, buffer) | |
| Called when a buffer is no longer needed. The *buffer* argument is | |
| a "memoryview" object that was previously returned by | |
| "__buffer__()". The method must release any resources associated | |
| with the buffer. This method should return "None". | |
| **Thread safety:** In *free-threaded* Python, any export counter | |
| decrement must use atomic operations. Resource cleanup must be | |
| thread-safe, as the final release may race with concurrent releases | |
| from other threads. | |
| Buffer objects that do not need to perform any cleanup are not | |
| required to implement this method. | |
| Added in version 3.12. | |
| See also: | |
| **PEP 688** - Making the buffer protocol accessible in Python | |
| Introduces the Python "__buffer__" and "__release_buffer__" | |
| methods. | |
| "collections.abc.Buffer" | |
| ABC for buffer types. | |
| Annotations | |
| =========== | |
| Functions, classes, and modules may contain *annotations*, which are a | |
| way to associate information (usually *type hints*) with a symbol. | |
| object.__annotations__ | |
| This attribute contains the annotations for an object. It is lazily | |
| evaluated, so accessing the attribute may execute arbitrary code | |
| and raise exceptions. If evaluation is successful, the attribute is | |
| set to a dictionary mapping from variable names to annotations. | |
| Changed in version 3.14: Annotations are now lazily evaluated. | |
| object.__annotate__(format) | |
| An *annotate function*. Returns a new dictionary object mapping | |
| attribute/parameter names to their annotation values. | |
| Takes a format parameter specifying the format in which annotations | |
| values should be provided. It must be a member of the | |
| "annotationlib.Format" enum, or an integer with a value | |
| corresponding to a member of the enum. | |
| If an annotate function doesn’t support the requested format, it | |
| must raise "NotImplementedError". Annotate functions must always | |
| support "VALUE" format; they must not raise "NotImplementedError()" | |
| when called with this format. | |
| When called with "VALUE" format, an annotate function may raise | |
| "NameError"; it must not raise "NameError" when called requesting | |
| any other format. | |
| If an object does not have any annotations, "__annotate__" should | |
| preferably be set to "None" (it can’t be deleted), rather than set | |
| to a function that returns an empty dict. | |
| Added in version 3.14. | |
| See also: | |
| **PEP 649** — Deferred evaluation of annotation using descriptors | |
| Introduces lazy evaluation of annotations and the "__annotate__" | |
| function. | |
| Special method lookup | |
| ===================== | |
| For custom classes, implicit invocations of special methods are only | |
| guaranteed to work correctly if defined on an object’s type, not in | |
| the object’s instance dictionary. That behaviour is the reason why | |
| the following code raises an exception: | |
| >>> class C: | |
| ... pass | |
| ... | |
| >>> c = C() | |
| >>> c.__len__ = lambda: 5 | |
| >>> len(c) | |
| Traceback (most recent call last): | |
| File "<stdin>", line 1, in <module> | |
| TypeError: object of type 'C' has no len() | |
| The rationale behind this behaviour lies with a number of special | |
| methods such as "__hash__()" and "__repr__()" that are implemented by | |
| all objects, including type objects. If the implicit lookup of these | |
| methods used the conventional lookup process, they would fail when | |
| invoked on the type object itself: | |
| >>> 1 .__hash__() == hash(1) | |
| True | |
| >>> int.__hash__() == hash(int) | |
| Traceback (most recent call last): | |
| File "<stdin>", line 1, in <module> | |
| TypeError: descriptor '__hash__' of 'int' object needs an argument | |
| Incorrectly attempting to invoke an unbound method of a class in this | |
| way is sometimes referred to as ‘metaclass confusion’, and is avoided | |
| by bypassing the instance when looking up special methods: | |
| >>> type(1).__hash__(1) == hash(1) | |
| True | |
| >>> type(int).__hash__(int) == hash(int) | |
| True | |
| In addition to bypassing any instance attributes in the interest of | |
| correctness, implicit special method lookup generally also bypasses | |
| the "__getattribute__()" method even of the object’s metaclass: | |
| >>> class Meta(type): | |
| ... def __getattribute__(*args): | |
| ... print("Metaclass getattribute invoked") | |
| ... return type.__getattribute__(*args) | |
| ... | |
| >>> class C(object, metaclass=Meta): | |
| ... def __len__(self): | |
| ... return 10 | |
| ... def __getattribute__(*args): | |
| ... print("Class getattribute invoked") | |
| ... return object.__getattribute__(*args) | |
| ... | |
| >>> c = C() | |
| >>> c.__len__() # Explicit lookup via instance | |
| Class getattribute invoked | |
| 10 | |
| >>> type(c).__len__(c) # Explicit lookup via type | |
| Metaclass getattribute invoked | |
| 10 | |
| >>> len(c) # Implicit lookup | |
| 10 | |
| Bypassing the "__getattribute__()" machinery in this fashion provides | |
| significant scope for speed optimisations within the interpreter, at | |
| the cost of some flexibility in the handling of special methods (the | |
| special method *must* be set on the class object itself in order to be | |
| consistently invoked by the interpreter). | |
| ''', | |
| 'string-methods': r'''String Methods | |
| ************** | |
| Strings implement all of the common sequence operations, along with | |
| the additional methods described below. | |
| Strings also support two styles of string formatting, one providing a | |
| large degree of flexibility and customization (see "str.format()", | |
| Format string syntax and Custom string formatting) and the other based | |
| on C "printf" style formatting that handles a narrower range of types | |
| and is slightly harder to use correctly, but is often faster for the | |
| cases it can handle (printf-style String Formatting). | |
| The Text Processing Services section of the standard library covers a | |
| number of other modules that provide various text related utilities | |
| (including regular expression support in the "re" module). | |
| str.capitalize() | |
| Return a copy of the string with its first character capitalized | |
| and the rest lowercased. | |
| Changed in version 3.8: The first character is now put into | |
| titlecase rather than uppercase. This means that characters like | |
| digraphs will only have their first letter capitalized, instead of | |
| the full character. | |
| str.casefold() | |
| Return a casefolded copy of the string. Casefolded strings may be | |
| used for caseless matching. | |
| Casefolding is similar to lowercasing but more aggressive because | |
| it is intended to remove all case distinctions in a string. For | |
| example, the German lowercase letter "'ß'" is equivalent to ""ss"". | |
| Since it is already lowercase, "lower()" would do nothing to "'ß'"; | |
| "casefold()" converts it to ""ss"". For example: | |
| >>> 'straße'.lower() | |
| 'straße' | |
| >>> 'straße'.casefold() | |
| 'strasse' | |
| The casefolding algorithm is described in section 3.13.3 ‘Default | |
| Case Folding’ of the Unicode Standard. | |
| Added in version 3.3. | |
| str.center(width, fillchar=' ', /) | |
| Return centered in a string of length *width*. Padding is done | |
| using the specified *fillchar* (default is an ASCII space). The | |
| original string is returned if *width* is less than or equal to | |
| "len(s)". For example: | |
| >>> 'Python'.center(10) | |
| ' Python ' | |
| >>> 'Python'.center(10, '-') | |
| '--Python--' | |
| >>> 'Python'.center(4) | |
| 'Python' | |
| str.count(sub[, start[, end]]) | |
| Return the number of non-overlapping occurrences of substring *sub* | |
| in the range [*start*, *end*]. Optional arguments *start* and | |
| *end* are interpreted as in slice notation. | |
| If *sub* is empty, returns the number of empty strings between | |
| characters which is the length of the string plus one. For example: | |
| >>> 'spam, spam, spam'.count('spam') | |
| 3 | |
| >>> 'spam, spam, spam'.count('spam', 5) | |
| 2 | |
| >>> 'spam, spam, spam'.count('spam', 5, 10) | |
| 1 | |
| >>> 'spam, spam, spam'.count('eggs') | |
| 0 | |
| >>> 'spam, spam, spam'.count('') | |
| 17 | |
| str.encode(encoding='utf-8', errors='strict') | |
| Return the string encoded to "bytes". | |
| *encoding* defaults to "'utf-8'"; see Standard Encodings for | |
| possible values. | |
| *errors* controls how encoding errors are handled. If "'strict'" | |
| (the default), a "UnicodeError" exception is raised. Other possible | |
| values are "'ignore'", "'replace'", "'xmlcharrefreplace'", | |
| "'backslashreplace'" and any other name registered via | |
| "codecs.register_error()". See Error Handlers for details. | |
| For performance reasons, the value of *errors* is not checked for | |
| validity unless an encoding error actually occurs, Python | |
| Development Mode is enabled or a debug build is used. For example: | |
| >>> encoded_str_to_bytes = 'Python'.encode() | |
| >>> type(encoded_str_to_bytes) | |
| <class 'bytes'> | |
| >>> encoded_str_to_bytes | |
| b'Python' | |
| Changed in version 3.1: Added support for keyword arguments. | |
| Changed in version 3.9: The value of the *errors* argument is now | |
| checked in Python Development Mode and in debug mode. | |
| str.endswith(suffix[, start[, end]]) | |
| Return "True" if the string ends with the specified *suffix*, | |
| otherwise return "False". *suffix* can also be a tuple of suffixes | |
| to look for. With optional *start*, test beginning at that | |
| position. With optional *end*, stop comparing at that position. | |
| Using *start* and *end* is equivalent to | |
| "str[start:end].endswith(suffix)". For example: | |
| >>> 'Python'.endswith('on') | |
| True | |
| >>> 'a tuple of suffixes'.endswith(('at', 'in')) | |
| False | |
| >>> 'a tuple of suffixes'.endswith(('at', 'es')) | |
| True | |
| >>> 'Python is amazing'.endswith('is', 0, 9) | |
| True | |
| See also "startswith()" and "removesuffix()". | |
| str.expandtabs(tabsize=8) | |
| Return a copy of the string where all tab characters are replaced | |
| by one or more spaces, depending on the current column and the | |
| given tab size. Tab positions occur every *tabsize* characters | |
| (default is 8, giving tab positions at columns 0, 8, 16 and so on). | |
| To expand the string, the current column is set to zero and the | |
| string is examined character by character. If the character is a | |
| tab ("\t"), one or more space characters are inserted in the result | |
| until the current column is equal to the next tab position. (The | |
| tab character itself is not copied.) If the character is a newline | |
| ("\n") or return ("\r"), it is copied and the current column is | |
| reset to zero. Any other character is copied unchanged and the | |
| current column is incremented by one regardless of how the | |
| character is represented when printed. For example: | |
| >>> '01\t012\t0123\t01234'.expandtabs() | |
| '01 012 0123 01234' | |
| >>> '01\t012\t0123\t01234'.expandtabs(4) | |
| '01 012 0123 01234' | |
| >>> print('01\t012\n0123\t01234'.expandtabs(4)) | |
| 01 012 | |
| 0123 01234 | |
| str.find(sub[, start[, end]]) | |
| Return the lowest index in the string where substring *sub* is | |
| found within the slice "s[start:end]". Optional arguments *start* | |
| and *end* are interpreted as in slice notation. Return "-1" if | |
| *sub* is not found. For example: | |
| >>> 'spam, spam, spam'.find('sp') | |
| 0 | |
| >>> 'spam, spam, spam'.find('sp', 5) | |
| 6 | |
| See also "rfind()" and "index()". | |
| Note: | |
| The "find()" method should be used only if you need to know the | |
| position of *sub*. To check if *sub* is a substring or not, use | |
| the "in" operator: | |
| >>> 'Py' in 'Python' | |
| True | |
| str.format(*args, **kwargs) | |
| Perform a string formatting operation. The string on which this | |
| method is called can contain literal text or replacement fields | |
| delimited by braces "{}". Each replacement field contains either | |
| the numeric index of a positional argument, or the name of a | |
| keyword argument. Returns a copy of the string where each | |
| replacement field is replaced with the string value of the | |
| corresponding argument. For example: | |
| >>> "The sum of 1 + 2 is {0}".format(1+2) | |
| 'The sum of 1 + 2 is 3' | |
| >>> "The sum of {a} + {b} is {answer}".format(answer=1+2, a=1, b=2) | |
| 'The sum of 1 + 2 is 3' | |
| >>> "{1} expects the {0} Inquisition!".format("Spanish", "Nobody") | |
| 'Nobody expects the Spanish Inquisition!' | |
| See Format string syntax for a description of the various | |
| formatting options that can be specified in format strings. | |
| Note: | |
| When formatting a number ("int", "float", "complex", | |
| "decimal.Decimal" and subclasses) with the "n" type (ex: | |
| "'{:n}'.format(1234)"), the function temporarily sets the | |
| "LC_CTYPE" locale to the "LC_NUMERIC" locale to decode | |
| "decimal_point" and "thousands_sep" fields of "localeconv()" if | |
| they are non-ASCII or longer than 1 byte, and the "LC_NUMERIC" | |
| locale is different than the "LC_CTYPE" locale. This temporary | |
| change affects other threads. | |
| Changed in version 3.7: When formatting a number with the "n" type, | |
| the function sets temporarily the "LC_CTYPE" locale to the | |
| "LC_NUMERIC" locale in some cases. | |
| str.format_map(mapping, /) | |
| Similar to "str.format(**mapping)", except that "mapping" is used | |
| directly and not copied to a "dict". This is useful if for example | |
| "mapping" is a dict subclass: | |
| >>> class Default(dict): | |
| ... def __missing__(self, key): | |
| ... return key | |
| ... | |
| >>> '{name} was born in {country}'.format_map(Default(name='Guido')) | |
| 'Guido was born in country' | |
| Added in version 3.2. | |
| str.index(sub[, start[, end]]) | |
| Like "find()", but raise "ValueError" when the substring is not | |
| found. For example: | |
| >>> 'spam, spam, spam'.index('spam') | |
| 0 | |
| >>> 'spam, spam, spam'.index('eggs') | |
| Traceback (most recent call last): | |
| File "<python-input-0>", line 1, in <module> | |
| 'spam, spam, spam'.index('eggs') | |
| ~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^ | |
| ValueError: substring not found | |
| See also "rindex()". | |
| str.isalnum() | |
| Return "True" if all characters in the string are alphanumeric and | |
| there is at least one character, "False" otherwise. A character | |
| "c" is alphanumeric if one of the following returns "True": | |
| "c.isalpha()", "c.isdecimal()", "c.isdigit()", or "c.isnumeric()". | |
| For example: | |
| >>> 'abc123'.isalnum() | |
| True | |
| >>> 'abc123!@#'.isalnum() | |
| False | |
| >>> ''.isalnum() | |
| False | |
| >>> ' '.isalnum() | |
| False | |
| str.isalpha() | |
| Return "True" if all characters in the string are alphabetic and | |
| there is at least one character, "False" otherwise. Alphabetic | |
| characters are those characters defined in the Unicode character | |
| database as “Letter”, i.e., those with general category property | |
| being one of “Lm”, “Lt”, “Lu”, “Ll”, or “Lo”. Note that this is | |
| different from the Alphabetic property defined in section 4.10 | |
| ‘Letters, Alphabetic, and Ideographic’ of the Unicode Standard. For | |
| example: | |
| >>> 'Letters and spaces'.isalpha() | |
| False | |
| >>> 'LettersOnly'.isalpha() | |
| True | |
| >>> 'µ'.isalpha() # non-ASCII characters can be considered alphabetical too | |
| True | |
| See Unicode Properties. | |
| str.isascii() | |
| Return "True" if the string is empty or all characters in the | |
| string are ASCII, "False" otherwise. ASCII characters have code | |
| points in the range U+0000-U+007F. For example: | |
| >>> 'ASCII characters'.isascii() | |
| True | |
| >>> 'µ'.isascii() | |
| False | |
| Added in version 3.7. | |
| str.isdecimal() | |
| Return "True" if all characters in the string are decimal | |
| characters and there is at least one character, "False" otherwise. | |
| Decimal characters are those that can be used to form numbers in | |
| base 10, such as U+0660, ARABIC-INDIC DIGIT ZERO. Formally a | |
| decimal character is a character in the Unicode General Category | |
| “Nd”. For example: | |
| >>> '0123456789'.isdecimal() | |
| True | |
| >>> '٠١٢٣٤٥٦٧٨٩'.isdecimal() # Arabic-Indic digits zero to nine | |
| True | |
| >>> 'alphabetic'.isdecimal() | |
| False | |
| str.isdigit() | |
| Return "True" if all characters in the string are digits and there | |
| is at least one character, "False" otherwise. Digits include | |
| decimal characters and digits that need special handling, such as | |
| the compatibility superscript digits. This covers digits which | |
| cannot be used to form numbers in base 10, like the Kharosthi | |
| numbers. Formally, a digit is a character that has the property | |
| value Numeric_Type=Digit or Numeric_Type=Decimal. | |
| For example: | |
| >>> '0123456789'.isdigit() | |
| True | |
| >>> '٠١٢٣٤٥٦٧٨٩'.isdigit() # Arabic-Indic digits zero to nine | |
| True | |
| >>> '⅕'.isdigit() # Vulgar fraction one fifth | |
| False | |
| >>> '²'.isdecimal(), '²'.isdigit(), '²'.isnumeric() | |
| (False, True, True) | |
| See also "isdecimal()" and "isnumeric()". | |
| str.isidentifier() | |
| Return "True" if the string is a valid identifier according to the | |
| language definition, section Names (identifiers and keywords). | |
| "keyword.iskeyword()" can be used to test whether string "s" is a | |
| reserved identifier, such as "def" and "class". | |
| Example: | |
| >>> from keyword import iskeyword | |
| >>> 'hello'.isidentifier(), iskeyword('hello') | |
| (True, False) | |
| >>> 'def'.isidentifier(), iskeyword('def') | |
| (True, True) | |
| str.islower() | |
| Return "True" if all cased characters [4] in the string are | |
| lowercase and there is at least one cased character, "False" | |
| otherwise. | |
| str.isnumeric() | |
| Return "True" if all characters in the string are numeric | |
| characters, and there is at least one character, "False" otherwise. | |
| Numeric characters include digit characters, and all characters | |
| that have the Unicode numeric value property, e.g. U+2155, VULGAR | |
| FRACTION ONE FIFTH. Formally, numeric characters are those with | |
| the property value Numeric_Type=Digit, Numeric_Type=Decimal or | |
| Numeric_Type=Numeric. For example: | |
| >>> '0123456789'.isnumeric() | |
| True | |
| >>> '٠١٢٣٤٥٦٧٨٩'.isnumeric() # Arabic-Indic digits zero to nine | |
| True | |
| >>> '⅕'.isnumeric() # Vulgar fraction one fifth | |
| True | |
| >>> '²'.isdecimal(), '²'.isdigit(), '²'.isnumeric() | |
| (False, True, True) | |
| See also "isdecimal()" and "isdigit()". | |
| str.isprintable() | |
| Return "True" if all characters in the string are printable, | |
| "False" if it contains at least one non-printable character. | |
| Here “printable” means the character is suitable for "repr()" to | |
| use in its output; “non-printable” means that "repr()" on built-in | |
| types will hex-escape the character. It has no bearing on the | |
| handling of strings written to "sys.stdout" or "sys.stderr". | |
| The printable characters are those which in the Unicode character | |
| database (see "unicodedata") have a general category in group | |
| Letter, Mark, Number, Punctuation, or Symbol (L, M, N, P, or S); | |
| plus the ASCII space 0x20. Nonprintable characters are those in | |
| group Separator or Other (Z or C), except the ASCII space. | |
| For example: | |
| >>> ''.isprintable(), ' '.isprintable() | |
| (True, True) | |
| >>> '\t'.isprintable(), '\n'.isprintable() | |
| (False, False) | |
| See also "isspace()". | |
| str.isspace() | |
| Return "True" if there are only whitespace characters in the string | |
| and there is at least one character, "False" otherwise. | |
| For example: | |
| >>> ''.isspace() | |
| False | |
| >>> ' '.isspace() | |
| True | |
| >>> '\t\n'.isspace() # TAB and BREAK LINE | |
| True | |
| >>> '\u3000'.isspace() # IDEOGRAPHIC SPACE | |
| True | |
| A character is *whitespace* if in the Unicode character database | |
| (see "unicodedata"), either its general category is "Zs" | |
| (“Separator, space”), or its bidirectional class is one of "WS", | |
| "B", or "S". | |
| See also "isprintable()". | |
| str.istitle() | |
| Return "True" if the string is a titlecased string and there is at | |
| least one character, for example uppercase characters may only | |
| follow uncased characters and lowercase characters only cased ones. | |
| Return "False" otherwise. | |
| For example: | |
| >>> 'Spam, Spam, Spam'.istitle() | |
| True | |
| >>> 'spam, spam, spam'.istitle() | |
| False | |
| >>> 'SPAM, SPAM, SPAM'.istitle() | |
| False | |
| See also "title()". | |
| str.isupper() | |
| Return "True" if all cased characters [4] in the string are | |
| uppercase and there is at least one cased character, "False" | |
| otherwise. | |
| >>> 'BANANA'.isupper() | |
| True | |
| >>> 'banana'.isupper() | |
| False | |
| >>> 'baNana'.isupper() | |
| False | |
| >>> ' '.isupper() | |
| False | |
| str.join(iterable, /) | |
| Return a string which is the concatenation of the strings in | |
| *iterable*. A "TypeError" will be raised if there are any non- | |
| string values in *iterable*, including "bytes" objects. The | |
| separator between elements is the string providing this method. For | |
| example: | |
| >>> ', '.join(['spam', 'spam', 'spam']) | |
| 'spam, spam, spam' | |
| >>> '-'.join('Python') | |
| 'P-y-t-h-o-n' | |
| See also "split()". | |
| str.ljust(width, fillchar=' ', /) | |
| Return the string left justified in a string of length *width*. | |
| Padding is done using the specified *fillchar* (default is an ASCII | |
| space). The original string is returned if *width* is less than or | |
| equal to "len(s)". | |
| For example: | |
| >>> 'Python'.ljust(10) | |
| 'Python ' | |
| >>> 'Python'.ljust(10, '.') | |
| 'Python....' | |
| >>> 'Monty Python'.ljust(10, '.') | |
| 'Monty Python' | |
| See also "rjust()". | |
| str.lower() | |
| Return a copy of the string with all the cased characters [4] | |
| converted to lowercase. For example: | |
| >>> 'Lower Method Example'.lower() | |
| 'lower method example' | |
| The lowercasing algorithm used is described in section 3.13.2 | |
| ‘Default Case Conversion’ of the Unicode Standard. | |
| str.lstrip(chars=None, /) | |
| Return a copy of the string with leading characters removed. The | |
| *chars* argument is a string specifying the set of characters to be | |
| removed. If omitted or "None", the *chars* argument defaults to | |
| removing whitespace, that is characters for which "str.isspace()" | |
| is true. The *chars* argument is not a prefix; rather, all | |
| combinations of its values are stripped: | |
| >>> ' spacious '.lstrip() | |
| 'spacious ' | |
| >>> 'www.example.com'.lstrip('cmowz.') | |
| 'example.com' | |
| See "str.removeprefix()" for a method that will remove a single | |
| prefix string rather than all of a set of characters. For example: | |
| >>> 'Arthur: three!'.lstrip('Arthur: ') | |
| 'ee!' | |
| >>> 'Arthur: three!'.removeprefix('Arthur: ') | |
| 'three!' | |
| static str.maketrans(dict, /) | |
| static str.maketrans(from, to, remove='', /) | |
| This static method returns a translation table usable for | |
| "str.translate()". | |
| If there is only one argument, it must be a dictionary mapping | |
| Unicode ordinals (integers) or characters (strings of length 1) to | |
| Unicode ordinals, strings (of arbitrary lengths) or "None". | |
| Character keys will then be converted to ordinals. | |
| If there are two arguments, they must be strings of equal length, | |
| and in the resulting dictionary, each character in *from* will be | |
| mapped to the character at the same position in *to*. If there is | |
| a third argument, it must be a string, whose characters will be | |
| mapped to "None" in the result. | |
| Changed in version 3.15: *dict* can now be a "frozendict". | |
| str.partition(sep, /) | |
| Split the string at the first occurrence of *sep*, and return a | |
| 3-tuple containing the part before the separator, the separator | |
| itself, and the part after the separator. If the separator is not | |
| found, return a 3-tuple containing the string itself, followed by | |
| two empty strings. | |
| For example: | |
| >>> 'Monty Python'.partition(' ') | |
| ('Monty', ' ', 'Python') | |
| >>> "Monty Python's Flying Circus".partition(' ') | |
| ('Monty', ' ', "Python's Flying Circus") | |
| >>> 'Monty Python'.partition('-') | |
| ('Monty Python', '', '') | |
| See also "rpartition()". | |
| str.removeprefix(prefix, /) | |
| If the string starts with the *prefix* string, return | |
| "string[len(prefix):]". Otherwise, return a copy of the original | |
| string: | |
| >>> 'TestHook'.removeprefix('Test') | |
| 'Hook' | |
| >>> 'BaseTestCase'.removeprefix('Test') | |
| 'BaseTestCase' | |
| Added in version 3.9. | |
| See also "removesuffix()" and "startswith()". | |
| str.removesuffix(suffix, /) | |
| If the string ends with the *suffix* string and that *suffix* is | |
| not empty, return "string[:-len(suffix)]". Otherwise, return a copy | |
| of the original string: | |
| >>> 'MiscTests'.removesuffix('Tests') | |
| 'Misc' | |
| >>> 'TmpDirMixin'.removesuffix('Tests') | |
| 'TmpDirMixin' | |
| Added in version 3.9. | |
| See also "removeprefix()" and "endswith()". | |
| str.replace(old, new, /, count=-1) | |
| Return a copy of the string with all occurrences of substring *old* | |
| replaced by *new*. If *count* is given, only the first *count* | |
| occurrences are replaced. If *count* is not specified or "-1", then | |
| all occurrences are replaced. For example: | |
| >>> 'spam, spam, spam'.replace('spam', 'eggs') | |
| 'eggs, eggs, eggs' | |
| >>> 'spam, spam, spam'.replace('spam', 'eggs', 1) | |
| 'eggs, spam, spam' | |
| Changed in version 3.13: *count* is now supported as a keyword | |
| argument. | |
| str.rfind(sub[, start[, end]]) | |
| Return the highest index in the string where substring *sub* is | |
| found, such that *sub* is contained within "s[start:end]". | |
| Optional arguments *start* and *end* are interpreted as in slice | |
| notation. Return "-1" on failure. For example: | |
| >>> 'spam, spam, spam'.rfind('sp') | |
| 12 | |
| >>> 'spam, spam, spam'.rfind('sp', 0, 10) | |
| 6 | |
| See also "find()" and "rindex()". | |
| str.rindex(sub[, start[, end]]) | |
| Like "rfind()" but raises "ValueError" when the substring *sub* is | |
| not found. For example: | |
| >>> 'spam, spam, spam'.rindex('spam') | |
| 12 | |
| >>> 'spam, spam, spam'.rindex('eggs') | |
| Traceback (most recent call last): | |
| File "<stdin-0>", line 1, in <module> | |
| 'spam, spam, spam'.rindex('eggs') | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^ | |
| ValueError: substring not found | |
| See also "index()" and "find()". | |
| str.rjust(width, fillchar=' ', /) | |
| Return the string right justified in a string of length *width*. | |
| Padding is done using the specified *fillchar* (default is an ASCII | |
| space). The original string is returned if *width* is less than or | |
| equal to "len(s)". | |
| For example: | |
| >>> 'Python'.rjust(10) | |
| ' Python' | |
| >>> 'Python'.rjust(10, '.') | |
| '....Python' | |
| >>> 'Monty Python'.rjust(10, '.') | |
| 'Monty Python' | |
| See also "ljust()" and "zfill()". | |
| str.rpartition(sep, /) | |
| Split the string at the last occurrence of *sep*, and return a | |
| 3-tuple containing the part before the separator, the separator | |
| itself, and the part after the separator. If the separator is not | |
| found, return a 3-tuple containing two empty strings, followed by | |
| the string itself. | |
| For example: | |
| >>> 'Monty Python'.rpartition(' ') | |
| ('Monty', ' ', 'Python') | |
| >>> "Monty Python's Flying Circus".rpartition(' ') | |
| ("Monty Python's Flying", ' ', 'Circus') | |
| >>> 'Monty Python'.rpartition('-') | |
| ('', '', 'Monty Python') | |
| See also "partition()". | |
| str.rsplit(sep=None, maxsplit=-1) | |
| Return a list of the words in the string, using *sep* as the | |
| delimiter string. If *maxsplit* is given, at most *maxsplit* splits | |
| are done, the *rightmost* ones. If *sep* is not specified or | |
| "None", any "whitespace" string is a separator. Except for | |
| splitting from the right, "rsplit()" behaves like "split()" which | |
| is described in detail below. | |
| str.rstrip(chars=None, /) | |
| Return a copy of the string with trailing characters removed. The | |
| *chars* argument is a string specifying the set of characters to be | |
| removed. If omitted or "None", the *chars* argument defaults to | |
| removing whitespace, that is characters for which "str.isspace()" | |
| is true. The *chars* argument is not a suffix; rather, all | |
| combinations of its values are stripped. For example: | |
| >>> ' spacious '.rstrip() | |
| ' spacious' | |
| >>> 'mississippi'.rstrip('ipz') | |
| 'mississ' | |
| See "removesuffix()" for a method that will remove a single suffix | |
| string rather than all of a set of characters. For example: | |
| >>> 'Monty Python'.rstrip(' Python') | |
| 'M' | |
| >>> 'Monty Python'.removesuffix(' Python') | |
| 'Monty' | |
| See also "strip()". | |
| str.split(sep=None, maxsplit=-1) | |
| Return a list of the words in the string, using *sep* as the | |
| delimiter string. If *maxsplit* is given, at most *maxsplit* | |
| splits are done (thus, the list will have at most "maxsplit+1" | |
| elements). If *maxsplit* is not specified or "-1", then there is | |
| no limit on the number of splits (all possible splits are made). | |
| If *sep* is given, consecutive delimiters are not grouped together | |
| and are deemed to delimit empty strings (for example, | |
| "'1,,2'.split(',')" returns "['1', '', '2']"). The *sep* argument | |
| may consist of multiple characters as a single delimiter (to split | |
| with multiple delimiters, use "re.split()"). Splitting an empty | |
| string with a specified separator returns "['']". | |
| For example: | |
| >>> '1,2,3'.split(',') | |
| ['1', '2', '3'] | |
| >>> '1,2,3'.split(',', maxsplit=1) | |
| ['1', '2,3'] | |
| >>> '1,2,,3,'.split(',') | |
| ['1', '2', '', '3', ''] | |
| >>> '1<>2<>3<4'.split('<>') | |
| ['1', '2', '3<4'] | |
| If *sep* is not specified or is "None", a different splitting | |
| algorithm is applied: runs of consecutive "whitespace" are regarded | |
| as a single separator, and the result will contain no empty strings | |
| at the start or end if the string has leading or trailing | |
| whitespace. Consequently, splitting an empty string or a string | |
| consisting of just whitespace with a "None" separator returns "[]". | |
| For example: | |
| >>> '1 2 3'.split() | |
| ['1', '2', '3'] | |
| >>> '1 2 3'.split(maxsplit=1) | |
| ['1', '2 3'] | |
| >>> ' 1 2 3 '.split() | |
| ['1', '2', '3'] | |
| If *sep* is not specified or is "None" and *maxsplit* is "0", only | |
| leading runs of consecutive whitespace are considered. | |
| For example: | |
| >>> "".split(None, 0) | |
| [] | |
| >>> " ".split(None, 0) | |
| [] | |
| >>> " foo ".split(maxsplit=0) | |
| ['foo '] | |
| See also "join()" and "rsplit()". | |
| str.splitlines(keepends=False) | |
| Return a list of the lines in the string, breaking at line | |
| boundaries. Line breaks are not included in the resulting list | |
| unless *keepends* is given and true. | |
| This method splits on the following line boundaries. In | |
| particular, the boundaries are a superset of *universal newlines*. | |
| +-------------------------+-------------------------------+ | |
| | Representation | Description | | |
| |=========================|===============================| | |
| | "\n" | Line Feed | | |
| +-------------------------+-------------------------------+ | |
| | "\r" | Carriage Return | | |
| +-------------------------+-------------------------------+ | |
| | "\r\n" | Carriage Return + Line Feed | | |
| +-------------------------+-------------------------------+ | |
| | "\v" or "\x0b" | Line Tabulation | | |
| +-------------------------+-------------------------------+ | |
| | "\f" or "\x0c" | Form Feed | | |
| +-------------------------+-------------------------------+ | |
| | "\x1c" | File Separator | | |
| +-------------------------+-------------------------------+ | |
| | "\x1d" | Group Separator | | |
| +-------------------------+-------------------------------+ | |
| | "\x1e" | Record Separator | | |
| +-------------------------+-------------------------------+ | |
| | "\x85" | Next Line (C1 Control Code) | | |
| +-------------------------+-------------------------------+ | |
| | "\u2028" | Line Separator | | |
| +-------------------------+-------------------------------+ | |
| | "\u2029" | Paragraph Separator | | |
| +-------------------------+-------------------------------+ | |
| Changed in version 3.2: "\v" and "\f" added to list of line | |
| boundaries. | |
| For example: | |
| >>> 'ab c\n\nde fg\rkl\r\n'.splitlines() | |
| ['ab c', '', 'de fg', 'kl'] | |
| >>> 'ab c\n\nde fg\rkl\r\n'.splitlines(keepends=True) | |
| ['ab c\n', '\n', 'de fg\r', 'kl\r\n'] | |
| Unlike "split()" when a delimiter string *sep* is given, this | |
| method returns an empty list for the empty string, and a terminal | |
| line break does not result in an extra line: | |
| >>> "".splitlines() | |
| [] | |
| >>> "One line\n".splitlines() | |
| ['One line'] | |
| For comparison, "split('\n')" gives: | |
| >>> ''.split('\n') | |
| [''] | |
| >>> 'Two lines\n'.split('\n') | |
| ['Two lines', ''] | |
| str.startswith(prefix[, start[, end]]) | |
| Return "True" if string starts with the *prefix*, otherwise return | |
| "False". *prefix* can also be a tuple of prefixes to look for. | |
| With optional *start*, test string beginning at that position. | |
| With optional *end*, stop comparing string at that position. | |
| For example: | |
| >>> 'Python'.startswith('Py') | |
| True | |
| >>> 'a tuple of prefixes'.startswith(('at', 'a')) | |
| True | |
| >>> 'Python is amazing'.startswith('is', 7) | |
| True | |
| See also "endswith()" and "removeprefix()". | |
| str.strip(chars=None, /) | |
| Return a copy of the string with the leading and trailing | |
| characters removed. The *chars* argument is a string specifying the | |
| set of characters to be removed. If omitted or "None", the *chars* | |
| argument defaults to removing whitespace, that is characters for | |
| which "str.isspace()" is true. The *chars* argument is not a | |
| prefix or suffix; rather, all combinations of its values are | |
| stripped. | |
| For example: | |
| >>> ' spacious '.strip() | |
| 'spacious' | |
| >>> 'www.example.com'.strip('cmowz.') | |
| 'example' | |
| The outermost leading and trailing *chars* argument values are | |
| stripped from the string. Characters are removed from the leading | |
| end until reaching a string character that is not contained in the | |
| set of characters in *chars*. A similar action takes place on the | |
| trailing end. | |
| For example: | |
| >>> comment_string = '#....... Section 3.2.1 Issue #32 .......' | |
| >>> comment_string.strip('.#! ') | |
| 'Section 3.2.1 Issue #32' | |
| See also "rstrip()". | |
| str.swapcase() | |
| Return a copy of the string with uppercase characters converted to | |
| lowercase and vice versa. For example: | |
| >>> 'Hello World'.swapcase() | |
| 'hELLO wORLD' | |
| Note that it is not necessarily true that "s.swapcase().swapcase() | |
| == s". For example: | |
| >>> 'straße'.swapcase().swapcase() | |
| 'strasse' | |
| See also "str.lower()" and "str.upper()". | |
| str.title() | |
| Return a titlecased version of the string where words start with an | |
| uppercase character and the remaining characters are lowercase. | |
| For example: | |
| >>> 'Hello world'.title() | |
| 'Hello World' | |
| The algorithm uses a simple language-independent definition of a | |
| word as groups of consecutive letters. The definition works in | |
| many contexts but it means that apostrophes in contractions and | |
| possessives form word boundaries, which may not be the desired | |
| result: | |
| >>> "they're bill's friends from the UK".title() | |
| "They'Re Bill'S Friends From The Uk" | |
| The "string.capwords()" function does not have this problem, as it | |
| splits words on spaces only. | |
| Alternatively, a workaround for apostrophes can be constructed | |
| using regular expressions: | |
| >>> import re | |
| >>> def titlecase(s): | |
| ... return re.sub(r"[A-Za-z]+('[A-Za-z]+)?", | |
| ... lambda mo: mo.group(0).capitalize(), | |
| ... s) | |
| ... | |
| >>> titlecase("they're bill's friends.") | |
| "They're Bill's Friends." | |
| See also "istitle()". | |
| str.translate(table, /) | |
| Return a copy of the string in which each character has been mapped | |
| through the given translation table. The table must be an object | |
| that implements indexing via "__getitem__()", typically a *mapping* | |
| or *sequence*. When indexed by a Unicode ordinal (an integer), the | |
| table object can do any of the following: return a Unicode ordinal | |
| or a string, to map the character to one or more other characters; | |
| return "None", to delete the character from the return string; or | |
| raise a "LookupError" exception, to map the character to itself. | |
| You can use "str.maketrans()" to create a translation map from | |
| character-to-character mappings in different formats. | |
| The following example uses a mapping to replace "'a'" with "'X'", | |
| "'b'" with "'Y'", and delete "'c'": | |
| >>> 'abc123'.translate({ord('a'): 'X', ord('b'): 'Y', ord('c'): None}) | |
| 'XY123' | |
| See also the "codecs" module for a more flexible approach to custom | |
| character mappings. | |
| str.upper() | |
| Return a copy of the string with all the cased characters [4] | |
| converted to uppercase. Note that "s.upper().isupper()" might be | |
| "False" if "s" contains uncased characters or if the Unicode | |
| category of the resulting character(s) is not “Lu” (Letter, | |
| uppercase), but e.g. “Lt” (Letter, titlecase). | |
| The uppercasing algorithm used is described in section 3.13.2 | |
| ‘Default Case Conversion’ of the Unicode Standard. | |
| str.zfill(width, /) | |
| Return a copy of the string left filled with ASCII "'0'" digits to | |
| make a string of length *width*. A leading sign prefix | |
| ("'+'"/"'-'") is handled by inserting the padding *after* the sign | |
| character rather than before. The original string is returned if | |
| *width* is less than or equal to "len(s)". | |
| For example: | |
| >>> "42".zfill(5) | |
| '00042' | |
| >>> "-42".zfill(5) | |
| '-0042' | |
| See also "rjust()". | |
| ''', | |
| 'strings': '''String and Bytes literals | |
| ************************* | |
| String literals are text enclosed in single quotes ("'") or double | |
| quotes ("""). For example: | |
| "spam" | |
| 'eggs' | |
| The quote used to start the literal also terminates it, so a string | |
| literal can only contain the other quote (except with escape | |
| sequences, see below). For example: | |
| 'Say "Hello", please.' | |
| "Don't do that!" | |
| Except for this limitation, the choice of quote character ("'" or """) | |
| does not affect how the literal is parsed. | |
| Inside a string literal, the backslash ("\\") character introduces an | |
| *escape sequence*, which has special meaning depending on the | |
| character after the backslash. For example, "\\"" denotes the double | |
| quote character, and does *not* end the string: | |
| >>> print("Say \\"Hello\\" to everyone!") | |
| Say "Hello" to everyone! | |
| See escape sequences below for a full list of such sequences, and more | |
| details. | |
| Triple-quoted strings | |
| ===================== | |
| Strings can also be enclosed in matching groups of three single or | |
| double quotes. These are generally referred to as *triple-quoted | |
| strings*: | |
| """This is a triple-quoted string.""" | |
| In triple-quoted literals, unescaped quotes are allowed (and are | |
| retained), except that three unescaped quotes in a row terminate the | |
| literal, if they are of the same kind ("'" or """) used at the start: | |
| """This string has "quotes" inside.""" | |
| Unescaped newlines are also allowed and retained: | |
| \'\'\'This triple-quoted string | |
| continues on the next line.\'\'\' | |
| String prefixes | |
| =============== | |
| String literals can have an optional *prefix* that influences how the | |
| content of the literal is parsed, for example: | |
| b"data" | |
| f'{result=}' | |
| The allowed prefixes are: | |
| * "b": Bytes literal | |
| * "r": Raw string | |
| * "f": Formatted string literal (“f-string”) | |
| * "t": Template string literal (“t-string”) | |
| * "u": No effect (allowed for backwards compatibility) | |
| See the linked sections for details on each type. | |
| Prefixes are case-insensitive (for example, ‘"B"’ works the same as | |
| ‘"b"’). The ‘"r"’ prefix can be combined with ‘"f"’, ‘"t"’ or ‘"b"’, | |
| so ‘"fr"’, ‘"rf"’, ‘"tr"’, ‘"rt"’, ‘"br"’, and ‘"rb"’ are also valid | |
| prefixes. | |
| Added in version 3.3: The "'rb'" prefix of raw bytes literals has been | |
| added as a synonym of "'br'".Support for the unicode legacy literal | |
| ("u'value'") was reintroduced to simplify the maintenance of dual | |
| Python 2.x and 3.x codebases. See **PEP 414** for more information. | |
| Formal grammar | |
| ============== | |
| String literals, except “f-strings” and “t-strings”, are described by | |
| the following lexical definitions. | |
| These definitions use negative lookaheads ("!") to indicate that an | |
| ending quote ends the literal. | |
| STRING: [stringprefix] (stringcontent) | |
| stringprefix: <("r" | "u" | "b" | "br" | "rb"), case-insensitive> | |
| stringcontent: | |
| | "\'\'\'" ( !"\'\'\'" longstringitem)* "\'\'\'" | |
| | '"""' ( !'"""' longstringitem)* '"""' | |
| | "'" ( !"'" stringitem)* "'" | |
| | '"' ( !'"' stringitem)* '"' | |
| stringitem: stringchar | stringescapeseq | |
| stringchar: <any source_character, except backslash and newline> | |
| longstringitem: stringitem | newline | |
| stringescapeseq: "\\" <any source_character> | |
| Note that as in all lexical definitions, whitespace is significant. In | |
| particular, the prefix (if any) must be immediately followed by the | |
| starting quote. | |
| Escape sequences | |
| ================ | |
| Unless an ‘"r"’ or ‘"R"’ prefix is present, escape sequences in string | |
| and bytes literals are interpreted according to rules similar to those | |
| used by Standard C. The recognized escape sequences are: | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | Escape Sequence | Meaning | | |
| |====================================================|====================================================| | |
| | "\\"<newline> | Ignored end of line | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | "\\\\" | Backslash | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | "\\'" | Single quote | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | "\\"" | Double quote | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | "\\a" | ASCII Bell (BEL) | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | "\\b" | ASCII Backspace (BS) | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | "\\f" | ASCII Formfeed (FF) | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | "\\n" | ASCII Linefeed (LF) | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | "\\r" | ASCII Carriage Return (CR) | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | "\\t" | ASCII Horizontal Tab (TAB) | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | "\\v" | ASCII Vertical Tab (VT) | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | "\\*ooo*" | Octal character | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | "\\x*hh*" | Hexadecimal character | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | "\\N{*name*}" | Named Unicode character | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | "\\u*xxxx*" | Hexadecimal Unicode character | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | "\\U*xxxxxxxx*" | Hexadecimal Unicode character | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| Ignored end of line | |
| ------------------- | |
| A backslash can be added at the end of a line to ignore the newline: | |
| >>> 'This string will not include \\ | |
| ... backslashes or newline characters.' | |
| 'This string will not include backslashes or newline characters.' | |
| The same result can be achieved using triple-quoted strings, or | |
| parentheses and string literal concatenation. | |
| Escaped characters | |
| ------------------ | |
| To include a backslash in a non-raw Python string literal, it must be | |
| doubled. The "\\\\" escape sequence denotes a single backslash | |
| character: | |
| >>> print('C:\\\\Program Files') | |
| C:\\Program Files | |
| Similarly, the "\\'" and "\\"" sequences denote the single and double | |
| quote character, respectively: | |
| >>> print('\\' and \\"') | |
| ' and " | |
| Octal character | |
| --------------- | |
| The sequence "\\*ooo*" denotes a *character* with the octal (base 8) | |
| value *ooo*: | |
| >>> '\\120' | |
| 'P' | |
| Up to three octal digits (0 through 7) are accepted. | |
| In a bytes literal, *character* means a *byte* with the given value. | |
| In a string literal, it means a Unicode character with the given | |
| value. | |
| Changed in version 3.11: Octal escapes with value larger than "0o377" | |
| (255) produce a "DeprecationWarning". | |
| Changed in version 3.12: Octal escapes with value larger than "0o377" | |
| (255) produce a "SyntaxWarning". In a future Python version they will | |
| raise a "SyntaxError". | |
| Hexadecimal character | |
| --------------------- | |
| The sequence "\\x*hh*" denotes a *character* with the hex (base 16) | |
| value *hh*: | |
| >>> '\\x50' | |
| 'P' | |
| Unlike in Standard C, exactly two hex digits are required. | |
| In a bytes literal, *character* means a *byte* with the given value. | |
| In a string literal, it means a Unicode character with the given | |
| value. | |
| Named Unicode character | |
| ----------------------- | |
| The sequence "\\N{*name*}" denotes a Unicode character with the given | |
| *name*: | |
| >>> '\\N{LATIN CAPITAL LETTER P}' | |
| 'P' | |
| >>> '\\N{SNAKE}' | |
| '🐍' | |
| This sequence cannot appear in bytes literals. | |
| Changed in version 3.3: Support for name aliases has been added. | |
| Hexadecimal Unicode characters | |
| ------------------------------ | |
| These sequences "\\u*xxxx*" and "\\U*xxxxxxxx*" denote the Unicode | |
| character with the given hex (base 16) value. Exactly four digits are | |
| required for "\\u"; exactly eight digits are required for "\\U". The | |
| latter can encode any Unicode character. | |
| >>> '\\u1234' | |
| 'ሴ' | |
| >>> '\\U0001f40d' | |
| '🐍' | |
| These sequences cannot appear in bytes literals. | |
| Unrecognized escape sequences | |
| ----------------------------- | |
| Unlike in Standard C, all unrecognized escape sequences are left in | |
| the string unchanged, that is, *the backslash is left in the result*: | |
| >>> print('\\q') | |
| \\q | |
| >>> list('\\q') | |
| ['\\\\', 'q'] | |
| Note that for bytes literals, the escape sequences only recognized in | |
| string literals ("\\N...", "\\u...", "\\U...") fall into the category of | |
| unrecognized escapes. | |
| Changed in version 3.6: Unrecognized escape sequences produce a | |
| "DeprecationWarning". | |
| Changed in version 3.12: Unrecognized escape sequences produce a | |
| "SyntaxWarning". In a future Python version they will raise a | |
| "SyntaxError". | |
| Bytes literals | |
| ============== | |
| *Bytes literals* are always prefixed with ‘"b"’ or ‘"B"’; they produce | |
| an instance of the "bytes" type instead of the "str" type. They may | |
| only contain ASCII characters; bytes with a numeric value of 128 or | |
| greater must be expressed with escape sequences (typically Hexadecimal | |
| character or Octal character): | |
| >>> b'\\x89PNG\\r\\n\\x1a\\n' | |
| b'\\x89PNG\\r\\n\\x1a\\n' | |
| >>> list(b'\\x89PNG\\r\\n\\x1a\\n') | |
| [137, 80, 78, 71, 13, 10, 26, 10] | |
| Similarly, a zero byte must be expressed using an escape sequence | |
| (typically "\\0" or "\\x00"). | |
| Raw string literals | |
| =================== | |
| Both string and bytes literals may optionally be prefixed with a | |
| letter ‘"r"’ or ‘"R"’; such constructs are called *raw string | |
| literals* and *raw bytes literals* respectively and treat backslashes | |
| as literal characters. As a result, in raw string literals, escape | |
| sequences are not treated specially: | |
| >>> r'\\d{4}-\\d{2}-\\d{2}' | |
| '\\\\d{4}-\\\\d{2}-\\\\d{2}' | |
| Even in a raw literal, quotes can be escaped with a backslash, but the | |
| backslash remains in the result; for example, "r"\\""" is a valid | |
| string literal consisting of two characters: a backslash and a double | |
| quote; "r"\\"" is not a valid string literal (even a raw string cannot | |
| end in an odd number of backslashes). Specifically, *a raw literal | |
| cannot end in a single backslash* (since the backslash would escape | |
| the following quote character). Note also that a single backslash | |
| followed by a newline is interpreted as those two characters as part | |
| of the literal, *not* as a line continuation. | |
| f-strings | |
| ========= | |
| Added in version 3.6. | |
| Changed in version 3.7: The "await" and "async for" can be used in | |
| expressions within f-strings. | |
| Changed in version 3.8: Added the debug specifier ("=") | |
| Changed in version 3.12: Many restrictions on expressions within | |
| f-strings have been removed. Notably, nested strings, comments, and | |
| backslashes are now permitted. | |
| A *formatted string literal* or *f-string* is a string literal that is | |
| prefixed with ‘"f"’ or ‘"F"’. Unlike other string literals, f-strings | |
| do not have a constant value. They may contain *replacement fields* | |
| delimited by curly braces "{}". Replacement fields contain expressions | |
| which are evaluated at run time. For example: | |
| >>> who = 'nobody' | |
| >>> nationality = 'Spanish' | |
| >>> f'{who.title()} expects the {nationality} Inquisition!' | |
| 'Nobody expects the Spanish Inquisition!' | |
| Any doubled curly braces ("{{" or "}}") outside replacement fields are | |
| replaced with the corresponding single curly brace: | |
| >>> print(f'{{...}}') | |
| {...} | |
| Other characters outside replacement fields are treated like in | |
| ordinary string literals. This means that escape sequences are decoded | |
| (except when a literal is also marked as a raw string), and newlines | |
| are possible in triple-quoted f-strings: | |
| >>> name = 'Galahad' | |
| >>> favorite_color = 'blue' | |
| >>> print(f'{name}:\\t{favorite_color}') | |
| Galahad: blue | |
| >>> print(rf"C:\\Users\\{name}") | |
| C:\\Users\\Galahad | |
| >>> print(f\'\'\'Three shall be the number of the counting | |
| ... and the number of the counting shall be three.\'\'\') | |
| Three shall be the number of the counting | |
| and the number of the counting shall be three. | |
| Expressions in formatted string literals are treated like regular | |
| Python expressions. Each expression is evaluated in the context where | |
| the formatted string literal appears, in order from left to right. An | |
| empty expression is not allowed, and both "lambda" and assignment | |
| expressions ":=" must be surrounded by explicit parentheses: | |
| >>> f'{(half := 1/2)}, {half * 42}' | |
| '0.5, 21.0' | |
| Reusing the outer f-string quoting type inside a replacement field is | |
| permitted: | |
| >>> a = dict(x=2) | |
| >>> f"abc {a["x"]} def" | |
| 'abc 2 def' | |
| Backslashes are also allowed in replacement fields and are evaluated | |
| the same way as in any other context: | |
| >>> a = ["a", "b", "c"] | |
| >>> print(f"List a contains:\\n{"\\n".join(a)}") | |
| List a contains: | |
| a | |
| b | |
| c | |
| It is possible to nest f-strings: | |
| >>> name = 'world' | |
| >>> f'Repeated:{f' hello {name}' * 3}' | |
| 'Repeated: hello world hello world hello world' | |
| Portable Python programs should not use more than 5 levels of nesting. | |
| **CPython implementation detail:** CPython does not limit nesting of | |
| f-strings. | |
| Replacement expressions can contain newlines in both single-quoted and | |
| triple-quoted f-strings and they can contain comments. Everything that | |
| comes after a "#" inside a replacement field is a comment (even | |
| closing braces and quotes). This means that replacement fields with | |
| comments must be closed in a different line: | |
| >>> a = 2 | |
| >>> f"abc{a # This comment }" continues until the end of the line | |
| ... + 3}" | |
| 'abc5' | |
| After the expression, replacement fields may optionally contain: | |
| * a *debug specifier* – an equal sign ("="), optionally surrounded by | |
| whitespace on one or both sides; | |
| * a *conversion specifier* – "!s", "!r" or "!a"; and/or | |
| * a *format specifier* prefixed with a colon (":"). | |
| See the Standard Library section on f-strings for details on how these | |
| fields are evaluated. | |
| As that section explains, *format specifiers* are passed as the second | |
| argument to the "format()" function to format a replacement field | |
| value. For example, they can be used to specify a field width and | |
| padding characters using the Format Specification Mini-Language: | |
| >>> number = 14.3 | |
| >>> f'{number:20.7f}' | |
| ' 14.3000000' | |
| Top-level format specifiers may include nested replacement fields: | |
| >>> field_size = 20 | |
| >>> precision = 7 | |
| >>> f'{number:{field_size}.{precision}f}' | |
| ' 14.3000000' | |
| These nested fields may include their own conversion fields and format | |
| specifiers: | |
| >>> number = 3 | |
| >>> f'{number:{field_size}}' | |
| ' 3' | |
| >>> f'{number:{field_size:05}}' | |
| '00000000000000000003' | |
| However, these nested fields may not include more deeply nested | |
| replacement fields. | |
| Formatted string literals cannot be used as *docstrings*, even if they | |
| do not include expressions: | |
| >>> def foo(): | |
| ... f"Not a docstring" | |
| ... | |
| >>> print(foo.__doc__) | |
| None | |
| See also: | |
| * **PEP 498** – Literal String Interpolation | |
| * **PEP 701** – Syntactic formalization of f-strings | |
| * "str.format()", which uses a related format string mechanism. | |
| t-strings | |
| ========= | |
| Added in version 3.14. | |
| A *template string literal* or *t-string* is a string literal that is | |
| prefixed with ‘"t"’ or ‘"T"’. These strings follow the same syntax | |
| rules as formatted string literals. For differences in evaluation | |
| rules, see the Standard Library section on t-strings | |
| Formal grammar for f-strings | |
| ============================ | |
| F-strings are handled partly by the *lexical analyzer*, which produces | |
| the tokens "FSTRING_START", "FSTRING_MIDDLE" and "FSTRING_END", and | |
| partly by the parser, which handles expressions in the replacement | |
| field. The exact way the work is split is a CPython implementation | |
| detail. | |
| Correspondingly, the f-string grammar is a mix of lexical and | |
| syntactic definitions. | |
| Whitespace is significant in these situations: | |
| * There may be no whitespace in "FSTRING_START" (between the prefix | |
| and quote). | |
| * Whitespace in "FSTRING_MIDDLE" is part of the literal string | |
| contents. | |
| * In "fstring_replacement_field", if "f_debug_specifier" is present, | |
| all whitespace after the opening brace until the | |
| "f_debug_specifier", as well as whitespace immediately following | |
| "f_debug_specifier", is retained as part of the expression. | |
| **CPython implementation detail:** The expression is not handled in | |
| the tokenization phase; it is retrieved from the source code using | |
| locations of the "{" token and the token after "=". | |
| The "FSTRING_MIDDLE" definition uses negative lookaheads ("!") to | |
| indicate special characters (backslash, newline, "{", "}") and | |
| sequences ("f_quote"). | |
| fstring: FSTRING_START fstring_middle* FSTRING_END | |
| FSTRING_START: fstringprefix ("'" | '"' | "\'\'\'" | '"""') | |
| FSTRING_END: f_quote | |
| fstringprefix: <("f" | "fr" | "rf"), case-insensitive> | |
| f_debug_specifier: '=' | |
| f_quote: <the quote character(s) used in FSTRING_START> | |
| fstring_middle: | |
| | fstring_replacement_field | |
| | FSTRING_MIDDLE | |
| FSTRING_MIDDLE: | |
| | (!"\\" !newline !'{' !'}' !f_quote) source_character | |
| | stringescapeseq | |
| | "{{" | |
| | "}}" | |
| | <newline, in triple-quoted f-strings only> | |
| fstring_replacement_field: | |
| | '{' f_expression [f_debug_specifier] [fstring_conversion] | |
| [fstring_full_format_spec] '}' | |
| fstring_conversion: | |
| | "!" ("s" | "r" | "a") | |
| fstring_full_format_spec: | |
| | ':' fstring_format_spec* | |
| fstring_format_spec: | |
| | FSTRING_MIDDLE | |
| | fstring_replacement_field | |
| f_expression: | |
| | ','.(conditional_expression | "*" or_expr)+ [","] | |
| | yield_expression | |
| Note: | |
| In the above grammar snippet, the "f_quote" and "FSTRING_MIDDLE" | |
| rules are context-sensitive – they depend on the contents of | |
| "FSTRING_START" of the nearest enclosing "fstring".Constructing a | |
| more traditional formal grammar from this template is left as an | |
| exercise for the reader. | |
| The grammar for t-strings is identical to the one for f-strings, with | |
| *t* instead of *f* at the beginning of rule and token names and in the | |
| prefix. | |
| tstring: TSTRING_START tstring_middle* TSTRING_END | |
| <rest of the t-string grammar is omitted; see above> | |
| ''', | |
| 'subscriptions': r'''Subscriptions and slicings | |
| ************************** | |
| The *subscription* syntax is usually used for selecting an element | |
| from a container – for example, to get a value from a "dict": | |
| >>> digits_by_name = {'one': 1, 'two': 2} | |
| >>> digits_by_name['two'] # Subscripting a dictionary using the key 'two' | |
| 2 | |
| In the subscription syntax, the object being subscribed – a primary – | |
| is followed by a *subscript* in square brackets. In the simplest case, | |
| the subscript is a single expression. | |
| Depending on the type of the object being subscribed, the subscript is | |
| sometimes called a *key* (for mappings), *index* (for sequences), or | |
| *type argument* (for *generic types*). Syntactically, these are all | |
| equivalent: | |
| >>> colors = ['red', 'blue', 'green', 'black'] | |
| >>> colors[3] # Subscripting a list using the index 3 | |
| 'black' | |
| >>> list[str] # Parameterizing the list type using the type argument str | |
| list[str] | |
| At runtime, the interpreter will evaluate the primary and the | |
| subscript, and call the primary’s "__getitem__()" or | |
| "__class_getitem__()" *special method* with the subscript as argument. | |
| For more details on which of these methods is called, see | |
| __class_getitem__ versus __getitem__. | |
| To show how subscription works, we can define a custom object that | |
| implements "__getitem__()" and prints out the value of the subscript: | |
| >>> class SubscriptionDemo: | |
| ... def __getitem__(self, key): | |
| ... print(f'subscripted with: {key!r}') | |
| ... | |
| >>> demo = SubscriptionDemo() | |
| >>> demo[1] | |
| subscripted with: 1 | |
| >>> demo['a' * 3] | |
| subscripted with: 'aaa' | |
| See "__getitem__()" documentation for how built-in types handle | |
| subscription. | |
| Subscriptions may also be used as targets in assignment or deletion | |
| statements. In these cases, the interpreter will call the subscripted | |
| object’s "__setitem__()" or "__delitem__()" *special method*, | |
| respectively, instead of "__getitem__()". | |
| >>> colors = ['red', 'blue', 'green', 'black'] | |
| >>> colors[3] = 'white' # Setting item at index | |
| >>> colors | |
| ['red', 'blue', 'green', 'white'] | |
| >>> del colors[3] # Deleting item at index 3 | |
| >>> colors | |
| ['red', 'blue', 'green'] | |
| All advanced forms of *subscript* documented in the following sections | |
| are also usable for assignment and deletion. | |
| Slicings | |
| ======== | |
| A more advanced form of subscription, *slicing*, is commonly used to | |
| extract a portion of a sequence. In this form, the subscript is a | |
| *slice*: up to three expressions separated by colons. Any of the | |
| expressions may be omitted, but a slice must contain at least one | |
| colon: | |
| >>> number_names = ['zero', 'one', 'two', 'three', 'four', 'five'] | |
| >>> number_names[1:3] | |
| ['one', 'two'] | |
| >>> number_names[1:] | |
| ['one', 'two', 'three', 'four', 'five'] | |
| >>> number_names[:3] | |
| ['zero', 'one', 'two'] | |
| >>> number_names[:] | |
| ['zero', 'one', 'two', 'three', 'four', 'five'] | |
| >>> number_names[::2] | |
| ['zero', 'two', 'four'] | |
| >>> number_names[:-3] | |
| ['zero', 'one', 'two'] | |
| >>> del number_names[4:] | |
| >>> number_names | |
| ['zero', 'one', 'two', 'three'] | |
| When a slice is evaluated, the interpreter constructs a "slice" object | |
| whose "start", "stop" and "step" attributes, respectively, are the | |
| results of the expressions between the colons. Any missing expression | |
| evaluates to "None". This "slice" object is then passed to the | |
| "__getitem__()" or "__class_getitem__()" *special method*, as above. | |
| # continuing with the SubscriptionDemo instance defined above: | |
| >>> demo[2:3] | |
| subscripted with: slice(2, 3, None) | |
| >>> demo[::'spam'] | |
| subscripted with: slice(None, None, 'spam') | |
| Comma-separated subscripts | |
| ========================== | |
| The subscript can also be given as two or more comma-separated | |
| expressions or slices: | |
| # continuing with the SubscriptionDemo instance defined above: | |
| >>> demo[1, 2, 3] | |
| subscripted with: (1, 2, 3) | |
| >>> demo[1:2, 3] | |
| subscripted with: (slice(1, 2, None), 3) | |
| This form is commonly used with numerical libraries for slicing multi- | |
| dimensional data. In this case, the interpreter constructs a "tuple" | |
| of the results of the expressions or slices, and passes this tuple to | |
| the "__getitem__()" or "__class_getitem__()" *special method*, as | |
| above. | |
| The subscript may also be given as a single expression or slice | |
| followed by a comma, to specify a one-element tuple: | |
| >>> demo['spam',] | |
| subscripted with: ('spam',) | |
| “Starred” subscriptions | |
| ======================= | |
| Added in version 3.11: Expressions in *tuple_slices* may be starred. | |
| See **PEP 646**. | |
| The subscript can also contain a starred expression. In this case, the | |
| interpreter unpacks the result into a tuple, and passes this tuple to | |
| "__getitem__()" or "__class_getitem__()": | |
| # continuing with the SubscriptionDemo instance defined above: | |
| >>> demo[*range(10)] | |
| subscripted with: (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) | |
| Starred expressions may be combined with comma-separated expressions | |
| and slices: | |
| >>> demo['a', 'b', *range(3), 'c'] | |
| subscripted with: ('a', 'b', 0, 1, 2, 'c') | |
| Formal subscription grammar | |
| =========================== | |
| subscription: primary '[' subscript ']' | |
| subscript: single_subscript | tuple_subscript | |
| single_subscript: proper_slice | assignment_expression | |
| proper_slice: [expression] ":" [expression] [ ":" [expression] ] | |
| tuple_subscript: ','.(single_subscript | starred_expression)+ [','] | |
| Recall that the "|" operator denotes ordered choice. Specifically, in | |
| "subscript", if both alternatives would match, the first | |
| ("single_subscript") has priority. | |
| ''', | |
| 'truth': r'''Truth Value Testing | |
| ******************* | |
| Any object can be tested for truth value, for use in an "if" or | |
| "while" condition or as operand of the Boolean operations below. | |
| By default, an object is considered true unless its class defines | |
| either a "__bool__()" method that returns "False" or a "__len__()" | |
| method that returns zero, when called with the object. [1] If one of | |
| the methods raises an exception when called, the exception is | |
| propagated and the object does not have a truth value (for example, | |
| "NotImplemented"). Here are most of the built-in objects considered | |
| false: | |
| * constants defined to be false: "None" and "False" | |
| * zero of any numeric type: "0", "0.0", "0j", "Decimal(0)", | |
| "Fraction(0, 1)" | |
| * empty sequences and collections: "''", "()", "[]", "{}", "set()", | |
| "range(0)" | |
| Operations and built-in functions that have a Boolean result always | |
| return "0" or "False" for false and "1" or "True" for true, unless | |
| otherwise stated. (Important exception: the Boolean operations "or" | |
| and "and" always return one of their operands.) | |
| ''', | |
| 'try': r'''The "try" statement | |
| ******************* | |
| The "try" statement specifies exception handlers and/or cleanup code | |
| for a group of statements: | |
| try_stmt: try1_stmt | try2_stmt | try3_stmt | |
| try1_stmt: "try" ":" suite | |
| ("except" [expression ["as" identifier]] ":" suite)+ | |
| ["else" ":" suite] | |
| ["finally" ":" suite] | |
| try2_stmt: "try" ":" suite | |
| ("except" "*" expression ["as" identifier] ":" suite)+ | |
| ["else" ":" suite] | |
| ["finally" ":" suite] | |
| try3_stmt: "try" ":" suite | |
| "finally" ":" suite | |
| Additional information on exceptions can be found in section | |
| Exceptions, and information on using the "raise" statement to generate | |
| exceptions may be found in section The raise statement. | |
| Changed in version 3.14: Support for optionally dropping grouping | |
| parentheses when using multiple exception types. See **PEP 758**. | |
| "except" clause | |
| =============== | |
| The "except" clause(s) specify one or more exception handlers. When no | |
| exception occurs in the "try" clause, no exception handler is | |
| executed. When an exception occurs in the "try" suite, a search for an | |
| exception handler is started. This search inspects the "except" | |
| clauses in turn until one is found that matches the exception. An | |
| expression-less "except" clause, if present, must be last; it matches | |
| any exception. | |
| For an "except" clause with an expression, the expression must | |
| evaluate to an exception type or a tuple of exception types. | |
| Parentheses can be dropped if multiple exception types are provided | |
| and the "as" clause is not used. The raised exception matches an | |
| "except" clause whose expression evaluates to the class or a *non- | |
| virtual base class* of the exception object, or to a tuple that | |
| contains such a class. | |
| If no "except" clause matches the exception, the search for an | |
| exception handler continues in the surrounding code and on the | |
| invocation stack. [1] | |
| If the evaluation of an expression in the header of an "except" clause | |
| raises an exception, the original search for a handler is canceled and | |
| a search starts for the new exception in the surrounding code and on | |
| the call stack (it is treated as if the entire "try" statement raised | |
| the exception). | |
| When a matching "except" clause is found, the exception is assigned to | |
| the target specified after the "as" keyword in that "except" clause, | |
| if present, and the "except" clause’s suite is executed. All "except" | |
| clauses must have an executable block. When the end of this block is | |
| reached, execution continues normally after the entire "try" | |
| statement. (This means that if two nested handlers exist for the same | |
| exception, and the exception occurs in the "try" clause of the inner | |
| handler, the outer handler will not handle the exception.) | |
| When an exception has been assigned using "as target", it is cleared | |
| at the end of the "except" clause. This is as if: | |
| except E as N: | |
| foo | |
| was translated to: | |
| except E as N: | |
| try: | |
| foo | |
| finally: | |
| del N | |
| This means the exception must be assigned to a different name to be | |
| able to refer to it after the "except" clause. Exceptions are cleared | |
| because with the traceback attached to them, they form a reference | |
| cycle with the stack frame, keeping all locals in that frame alive | |
| until the next garbage collection occurs. | |
| Before an "except" clause’s suite is executed, the exception is stored | |
| in the "sys" module, where it can be accessed from within the body of | |
| the "except" clause by calling "sys.exception()". When leaving an | |
| exception handler, the exception stored in the "sys" module is reset | |
| to its previous value: | |
| >>> print(sys.exception()) | |
| None | |
| >>> try: | |
| ... raise TypeError | |
| ... except: | |
| ... print(repr(sys.exception())) | |
| ... try: | |
| ... raise ValueError | |
| ... except: | |
| ... print(repr(sys.exception())) | |
| ... print(repr(sys.exception())) | |
| ... | |
| TypeError() | |
| ValueError() | |
| TypeError() | |
| >>> print(sys.exception()) | |
| None | |
| "except*" clause | |
| ================ | |
| The "except*" clause(s) specify one or more handlers for groups of | |
| exceptions ("BaseExceptionGroup" instances). A "try" statement can | |
| have either "except" or "except*" clauses, but not both. The exception | |
| type for matching is mandatory in the case of "except*", so "except*:" | |
| is a syntax error. The type is interpreted as in the case of "except", | |
| but matching is performed on the exceptions contained in the group | |
| that is being handled. A "TypeError" is raised if a matching type is a | |
| subclass of "BaseExceptionGroup", because that would have ambiguous | |
| semantics. | |
| When an exception group is raised in the try block, each "except*" | |
| clause splits (see "split()") it into the subgroups of matching and | |
| non-matching exceptions. If the matching subgroup is not empty, it | |
| becomes the handled exception (the value returned from | |
| "sys.exception()") and assigned to the target of the "except*" clause | |
| (if there is one). Then, the body of the "except*" clause executes. If | |
| the non-matching subgroup is not empty, it is processed by the next | |
| "except*" in the same manner. This continues until all exceptions in | |
| the group have been matched, or the last "except*" clause has run. | |
| After all "except*" clauses execute, the group of unhandled exceptions | |
| is merged with any exceptions that were raised or re-raised from | |
| within "except*" clauses. This merged exception group propagates on: | |
| >>> try: | |
| ... raise ExceptionGroup("eg", | |
| ... [ValueError(1), TypeError(2), OSError(3), OSError(4)]) | |
| ... except* TypeError as e: | |
| ... print(f'caught {type(e)} with nested {e.exceptions}') | |
| ... except* OSError as e: | |
| ... print(f'caught {type(e)} with nested {e.exceptions}') | |
| ... | |
| caught <class 'ExceptionGroup'> with nested (TypeError(2),) | |
| caught <class 'ExceptionGroup'> with nested (OSError(3), OSError(4)) | |
| + Exception Group Traceback (most recent call last): | |
| | File "<doctest default[0]>", line 2, in <module> | |
| | raise ExceptionGroup("eg", | |
| | [ValueError(1), TypeError(2), OSError(3), OSError(4)]) | |
| | ExceptionGroup: eg (1 sub-exception) | |
| +-+---------------- 1 ---------------- | |
| | ValueError: 1 | |
| +------------------------------------ | |
| If the exception raised from the "try" block is not an exception group | |
| and its type matches one of the "except*" clauses, it is caught and | |
| wrapped by an exception group with an empty message string. This | |
| ensures that the type of the target "e" is consistently | |
| "BaseExceptionGroup": | |
| >>> try: | |
| ... raise BlockingIOError | |
| ... except* BlockingIOError as e: | |
| ... print(repr(e)) | |
| ... | |
| ExceptionGroup('', (BlockingIOError(),)) | |
| "break", "continue" and "return" cannot appear in an "except*" clause. | |
| "else" clause | |
| ============= | |
| The optional "else" clause is executed if the control flow leaves the | |
| "try" suite, no exception was raised, and no "return", "continue", or | |
| "break" statement was executed. Exceptions in the "else" clause are | |
| not handled by the preceding "except" clauses. | |
| "finally" clause | |
| ================ | |
| If "finally" is present, it specifies a ‘cleanup’ handler. The "try" | |
| clause is executed, including any "except" and "else" clauses. If an | |
| exception occurs in any of the clauses and is not handled, the | |
| exception is temporarily saved. The "finally" clause is executed. If | |
| there is a saved exception it is re-raised at the end of the "finally" | |
| clause. If the "finally" clause raises another exception, the saved | |
| exception is set as the context of the new exception. If the "finally" | |
| clause executes a "return", "break" or "continue" statement, the saved | |
| exception is discarded. For example, this function returns 42. | |
| def f(): | |
| try: | |
| 1/0 | |
| finally: | |
| return 42 | |
| The exception information is not available to the program during | |
| execution of the "finally" clause. | |
| When a "return", "break" or "continue" statement is executed in the | |
| "try" suite of a "try"…"finally" statement, the "finally" clause is | |
| also executed ‘on the way out.’ | |
| The return value of a function is determined by the last "return" | |
| statement executed. Since the "finally" clause always executes, a | |
| "return" statement executed in the "finally" clause will always be the | |
| last one executed. The following function returns ‘finally’. | |
| def foo(): | |
| try: | |
| return 'try' | |
| finally: | |
| return 'finally' | |
| Changed in version 3.8: Prior to Python 3.8, a "continue" statement | |
| was illegal in the "finally" clause due to a problem with the | |
| implementation. | |
| Changed in version 3.14: The compiler emits a "SyntaxWarning" when a | |
| "return", "break" or "continue" appears in a "finally" block (see | |
| **PEP 765**). | |
| ''', | |
| 'types': r'''The standard type hierarchy | |
| *************************** | |
| Below is a list of the types that are built into Python. Extension | |
| modules (written in C, Java, or other languages, depending on the | |
| implementation) can define additional types. Future versions of | |
| Python may add types to the type hierarchy (e.g., rational numbers, | |
| efficiently stored arrays of integers, etc.), although such additions | |
| will often be provided via the standard library instead. | |
| Some of the type descriptions below contain a paragraph listing | |
| ‘special attributes.’ These are attributes that provide access to the | |
| implementation and are not intended for general use. Their definition | |
| may change in the future. | |
| None | |
| ==== | |
| This type has a single value. There is a single object with this | |
| value. This object is accessed through the built-in name "None". It is | |
| used to signify the absence of a value in many situations, e.g., it is | |
| returned from functions that don’t explicitly return anything. Its | |
| truth value is false. | |
| NotImplemented | |
| ============== | |
| This type has a single value. There is a single object with this | |
| value. This object is accessed through the built-in name | |
| "NotImplemented". Numeric methods and rich comparison methods should | |
| return this value if they do not implement the operation for the | |
| operands provided. (The interpreter will then try the reflected | |
| operation, or some other fallback, depending on the operator.) It | |
| should not be evaluated in a boolean context. | |
| See Implementing the arithmetic operations for more details. | |
| Changed in version 3.9: Evaluating "NotImplemented" in a boolean | |
| context was deprecated. | |
| Changed in version 3.14: Evaluating "NotImplemented" in a boolean | |
| context now raises a "TypeError". It previously evaluated to "True" | |
| and emitted a "DeprecationWarning" since Python 3.9. | |
| Ellipsis | |
| ======== | |
| This type has a single value. There is a single object with this | |
| value. This object is accessed through the literal "..." or the built- | |
| in name "Ellipsis". Its truth value is true. | |
| "numbers.Number" | |
| ================ | |
| These are created by numeric literals and returned as results by | |
| arithmetic operators and arithmetic built-in functions. Numeric | |
| objects are immutable; once created their value never changes. Python | |
| numbers are of course strongly related to mathematical numbers, but | |
| subject to the limitations of numerical representation in computers. | |
| The string representations of the numeric classes, computed by | |
| "__repr__()" and "__str__()", have the following properties: | |
| * They are valid numeric literals which, when passed to their class | |
| constructor, produce an object having the value of the original | |
| numeric. | |
| * The representation is in base 10, when possible. | |
| * Leading zeros, possibly excepting a single zero before a decimal | |
| point, are not shown. | |
| * Trailing zeros, possibly excepting a single zero after a decimal | |
| point, are not shown. | |
| * A sign is shown only when the number is negative. | |
| Python distinguishes between integers, floating-point numbers, and | |
| complex numbers: | |
| "numbers.Integral" | |
| ------------------ | |
| These represent elements from the mathematical set of integers | |
| (positive and negative). | |
| Note: | |
| The rules for integer representation are intended to give the most | |
| meaningful interpretation of shift and mask operations involving | |
| negative integers. | |
| There are two types of integers: | |
| Integers ("int") | |
| These represent numbers in an unlimited range, subject to available | |
| (virtual) memory only. For the purpose of shift and mask | |
| operations, a binary representation is assumed, and negative | |
| numbers are represented in a variant of 2’s complement which gives | |
| the illusion of an infinite string of sign bits extending to the | |
| left. | |
| Booleans ("bool") | |
| These represent the truth values False and True. The two objects | |
| representing the values "False" and "True" are the only Boolean | |
| objects. The Boolean type is a subtype of the integer type, and | |
| Boolean values behave like the values 0 and 1, respectively, in | |
| almost all contexts, the exception being that when converted to a | |
| string, the strings ""False"" or ""True"" are returned, | |
| respectively. | |
| "numbers.Real" ("float") | |
| ------------------------ | |
| These represent machine-level double precision floating-point numbers. | |
| You are at the mercy of the underlying machine architecture (and C or | |
| Java implementation) for the accepted range and handling of overflow. | |
| Python does not support single-precision floating-point numbers; the | |
| savings in processor and memory usage that are usually the reason for | |
| using these are dwarfed by the overhead of using objects in Python, so | |
| there is no reason to complicate the language with two kinds of | |
| floating-point numbers. | |
| "numbers.Complex" ("complex") | |
| ----------------------------- | |
| These represent complex numbers as a pair of machine-level double | |
| precision floating-point numbers. The same caveats apply as for | |
| floating-point numbers. The real and imaginary parts of a complex | |
| number "z" can be retrieved through the read-only attributes "z.real" | |
| and "z.imag". | |
| Sequences | |
| ========= | |
| These represent finite ordered sets indexed by non-negative numbers. | |
| The built-in function "len()" returns the number of items of a | |
| sequence. When the length of a sequence is *n*, the index set contains | |
| the numbers 0, 1, …, *n*-1. Item *i* of sequence *a* is selected by | |
| "a[i]". Some sequences, including built-in sequences, interpret | |
| negative subscripts by adding the sequence length. For example, | |
| "a[-2]" equals "a[n-2]", the second to last item of sequence a with | |
| length "n". | |
| The resulting value must be a nonnegative integer less than the number | |
| of items in the sequence. If it is not, an "IndexError" is raised. | |
| Sequences also support slicing: "a[start:stop]" selects all items with | |
| index *k* such that *start* "<=" *k* "<" *stop*. When used as an | |
| expression, a slice is a sequence of the same type. The comment above | |
| about negative subscripts also applies to negative slice positions. | |
| Note that no error is raised if a slice position is less than zero or | |
| larger than the length of the sequence. | |
| If *start* is missing or "None", slicing behaves as if *start* was | |
| zero. If *stop* is missing or "None", slicing behaves as if *stop* was | |
| equal to the length of the sequence. | |
| Some sequences also support “extended slicing” with a third “step” | |
| parameter: "a[i:j:k]" selects all items of *a* with index *x* where "x | |
| = i + n*k", *n* ">=" "0" and *i* "<=" *x* "<" *j*. | |
| Sequences are distinguished according to their mutability: | |
| Immutable sequences | |
| ------------------- | |
| An object of an immutable sequence type cannot change once it is | |
| created. (If the object contains references to other objects, these | |
| other objects may be mutable and may be changed; however, the | |
| collection of objects directly referenced by an immutable object | |
| cannot change.) | |
| The following types are immutable sequences: | |
| Strings | |
| A string ("str") is a sequence of values that represent | |
| *characters*, or more formally, *Unicode code points*. All the code | |
| points in the range "0" to "0x10FFFF" can be represented in a | |
| string. | |
| Python doesn’t have a dedicated *character* type. Instead, every | |
| code point in the string is represented as a string object with | |
| length "1". | |
| The built-in function "ord()" converts a code point from its string | |
| form to an integer in the range "0" to "0x10FFFF"; "chr()" converts | |
| an integer in the range "0" to "0x10FFFF" to the corresponding | |
| length "1" string object. "str.encode()" can be used to convert a | |
| "str" to "bytes" using the given text encoding, and | |
| "bytes.decode()" can be used to achieve the opposite. | |
| Tuples | |
| The items of a "tuple" are arbitrary Python objects. Tuples of two | |
| or more items are formed by comma-separated lists of expressions. | |
| A tuple of one item (a ‘singleton’) can be formed by affixing a | |
| comma to an expression (an expression by itself does not create a | |
| tuple, since parentheses must be usable for grouping of | |
| expressions). An empty tuple can be formed by an empty pair of | |
| parentheses. | |
| Bytes | |
| A "bytes" object is an immutable array. The items are 8-bit bytes, | |
| represented by integers in the range 0 <= x < 256. Bytes literals | |
| (like "b'abc'") and the built-in "bytes()" constructor can be used | |
| to create bytes objects. Also, bytes objects can be decoded to | |
| strings via the "decode()" method. | |
| Mutable sequences | |
| ----------------- | |
| Mutable sequences can be changed after they are created. The | |
| subscription and slicing notations can be used as the target of | |
| assignment and "del" (delete) statements. | |
| Note: | |
| The "collections" and "array" module provide additional examples of | |
| mutable sequence types. | |
| There are currently two intrinsic mutable sequence types: | |
| Lists | |
| The items of a list are arbitrary Python objects. Lists are formed | |
| by placing a comma-separated list of expressions in square | |
| brackets. (Note that there are no special cases needed to form | |
| lists of length 0 or 1.) | |
| Byte Arrays | |
| A bytearray object is a mutable array. They are created by the | |
| built-in "bytearray()" constructor. Aside from being mutable (and | |
| hence unhashable), byte arrays otherwise provide the same interface | |
| and functionality as immutable "bytes" objects. | |
| Set types | |
| ========= | |
| These represent unordered, finite sets of unique, immutable objects. | |
| As such, they cannot be indexed by any subscript. However, they can be | |
| iterated over, and the built-in function "len()" returns the number of | |
| items in a set. Common uses for sets are fast membership testing, | |
| removing duplicates from a sequence, and computing mathematical | |
| operations such as intersection, union, difference, and symmetric | |
| difference. | |
| For set elements, the same immutability rules apply as for dictionary | |
| keys. Note that numeric types obey the normal rules for numeric | |
| comparison: if two numbers compare equal (e.g., "1" and "1.0"), only | |
| one of them can be contained in a set. | |
| There are currently two intrinsic set types: | |
| Sets | |
| These represent a mutable set. They are created by the built-in | |
| "set()" constructor and can be modified afterwards by several | |
| methods, such as "add()". | |
| Frozen sets | |
| These represent an immutable set. They are created by the built-in | |
| "frozenset()" constructor. As a frozenset is immutable and | |
| *hashable*, it can be used again as an element of another set, or | |
| as a dictionary key. | |
| Mappings | |
| ======== | |
| These represent finite sets of objects indexed by arbitrary index | |
| sets. The subscript notation "a[k]" selects the item indexed by "k" | |
| from the mapping "a"; this can be used in expressions and as the | |
| target of assignments or "del" statements. The built-in function | |
| "len()" returns the number of items in a mapping. | |
| There are two intrinsic mapping types: | |
| Dictionaries | |
| ------------ | |
| These represent finite sets of objects indexed by nearly arbitrary | |
| values. The only types of values not acceptable as keys are values | |
| containing lists or dictionaries or other mutable types that are | |
| compared by value rather than by object identity, the reason being | |
| that the efficient implementation of dictionaries requires a key’s | |
| hash value to remain constant. Numeric types used for keys obey the | |
| normal rules for numeric comparison: if two numbers compare equal | |
| (e.g., "1" and "1.0") then they can be used interchangeably to index | |
| the same dictionary entry. | |
| Dictionaries preserve insertion order, meaning that keys will be | |
| produced in the same order they were added sequentially over the | |
| dictionary. Replacing an existing key does not change the order, | |
| however removing a key and re-inserting it will add it to the end | |
| instead of keeping its old place. | |
| Dictionaries are mutable; they can be created by the "{}" notation | |
| (see section Dictionary displays). | |
| The extension modules "dbm.ndbm" and "dbm.gnu" provide additional | |
| examples of mapping types, as does the "collections" module. | |
| Changed in version 3.7: Dictionaries did not preserve insertion order | |
| in versions of Python before 3.6. In CPython 3.6, insertion order was | |
| preserved, but it was considered an implementation detail at that time | |
| rather than a language guarantee. | |
| Frozen dictionaries | |
| ------------------- | |
| These represent an immutable dictionary. They are created by the | |
| built-in "frozendict()" constructor. A frozendict is *hashable* if | |
| all of its keys and values are hashable, in which case it can be used | |
| as an element of a set, or as a key in another mapping. "frozendict" | |
| is not a subclass of "dict"; it inherits directly from "object". | |
| Added in version 3.15. | |
| Callable types | |
| ============== | |
| These are the types to which the function call operation (see section | |
| Calls) can be applied: | |
| User-defined functions | |
| ---------------------- | |
| A user-defined function object is created by a function definition | |
| (see section Function definitions). It should be called with an | |
| argument list containing the same number of items as the function’s | |
| formal parameter list. | |
| Special read-only attributes | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | Attribute | Meaning | | |
| |====================================================|====================================================| | |
| | function.__builtins__ | A reference to the "dictionary" that holds the | | |
| | | function’s builtins namespace. Added in version | | |
| | | 3.10. | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | function.__globals__ | A reference to the "dictionary" that holds the | | |
| | | function’s global variables – the global namespace | | |
| | | of the module in which the function was defined. | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | function.__closure__ | "None" or a "tuple" of cells that contain bindings | | |
| | | for the names specified in the "co_freevars" | | |
| | | attribute of the function’s "code object". A cell | | |
| | | object has the attribute "cell_contents". This can | | |
| | | be used to get the value of the cell, as well as | | |
| | | set the value. | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| Special writable attributes | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| Most of these attributes check the type of the assigned value: | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | Attribute | Meaning | | |
| |====================================================|====================================================| | |
| | function.__doc__ | The function’s documentation string, or "None" if | | |
| | | unavailable. | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | function.__name__ | The function’s name. See also: "__name__ | | |
| | | attributes". | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | function.__qualname__ | The function’s *qualified name*. See also: | | |
| | | "__qualname__ attributes". Added in version 3.3. | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | function.__module__ | The name of the module the function was defined | | |
| | | in, or "None" if unavailable. | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | function.__defaults__ | A "tuple" containing default *parameter* values | | |
| | | for those parameters that have defaults, or "None" | | |
| | | if no parameters have a default value. | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | function.__code__ | The code object representing the compiled function | | |
| | | body. | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | function.__dict__ | The namespace supporting arbitrary function | | |
| | | attributes. See also: "__dict__ attributes". | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | function.__annotations__ | A "dictionary" containing annotations of | | |
| | | *parameters*. The keys of the dictionary are the | | |
| | | parameter names, and "'return'" for the return | | |
| | | annotation, if provided. See also: | | |
| | | "object.__annotations__". Changed in version | | |
| | | 3.14: Annotations are now lazily evaluated. See | | |
| | | **PEP 649**. | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | function.__annotate__ | The *annotate function* for this function, or | | |
| | | "None" if the function has no annotations. See | | |
| | | "object.__annotate__". Added in version 3.14. | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | function.__kwdefaults__ | A "dictionary" containing defaults for keyword- | | |
| | | only *parameters*. | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | function.__type_params__ | A "tuple" containing the type parameters of a | | |
| | | generic function. Added in version 3.12. | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| Function objects also support getting and setting arbitrary | |
| attributes, which can be used, for example, to attach metadata to | |
| functions. Regular attribute dot-notation is used to get and set such | |
| attributes. | |
| **CPython implementation detail:** CPython’s current implementation | |
| only supports function attributes on user-defined functions. Function | |
| attributes on built-in functions may be supported in the future. | |
| Additional information about a function’s definition can be retrieved | |
| from its code object (accessible via the "__code__" attribute). | |
| Instance methods | |
| ---------------- | |
| An instance method object combines a class, a class instance and any | |
| callable object (normally a user-defined function). | |
| Special read-only attributes: | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | method.__self__ | Refers to the class instance object to which the | | |
| | | method is bound | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | method.__func__ | Refers to the original function object | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | method.__doc__ | The method’s documentation (same as | | |
| | | "method.__func__.__doc__"). A "string" if the | | |
| | | original function had a docstring, else "None". | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | method.__name__ | The name of the method (same as | | |
| | | "method.__func__.__name__") | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | method.__module__ | The name of the module the method was defined in, | | |
| | | or "None" if unavailable. | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| Methods also support accessing (but not setting) the arbitrary | |
| function attributes on the underlying function object. | |
| User-defined method objects may be created when getting an attribute | |
| of a class (perhaps via an instance of that class), if that attribute | |
| is a user-defined function object or a "classmethod" object. | |
| When an instance method object is created by retrieving a user-defined | |
| function object from a class via one of its instances, its "__self__" | |
| attribute is the instance, and the method object is said to be | |
| *bound*. The new method’s "__func__" attribute is the original | |
| function object. | |
| When an instance method object is created by retrieving a | |
| "classmethod" object from a class or instance, its "__self__" | |
| attribute is the class itself, and its "__func__" attribute is the | |
| function object underlying the class method. | |
| When an instance method object is called, the underlying function | |
| ("__func__") is called, inserting the class instance ("__self__") in | |
| front of the argument list. For instance, when "C" is a class which | |
| contains a definition for a function "f()", and "x" is an instance of | |
| "C", calling "x.f(1)" is equivalent to calling "C.f(x, 1)". | |
| When an instance method object is derived from a "classmethod" object, | |
| the “class instance” stored in "__self__" will actually be the class | |
| itself, so that calling either "x.f(1)" or "C.f(1)" is equivalent to | |
| calling "f(C,1)" where "f" is the underlying function. | |
| It is important to note that user-defined functions which are | |
| attributes of a class instance are not converted to bound methods; | |
| this *only* happens when the function is an attribute of the class. | |
| Generator functions | |
| ------------------- | |
| A function or method which contains a "yield" expression (see section | |
| Yield expressions) is called a *generator function*. Such a function, | |
| when called, always returns an *iterator* object which can be used to | |
| execute the body of the function: calling the iterator’s | |
| "iterator.__next__()" method will cause the function to execute until | |
| it provides a value using the "yield" expression. When the function | |
| executes a "return" statement or falls off the end, a "StopIteration" | |
| exception is raised and the iterator will have reached the end of the | |
| set of values to be returned. | |
| Coroutine functions | |
| ------------------- | |
| A function or method which is defined using "async def" is called a | |
| *coroutine function*. Such a function, when called, returns a | |
| *coroutine* object. It may contain "await" expressions, as well as | |
| "async with" and "async for" statements. See also the Coroutine | |
| Objects section. | |
| Asynchronous generator functions | |
| -------------------------------- | |
| A function or method which is defined using "async def" and which | |
| contains a "yield" expression is called a *asynchronous generator | |
| function*. Such a function, when called, returns an *asynchronous | |
| iterator* object which can be used in an "async for" statement to | |
| execute the body of the function. | |
| Calling the asynchronous iterator’s "aiterator.__anext__" method will | |
| return an *awaitable* which when awaited will execute until it | |
| provides a value using the "yield" expression. When the function | |
| executes an empty "return" statement or falls off the end, a | |
| "StopAsyncIteration" exception is raised and the asynchronous iterator | |
| will have reached the end of the set of values to be yielded. | |
| Built-in functions | |
| ------------------ | |
| A built-in function object is a wrapper around a C function. Examples | |
| of built-in functions are "len()" and "math.sin()" ("math" is a | |
| standard built-in module). The number and type of the arguments are | |
| determined by the C function. Special read-only attributes: | |
| * "__doc__" is the function’s documentation string, or "None" if | |
| unavailable. See "function.__doc__". | |
| * "__name__" is the function’s name. See "function.__name__". | |
| * "__self__" is set to "None" (but see the next item). | |
| * "__module__" is the name of the module the function was defined in | |
| or "None" if unavailable. See "function.__module__". | |
| Built-in methods | |
| ---------------- | |
| This is really a different disguise of a built-in function, this time | |
| containing an object passed to the C function as an implicit extra | |
| argument. An example of a built-in method is "alist.append()", | |
| assuming *alist* is a list object. In this case, the special read-only | |
| attribute "__self__" is set to the object denoted by *alist*. (The | |
| attribute has the same semantics as it does with "other instance | |
| methods".) | |
| Classes | |
| ------- | |
| Classes are callable. These objects normally act as factories for new | |
| instances of themselves, but variations are possible for class types | |
| that override "__new__()". The arguments of the call are passed to | |
| "__new__()" and, in the typical case, to "__init__()" to initialize | |
| the new instance. | |
| Class Instances | |
| --------------- | |
| Instances of arbitrary classes can be made callable by defining a | |
| "__call__()" method in their class. | |
| Modules | |
| ======= | |
| Modules are a basic organizational unit of Python code, and are | |
| created by the import system as invoked either by the "import" | |
| statement, or by calling functions such as "importlib.import_module()" | |
| and built-in "__import__()". A module object has a namespace | |
| implemented by a "dictionary" object (this is the dictionary | |
| referenced by the "__globals__" attribute of functions defined in the | |
| module). Attribute references are translated to lookups in this | |
| dictionary, e.g., "m.x" is equivalent to "m.__dict__["x"]". A module | |
| object does not contain the code object used to initialize the module | |
| (since it isn’t needed once the initialization is done). | |
| Attribute assignment updates the module’s namespace dictionary, e.g., | |
| "m.x = 1" is equivalent to "m.__dict__["x"] = 1". | |
| Import-related attributes on module objects | |
| ------------------------------------------- | |
| Module objects have the following attributes that relate to the import | |
| system. When a module is created using the machinery associated with | |
| the import system, these attributes are filled in based on the | |
| module’s *spec*, before the *loader* executes and loads the module. | |
| To create a module dynamically rather than using the import system, | |
| it’s recommended to use "importlib.util.module_from_spec()", which | |
| will set the various import-controlled attributes to appropriate | |
| values. It’s also possible to use the "types.ModuleType" constructor | |
| to create modules directly, but this technique is more error-prone, as | |
| most attributes must be manually set on the module object after it has | |
| been created when using this approach. | |
| Caution: | |
| With the exception of "__name__", it is **strongly** recommended | |
| that you rely on "__spec__" and its attributes instead of any of the | |
| other individual attributes listed in this subsection. Note that | |
| updating an attribute on "__spec__" will not update the | |
| corresponding attribute on the module itself: | |
| >>> import typing | |
| >>> typing.__name__, typing.__spec__.name | |
| ('typing', 'typing') | |
| >>> typing.__spec__.name = 'spelling' | |
| >>> typing.__name__, typing.__spec__.name | |
| ('typing', 'spelling') | |
| >>> typing.__name__ = 'keyboard_smashing' | |
| >>> typing.__name__, typing.__spec__.name | |
| ('keyboard_smashing', 'spelling') | |
| module.__name__ | |
| The name used to uniquely identify the module in the import system. | |
| For a directly executed module, this will be set to ""__main__"". | |
| This attribute must be set to the fully qualified name of the | |
| module. It is expected to match the value of | |
| "module.__spec__.name". | |
| module.__spec__ | |
| A record of the module’s import-system-related state. | |
| Set to the "module spec" that was used when importing the module. | |
| See Module specs for more details. | |
| Added in version 3.4. | |
| module.__package__ | |
| The *package* a module belongs to. | |
| If the module is top-level (that is, not a part of any specific | |
| package) then the attribute should be set to "''" (the empty | |
| string). Otherwise, it should be set to the name of the module’s | |
| package (which can be equal to "module.__name__" if the module | |
| itself is a package). See **PEP 366** for further details. | |
| This attribute is used instead of "__name__" to calculate explicit | |
| relative imports for main modules. It defaults to "None" for | |
| modules created dynamically using the "types.ModuleType" | |
| constructor; use "importlib.util.module_from_spec()" instead to | |
| ensure the attribute is set to a "str". | |
| It is **strongly** recommended that you use | |
| "module.__spec__.parent" instead of "module.__package__". | |
| "__package__" is now only used as a fallback if "__spec__.parent" | |
| is not set, and this fallback path is deprecated. | |
| Changed in version 3.4: This attribute now defaults to "None" for | |
| modules created dynamically using the "types.ModuleType" | |
| constructor. Previously the attribute was optional. | |
| Changed in version 3.6: The value of "__package__" is expected to | |
| be the same as "__spec__.parent". "__package__" is now only used as | |
| a fallback during import resolution if "__spec__.parent" is not | |
| defined. | |
| Changed in version 3.10: "ImportWarning" is raised if an import | |
| resolution falls back to "__package__" instead of | |
| "__spec__.parent". | |
| Changed in version 3.12: Raise "DeprecationWarning" instead of | |
| "ImportWarning" when falling back to "__package__" during import | |
| resolution. | |
| Deprecated since version 3.13, removed in version 3.16: | |
| "__package__" will cease to be set or taken into consideration by | |
| the import system or standard library. | |
| module.__loader__ | |
| The *loader* object that the import machinery used to load the | |
| module. | |
| This attribute is mostly useful for introspection, but can be used | |
| for additional loader-specific functionality, for example getting | |
| data associated with a loader. | |
| "__loader__" defaults to "None" for modules created dynamically | |
| using the "types.ModuleType" constructor; use | |
| "importlib.util.module_from_spec()" instead to ensure the attribute | |
| is set to a *loader* object. | |
| It is **strongly** recommended that you use | |
| "module.__spec__.loader" instead of "module.__loader__". | |
| Changed in version 3.4: This attribute now defaults to "None" for | |
| modules created dynamically using the "types.ModuleType" | |
| constructor. Previously the attribute was optional. | |
| Deprecated since version 3.12, removed in version 3.16: Setting | |
| "__loader__" on a module while failing to set "__spec__.loader" is | |
| deprecated. In Python 3.16, "__loader__" will cease to be set or | |
| taken into consideration by the import system or the standard | |
| library. | |
| module.__path__ | |
| A (possibly empty) *sequence* of strings enumerating the locations | |
| where the package’s submodules will be found. Non-package modules | |
| should not have a "__path__" attribute. See __path__ attributes on | |
| modules for more details. | |
| It is **strongly** recommended that you use | |
| "module.__spec__.submodule_search_locations" instead of | |
| "module.__path__". | |
| module.__file__ | |
| "__file__" is an optional attribute that may or may not be set. | |
| Both attributes should be a "str" when they are available. | |
| An optional attribute, "__file__" indicates the pathname of the | |
| file from which the module was loaded (if loaded from a file), or | |
| the pathname of the shared library file for extension modules | |
| loaded dynamically from a shared library. It might be missing for | |
| certain types of modules, such as C modules that are statically | |
| linked into the interpreter, and the import system may opt to leave | |
| it unset if it has no semantic meaning (for example, a module | |
| loaded from a database). | |
| Changed in version 3.15: The "__cached__" attribute is no longer set | |
| on modules or taken into consideration by the import system or | |
| standard library. | |
| Other writable attributes on module objects | |
| ------------------------------------------- | |
| As well as the import-related attributes listed above, module objects | |
| also have the following writable attributes: | |
| module.__doc__ | |
| The module’s documentation string, or "None" if unavailable. See | |
| also: "__doc__ attributes". | |
| module.__annotations__ | |
| A dictionary containing *variable annotations* collected during | |
| module body execution. For best practices on working with | |
| "__annotations__", see "annotationlib". | |
| Changed in version 3.14: Annotations are now lazily evaluated. See | |
| **PEP 649**. | |
| module.__annotate__ | |
| The *annotate function* for this module, or "None" if the module | |
| has no annotations. See also: "__annotate__" attributes. | |
| Added in version 3.14. | |
| module.__lazy_modules__ | |
| A container (an object implementing "__contains__()") of fully | |
| qualified module name strings. When defined at module scope, any | |
| regular "import" statement in that module whose target module name | |
| appears in this container is treated as a lazy import, as if the | |
| "lazy" keyword had been used. Imports inside functions, class | |
| bodies, or "try"/"except"/"finally" blocks are unaffected. | |
| See Compatibility via __lazy_modules__ for details and examples. | |
| Added in version 3.15. | |
| Module dictionaries | |
| ------------------- | |
| Module objects also have the following special read-only attribute: | |
| module.__dict__ | |
| The module’s namespace as a dictionary object. Uniquely among the | |
| attributes listed here, "__dict__" cannot be accessed as a global | |
| variable from within a module; it can only be accessed as an | |
| attribute on module objects. | |
| **CPython implementation detail:** Because of the way CPython | |
| clears module dictionaries, the module dictionary will be cleared | |
| when the module falls out of scope even if the dictionary still has | |
| live references. To avoid this, copy the dictionary or keep the | |
| module around while using its dictionary directly. | |
| Custom classes | |
| ============== | |
| Custom class types are typically created by class definitions (see | |
| section Class definitions). A class has a namespace implemented by a | |
| dictionary object. Class attribute references are translated to | |
| lookups in this dictionary, e.g., "C.x" is translated to | |
| "C.__dict__["x"]" (although there are a number of hooks which allow | |
| for other means of locating attributes). When the attribute name is | |
| not found there, the attribute search continues in the base classes. | |
| This search of the base classes uses the C3 method resolution order | |
| which behaves correctly even in the presence of ‘diamond’ inheritance | |
| structures where there are multiple inheritance paths leading back to | |
| a common ancestor. Additional details on the C3 MRO used by Python can | |
| be found at The Python 2.3 Method Resolution Order. | |
| When a class attribute reference (for class "C", say) would yield a | |
| class method object, it is transformed into an instance method object | |
| whose "__self__" attribute is "C". When it would yield a | |
| "staticmethod" object, it is transformed into the object wrapped by | |
| the static method object. See section Implementing Descriptors for | |
| another way in which attributes retrieved from a class may differ from | |
| those actually contained in its "__dict__". | |
| Class attribute assignments update the class’s dictionary, never the | |
| dictionary of a base class. | |
| A class object can be called (see above) to yield a class instance | |
| (see below). | |
| Special attributes | |
| ------------------ | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | Attribute | Meaning | | |
| |====================================================|====================================================| | |
| | type.__name__ | The class’s name. See also: "__name__ attributes". | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | type.__qualname__ | The class’s *qualified name*. See also: | | |
| | | "__qualname__ attributes". | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | type.__module__ | The name of the module in which the class was | | |
| | | defined. | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | type.__dict__ | A "mapping proxy" providing a read-only view of | | |
| | | the class’s namespace. See also: "__dict__ | | |
| | | attributes". | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | type.__bases__ | A "tuple" containing the class’s bases. In most | | |
| | | cases, for a class defined as "class X(A, B, C)", | | |
| | | "X.__bases__" will be exactly equal to "(A, B, | | |
| | | C)". | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | type.__base__ | **CPython implementation detail:** The single base | | |
| | | class in the inheritance chain that is responsible | | |
| | | for the memory layout of instances. This attribute | | |
| | | corresponds to "tp_base" at the C level. | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | type.__doc__ | The class’s documentation string, or "None" if | | |
| | | undefined. Not inherited by subclasses. | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | type.__annotations__ | A dictionary containing *variable annotations* | | |
| | | collected during class body execution. See also: | | |
| | | "__annotations__ attributes". For best practices | | |
| | | on working with "__annotations__", please see | | |
| | | "annotationlib". Use | | |
| | | "annotationlib.get_annotations()" instead of | | |
| | | accessing this attribute directly. Warning: | | |
| | | Accessing the "__annotations__" attribute directly | | |
| | | on a class object may return annotations for the | | |
| | | wrong class, specifically in certain cases where | | |
| | | the class, its base class, or a metaclass is | | |
| | | defined under "from __future__ import | | |
| | | annotations". See **749** for details.This | | |
| | | attribute does not exist on certain builtin | | |
| | | classes. On user-defined classes without | | |
| | | "__annotations__", it is an empty dictionary. | | |
| | | Changed in version 3.14: Annotations are now | | |
| | | lazily evaluated. See **PEP 649**. | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | type.__annotate__() | The *annotate function* for this class, or "None" | | |
| | | if the class has no annotations. See also: | | |
| | | "__annotate__ attributes". Added in version 3.14. | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | type.__type_params__ | A "tuple" containing the type parameters of a | | |
| | | generic class. Added in version 3.12. | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | type.__static_attributes__ | A "tuple" containing names of attributes of this | | |
| | | class which are assigned through "self.X" from any | | |
| | | function in its body. Added in version 3.13. | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | type.__firstlineno__ | The line number of the first line of the class | | |
| | | definition, including decorators. Setting the | | |
| | | "__module__" attribute removes the | | |
| | | "__firstlineno__" item from the type’s dictionary. | | |
| | | Added in version 3.13. | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | type.__mro__ | The "tuple" of classes that are considered when | | |
| | | looking for base classes during method resolution. | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| Special methods | |
| --------------- | |
| In addition to the special attributes described above, all Python | |
| classes also have the following two methods available: | |
| type.mro() | |
| This method can be overridden by a metaclass to customize the | |
| method resolution order for its instances. It is called at class | |
| instantiation, and its result is stored in "__mro__". | |
| type.__subclasses__() | |
| Each class keeps a list of weak references to its immediate | |
| subclasses. This method returns a list of all those references | |
| still alive. The list is in definition order. Example: | |
| >>> class A: pass | |
| >>> class B(A): pass | |
| >>> A.__subclasses__() | |
| [<class 'B'>] | |
| Class instances | |
| =============== | |
| A class instance is created by calling a class object (see above). A | |
| class instance has a namespace implemented as a dictionary which is | |
| the first place in which attribute references are searched. When an | |
| attribute is not found there, and the instance’s class has an | |
| attribute by that name, the search continues with the class | |
| attributes. If a class attribute is found that is a user-defined | |
| function object, it is transformed into an instance method object | |
| whose "__self__" attribute is the instance. Static method and class | |
| method objects are also transformed; see above under “Classes”. See | |
| section Implementing Descriptors for another way in which attributes | |
| of a class retrieved via its instances may differ from the objects | |
| actually stored in the class’s "__dict__". If no class attribute is | |
| found, and the object’s class has a "__getattr__()" method, that is | |
| called to satisfy the lookup. | |
| Attribute assignments and deletions update the instance’s dictionary, | |
| never a class’s dictionary. If the class has a "__setattr__()" or | |
| "__delattr__()" method, this is called instead of updating the | |
| instance dictionary directly. | |
| Class instances can pretend to be numbers, sequences, or mappings if | |
| they have methods with certain special names. See section Special | |
| method names. | |
| Special attributes | |
| ------------------ | |
| object.__class__ | |
| The class to which a class instance belongs. | |
| object.__dict__ | |
| A dictionary or other mapping object used to store an object’s | |
| (writable) attributes. Not all instances have a "__dict__" | |
| attribute; see the section on __slots__ for more details. | |
| I/O objects (also known as file objects) | |
| ======================================== | |
| A *file object* represents an open file. Various shortcuts are | |
| available to create file objects: the "open()" built-in function, and | |
| also "os.popen()", "os.fdopen()", and the "makefile()" method of | |
| socket objects (and perhaps by other functions or methods provided by | |
| extension modules). | |
| File objects implement common methods, listed below, to simplify usage | |
| in generic code. They are expected to be With Statement Context | |
| Managers. | |
| The objects "sys.stdin", "sys.stdout" and "sys.stderr" are initialized | |
| to file objects corresponding to the interpreter’s standard input, | |
| output and error streams; they are all open in text mode and therefore | |
| follow the interface defined by the "io.TextIOBase" abstract class. | |
| file.read(size=-1, /) | |
| Retrieve up to *size* data from the file. As a convenience if | |
| *size* is unspecified or -1 retrieve all data available. | |
| file.write(data, /) | |
| Store *data* to the file. | |
| file.close() | |
| Flush any buffers and close the underlying file. | |
| Internal types | |
| ============== | |
| A few types used internally by the interpreter are exposed to the | |
| user. Their definitions may change with future versions of the | |
| interpreter, but they are mentioned here for completeness. | |
| Code objects | |
| ------------ | |
| Code objects represent *byte-compiled* executable Python code, or | |
| *bytecode*. The difference between a code object and a function object | |
| is that the function object contains an explicit reference to the | |
| function’s globals (the module in which it was defined), while a code | |
| object contains no context; also the default argument values are | |
| stored in the function object, not in the code object (because they | |
| represent values calculated at run-time). Unlike function objects, | |
| code objects are immutable and contain no references (directly or | |
| indirectly) to mutable objects. | |
| Special read-only attributes | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | codeobject.co_name | The function name | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | codeobject.co_qualname | The fully qualified function name Added in | | |
| | | version 3.11. | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | codeobject.co_argcount | The total number of positional *parameters* | | |
| | | (including positional-only parameters and | | |
| | | parameters with default values) that the function | | |
| | | has | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | codeobject.co_posonlyargcount | The number of positional-only *parameters* | | |
| | | (including arguments with default values) that the | | |
| | | function has | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | codeobject.co_kwonlyargcount | The number of keyword-only *parameters* (including | | |
| | | arguments with default values) that the function | | |
| | | has | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | codeobject.co_nlocals | The number of local variables used by the function | | |
| | | (including parameters) | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | codeobject.co_varnames | A "tuple" containing the names of the local | | |
| | | variables in the function (starting with the | | |
| | | parameter names) | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | codeobject.co_cellvars | A "tuple" containing the names of local variables | | |
| | | that are referenced from at least one *nested | | |
| | | scope* inside the function | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | codeobject.co_freevars | A "tuple" containing the names of *free (closure) | | |
| | | variables* that a *nested scope* references in an | | |
| | | outer scope. See also "function.__closure__". | | |
| | | Note: references to global and builtin names are | | |
| | | *not* included. | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | codeobject.co_code | A string representing the sequence of *bytecode* | | |
| | | instructions in the function | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | codeobject.co_consts | A "tuple" containing the literals used by the | | |
| | | *bytecode* in the function | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | codeobject.co_names | A "tuple" containing the names used by the | | |
| | | *bytecode* in the function | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | codeobject.co_filename | The name of the file from which the code was | | |
| | | compiled | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | codeobject.co_firstlineno | The line number of the first line of the function | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | codeobject.co_linetable | A "bytes" object containing encoded source | | |
| | | location information. The exact format is an | | |
| | | implementation detail and may change between | | |
| | | Python versions. Use "co_lines()" and | | |
| | | "co_positions()" for supported access to line and | | |
| | | position information. To create a modified copy of | | |
| | | a code object, use "replace()". Added in version | | |
| | | 3.10. | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | codeobject.co_stacksize | The required stack size of the code object | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | codeobject.co_flags | An "integer" encoding a number of flags for the | | |
| | | interpreter. | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| The following flag bits are defined for "co_flags": bit "0x04" is set | |
| if the function uses the "*arguments" syntax to accept an arbitrary | |
| number of positional arguments; bit "0x08" is set if the function uses | |
| the "**keywords" syntax to accept arbitrary keyword arguments; bit | |
| "0x20" is set if the function is a generator. See Code Objects Bit | |
| Flags for details on the semantics of each flags that might be | |
| present. | |
| Future feature declarations (for example, "from __future__ import | |
| division") also use bits in "co_flags" to indicate whether a code | |
| object was compiled with a particular feature enabled. See | |
| "compiler_flag". | |
| Other bits in "co_flags" are reserved for internal use. | |
| If a code object represents a function and has a docstring, the | |
| "CO_HAS_DOCSTRING" bit is set in "co_flags" and the first item in | |
| "co_consts" is the docstring of the function. | |
| Methods on code objects | |
| ~~~~~~~~~~~~~~~~~~~~~~~ | |
| codeobject.co_positions() | |
| Returns an iterable over the source code positions of each | |
| *bytecode* instruction in the code object. | |
| The iterator returns "tuple"s containing the "(start_line, | |
| end_line, start_column, end_column)". The *i-th* tuple corresponds | |
| to the position of the source code that compiled to the *i-th* code | |
| unit. Column information is 0-indexed utf-8 byte offsets on the | |
| given source line. | |
| This positional information can be missing. A non-exhaustive lists | |
| of cases where this may happen: | |
| * Running the interpreter with "-X" "no_debug_ranges". | |
| * Loading a pyc file compiled while using "-X" "no_debug_ranges". | |
| * Position tuples corresponding to artificial instructions. | |
| * Line and column numbers that can’t be represented due to | |
| implementation specific limitations. | |
| When this occurs, some or all of the tuple elements can be "None". | |
| Added in version 3.11. | |
| Note: | |
| This feature requires storing column positions in code objects | |
| which may result in a small increase of disk usage of compiled | |
| Python files or interpreter memory usage. To avoid storing the | |
| extra information and/or deactivate printing the extra traceback | |
| information, the "-X" "no_debug_ranges" command line flag or the | |
| "PYTHONNODEBUGRANGES" environment variable can be used. | |
| codeobject.co_lines() | |
| Returns an iterator that yields information about successive ranges | |
| of *bytecode*s. Each item yielded is a "(start, end, lineno)" | |
| "tuple": | |
| * "start" (an "int") represents the offset (inclusive) of the start | |
| of the *bytecode* range | |
| * "end" (an "int") represents the offset (exclusive) of the end of | |
| the *bytecode* range | |
| * "lineno" is an "int" representing the line number of the | |
| *bytecode* range, or "None" if the bytecodes in the given range | |
| have no line number | |
| The items yielded will have the following properties: | |
| * The first range yielded will have a "start" of 0. | |
| * The "(start, end)" ranges will be non-decreasing and consecutive. | |
| That is, for any pair of "tuple"s, the "start" of the second will | |
| be equal to the "end" of the first. | |
| * No range will be backwards: "end >= start" for all triples. | |
| * The last "tuple" yielded will have "end" equal to the size of the | |
| *bytecode*. | |
| Zero-width ranges, where "start == end", are allowed. Zero-width | |
| ranges are used for lines that are present in the source code, but | |
| have been eliminated by the *bytecode* compiler. | |
| Added in version 3.10. | |
| See also: | |
| **PEP 626** - Precise line numbers for debugging and other tools. | |
| The PEP that introduced the "co_lines()" method. | |
| codeobject.replace(**kwargs) | |
| Return a copy of the code object with new values for the specified | |
| fields. | |
| Code objects are also supported by the generic function | |
| "copy.replace()". | |
| Added in version 3.8. | |
| Frame objects | |
| ------------- | |
| Frame objects represent execution frames. They may occur in traceback | |
| objects, and are also passed to registered trace functions. | |
| Special read-only attributes | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | frame.f_back | Points to the previous stack frame (towards the | | |
| | | caller), or "None" if this is the bottom stack | | |
| | | frame | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | frame.f_code | The code object being executed in this frame. | | |
| | | Accessing this attribute raises an auditing event | | |
| | | "object.__getattr__" with arguments "obj" and | | |
| | | ""f_code"". | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | frame.f_locals | The mapping used by the frame to look up local | | |
| | | variables. If the frame refers to an *optimized | | |
| | | scope*, this may return a write-through proxy | | |
| | | object. Changed in version 3.13: Return a proxy | | |
| | | for optimized scopes. | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | frame.f_globals | The dictionary used by the frame to look up global | | |
| | | variables | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | frame.f_builtins | The dictionary used by the frame to look up built- | | |
| | | in (intrinsic) names | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | frame.f_lasti | The “precise instruction” of the frame object | | |
| | | (this is an index into the *bytecode* string of | | |
| | | the code object) | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | frame.f_generator | The *generator* or *coroutine* object that owns | | |
| | | this frame, or "None" if the frame is a normal | | |
| | | function. Added in version 3.14. | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| Special writable attributes | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | frame.f_trace | If not "None", this is a function called for | | |
| | | various events during code execution (this is used | | |
| | | by debuggers). Normally an event is triggered for | | |
| | | each new source line (see "f_trace_lines"). | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | frame.f_trace_lines | Set this attribute to "False" to disable | | |
| | | triggering a tracing event for each source line. | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | frame.f_trace_opcodes | Set this attribute to "True" to allow per-opcode | | |
| | | events to be requested. Note that this may lead to | | |
| | | undefined interpreter behaviour if exceptions | | |
| | | raised by the trace function escape to the | | |
| | | function being traced. | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | frame.f_lineno | The current line number of the frame – writing to | | |
| | | this from within a trace function jumps to the | | |
| | | given line (only for the bottom-most frame). A | | |
| | | debugger can implement a Jump command (aka Set | | |
| | | Next Statement) by writing to this attribute. | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| Frame object methods | |
| ~~~~~~~~~~~~~~~~~~~~ | |
| Frame objects support one method: | |
| frame.clear() | |
| This method clears all references to local variables held by the | |
| frame. Also, if the frame belonged to a *generator*, the generator | |
| is finalized. This helps break reference cycles involving frame | |
| objects (for example when catching an exception and storing its | |
| traceback for later use). | |
| "RuntimeError" is raised if the frame is currently executing or | |
| suspended. | |
| Added in version 3.4. | |
| Changed in version 3.13: Attempting to clear a suspended frame | |
| raises "RuntimeError" (as has always been the case for executing | |
| frames). | |
| Traceback objects | |
| ----------------- | |
| Traceback objects represent the stack trace of an exception. A | |
| traceback object is implicitly created when an exception occurs, and | |
| may also be explicitly created by calling "types.TracebackType". | |
| Changed in version 3.7: Traceback objects can now be explicitly | |
| instantiated from Python code. | |
| For implicitly created tracebacks, when the search for an exception | |
| handler unwinds the execution stack, at each unwound level a traceback | |
| object is inserted in front of the current traceback. When an | |
| exception handler is entered, the stack trace is made available to the | |
| program. (See section The try statement.) It is accessible as the | |
| third item of the tuple returned by "sys.exc_info()", and as the | |
| "__traceback__" attribute of the caught exception. | |
| When the program contains no suitable handler, the stack trace is | |
| written (nicely formatted) to the standard error stream; if the | |
| interpreter is interactive, it is also made available to the user as | |
| "sys.last_traceback". | |
| For explicitly created tracebacks, it is up to the creator of the | |
| traceback to determine how the "tb_next" attributes should be linked | |
| to form a full stack trace. | |
| Special read-only attributes: | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | traceback.tb_frame | Points to the execution frame of the current | | |
| | | level. Accessing this attribute raises an | | |
| | | auditing event "object.__getattr__" with arguments | | |
| | | "obj" and ""tb_frame"". | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | traceback.tb_lineno | Gives the line number where the exception occurred | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| | traceback.tb_lasti | Indicates the “precise instruction”. | | |
| +----------------------------------------------------+----------------------------------------------------+ | |
| The line number and last instruction in the traceback may differ from | |
| the line number of its frame object if the exception occurred in a | |
| "try" statement with no matching except clause or with a "finally" | |
| clause. | |
| traceback.tb_next | |
| The special writable attribute "tb_next" is the next level in the | |
| stack trace (towards the frame where the exception occurred), or | |
| "None" if there is no next level. | |
| Changed in version 3.7: This attribute is now writable | |
| Slice objects | |
| ------------- | |
| Slice objects are used to represent slices for "__getitem__()" | |
| methods. They are also created by the built-in "slice()" function. | |
| Added in version 3.15: The "slice()" type now supports subscription. | |
| For example, "slice[float]" may be used in type annotations to | |
| indicate a slice containing "float" objects. | |
| Special read-only attributes: "start" is the lower bound; "stop" is | |
| the upper bound; "step" is the step value; each is "None" if omitted. | |
| These attributes can have any type. | |
| Slice objects support one method: | |
| slice.indices(self, length) | |
| This method takes a single integer argument *length* and computes | |
| information about the slice that the slice object would describe if | |
| applied to a sequence of *length* items. It returns a tuple of | |
| three integers; respectively these are the *start* and *stop* | |
| indices and the *step* or stride length of the slice. Missing or | |
| out-of-bounds indices are handled in a manner consistent with | |
| regular slices. | |
| Static method objects | |
| --------------------- | |
| Static method objects provide a way of defeating the transformation of | |
| function objects to method objects described above. A static method | |
| object is a wrapper around any other object, usually a user-defined | |
| method object. When a static method object is retrieved from a class | |
| or a class instance, the object actually returned is the wrapped | |
| object, which is not subject to any further transformation. Static | |
| method objects are also callable. Static method objects are created by | |
| the built-in "staticmethod()" constructor. | |
| Class method objects | |
| -------------------- | |
| A class method object, like a static method object, is a wrapper | |
| around another object that alters the way in which that object is | |
| retrieved from classes and class instances. The behaviour of class | |
| method objects upon such retrieval is described above, under “instance | |
| methods”. Class method objects are created by the built-in | |
| "classmethod()" constructor. | |
| ''', | |
| 'typesfunctions': r'''Functions | |
| ********* | |
| Function objects are created by function definitions. The only | |
| operation on a function object is to call it: "func(argument-list)". | |
| There are really two flavors of function objects: built-in functions | |
| and user-defined functions. Both support the same operation (to call | |
| the function), but the implementation is different, hence the | |
| different object types. | |
| See Function definitions for more information. | |
| ''', | |
| 'typesmapping': r'''Mapping types — "dict", "frozendict" | |
| ************************************ | |
| A *mapping* object maps *hashable* values to arbitrary objects. There | |
| are currently two standard mapping types, the *dictionary* and | |
| "frozendict". (For other containers see the built-in "list", "set", | |
| and "tuple" classes, and the "collections" module.) See Time | |
| complexity of operations on built-in types for the costs of the | |
| various dictionary operations. | |
| A dictionary’s keys are *almost* arbitrary values. Values that are | |
| not *hashable*, that is, values containing lists, dictionaries or | |
| other mutable types (that are compared by value rather than by object | |
| identity) may not be used as keys. Values that compare equal (such as | |
| "1", "1.0", and "True") can be used interchangeably to index the same | |
| dictionary entry. | |
| class dict(**kwargs) | |
| class dict(mapping, /, **kwargs) | |
| class dict(iterable, /, **kwargs) | |
| Return a new dictionary initialized from an optional positional | |
| argument and a possibly empty set of keyword arguments. | |
| Dictionaries can be created by several means: | |
| * Use a comma-separated list of "key: value" pairs within braces: | |
| "{'jack': 4098, 'sjoerd': 4127}" or "{4098: 'jack', 4127: | |
| 'sjoerd'}" | |
| * Use a dict comprehension: "{}", "{x: x ** 2 for x in range(10)}" | |
| * Use the type constructor: "dict()", "dict([('foo', 100), ('bar', | |
| 200)])", "dict(foo=100, bar=200)" | |
| If no positional argument is given, an empty dictionary is created. | |
| If a positional argument is given and it defines a "keys()" method, | |
| a dictionary is created by calling "__getitem__()" on the argument | |
| with each returned key from the method. Otherwise, the positional | |
| argument must be an *iterable* object. Each item in the iterable | |
| must itself be an iterable with exactly two elements. The first | |
| element of each item becomes a key in the new dictionary, and the | |
| second element the corresponding value. If a key occurs more than | |
| once, the last value for that key becomes the corresponding value | |
| in the new dictionary. | |
| If keyword arguments are given, the keyword arguments and their | |
| values are added to the dictionary created from the positional | |
| argument. If a key being added is already present, the value from | |
| the keyword argument replaces the value from the positional | |
| argument. | |
| Dictionaries compare equal if and only if they have the same "(key, | |
| value)" pairs (regardless of ordering). Order comparisons (‘<’, | |
| ‘<=’, ‘>=’, ‘>’) raise "TypeError". To illustrate dictionary | |
| creation and equality, the following examples all return a | |
| dictionary equal to "{"one": 1, "two": 2, "three": 3}": | |
| >>> a = dict(one=1, two=2, three=3) | |
| >>> b = {'one': 1, 'two': 2, 'three': 3} | |
| >>> c = dict(zip(['one', 'two', 'three'], [1, 2, 3])) | |
| >>> d = dict([('two', 2), ('one', 1), ('three', 3)]) | |
| >>> e = dict({'three': 3, 'one': 1, 'two': 2}) | |
| >>> f = dict({'one': 1, 'three': 3}, two=2) | |
| >>> a == b == c == d == e == f | |
| True | |
| Providing keyword arguments as in the first example only works for | |
| keys that are valid Python identifiers. Otherwise, any valid keys | |
| can be used. | |
| Dictionaries preserve insertion order. Note that updating a key | |
| does not affect the order. Keys added after deletion are inserted | |
| at the end. | |
| >>> d = {"one": 1, "two": 2, "three": 3, "four": 4} | |
| >>> d | |
| {'one': 1, 'two': 2, 'three': 3, 'four': 4} | |
| >>> list(d) | |
| ['one', 'two', 'three', 'four'] | |
| >>> list(d.values()) | |
| [1, 2, 3, 4] | |
| >>> d["one"] = 42 | |
| >>> d | |
| {'one': 42, 'two': 2, 'three': 3, 'four': 4} | |
| >>> del d["two"] | |
| >>> d["two"] = None | |
| >>> d | |
| {'one': 42, 'three': 3, 'four': 4, 'two': None} | |
| Changed in version 3.7: Dictionary order is guaranteed to be | |
| insertion order. This behavior was an implementation detail of | |
| CPython from 3.6. | |
| Dictionaries are generic over two types, signifying (respectively) | |
| the types of the dictionary’s keys and values. | |
| These are the operations that dictionaries support (and therefore, | |
| custom mapping types should support too): | |
| list(d) | |
| Return a list of all the keys used in the dictionary *d*. | |
| len(d) | |
| Return the number of items in the dictionary *d*. | |
| d[key] | |
| Return the item of *d* with key *key*. Raises a "KeyError" if | |
| *key* is not in the map. | |
| If a subclass of dict defines a method "__missing__()" and *key* | |
| is not present, the "d[key]" operation calls that method with | |
| the key *key* as argument. The "d[key]" operation then returns | |
| or raises whatever is returned or raised by the | |
| "__missing__(key)" call. No other operations or methods invoke | |
| "__missing__()". If "__missing__()" is not defined, "KeyError" | |
| is raised. "__missing__()" must be a method; it cannot be an | |
| instance variable: | |
| >>> class Counter(dict): | |
| ... def __missing__(self, key): | |
| ... return 0 | |
| ... | |
| >>> c = Counter() | |
| >>> c['red'] | |
| 0 | |
| >>> c['red'] += 1 | |
| >>> c['red'] | |
| 1 | |
| The example above shows part of the implementation of | |
| "collections.Counter". A different "__missing__()" method is | |
| used by "collections.defaultdict". | |
| d[key] = value | |
| Set "d[key]" to *value*. | |
| del d[key] | |
| Remove "d[key]" from *d*. Raises a "KeyError" if *key* is not | |
| in the map. | |
| key in d | |
| Return "True" if *d* has a key *key*, else "False". | |
| key not in d | |
| Equivalent to "not key in d". | |
| iter(d) | |
| Return an iterator over the keys of the dictionary. This is a | |
| shortcut for "iter(d.keys())". | |
| clear() | |
| Remove all items from the dictionary. | |
| copy() | |
| Return a shallow copy of the dictionary. | |
| classmethod fromkeys(iterable, value=None, /) | |
| Create a new dictionary with keys from *iterable* and values set | |
| to *value*. | |
| "fromkeys()" is a class method that returns a new dictionary. | |
| *value* defaults to "None". All of the values refer to just a | |
| single instance, so it generally doesn’t make sense for *value* | |
| to be a mutable object such as an empty list. To get distinct | |
| values, use a dict comprehension instead. | |
| get(key, default=None, /) | |
| Return the value for *key* if *key* is in the dictionary, else | |
| *default*. If *default* is not given, it defaults to "None", so | |
| that this method never raises a "KeyError". | |
| items() | |
| Return a new view of the dictionary’s items ("(key, value)" | |
| pairs). See the documentation of view objects. | |
| keys() | |
| Return a new view of the dictionary’s keys. See the | |
| documentation of view objects. | |
| pop(key, /) | |
| pop(key, default, /) | |
| If *key* is in the dictionary, remove it and return its value, | |
| else return *default*. If *default* is not given and *key* is | |
| not in the dictionary, a "KeyError" is raised. | |
| popitem() | |
| Remove and return a "(key, value)" pair from the dictionary. | |
| Pairs are returned in LIFO (last-in, first-out) order. | |
| "popitem()" is useful to destructively iterate over a | |
| dictionary, as often used in set algorithms. If the dictionary | |
| is empty, calling "popitem()" raises a "KeyError". | |
| Changed in version 3.7: LIFO order is now guaranteed. In prior | |
| versions, "popitem()" would return an arbitrary key/value pair. | |
| reversed(d) | |
| Return a reverse iterator over the keys of the dictionary. This | |
| is a shortcut for "reversed(d.keys())". | |
| Added in version 3.8. | |
| setdefault(key, default=None, /) | |
| If *key* is in the dictionary, return its value. If not, insert | |
| *key* with a value of *default* and return *default*. *default* | |
| defaults to "None". | |
| update(**kwargs) | |
| update(mapping, /, **kwargs) | |
| update(iterable, /, **kwargs) | |
| Update the dictionary with the key/value pairs from *mapping* or | |
| *iterable* and *kwargs*, overwriting existing keys. Return | |
| "None". | |
| "update()" accepts either another object with a "keys()" method | |
| (in which case "__getitem__()" is called with every key returned | |
| from the method) or an iterable of key/value pairs (as tuples or | |
| other iterables of length two). If keyword arguments are | |
| specified, the dictionary is then updated with those key/value | |
| pairs: "d.update(red=1, blue=2)". | |
| values() | |
| Return a new view of the dictionary’s values. See the | |
| documentation of view objects. | |
| An equality comparison between one "dict.values()" view and | |
| another will always return "False". This also applies when | |
| comparing "dict.values()" to itself: | |
| >>> d = {'a': 1} | |
| >>> d.values() == d.values() | |
| False | |
| d | other | |
| Create a new dictionary with the merged keys and values of *d* | |
| and *other*, which must both be dictionaries. The values of | |
| *other* take priority when *d* and *other* share keys. | |
| Added in version 3.9. | |
| d |= other | |
| Update the dictionary *d* with keys and values from *other*, | |
| which may be either a *mapping* or an *iterable* of key/value | |
| pairs. The values of *other* take priority when *d* and *other* | |
| share keys. | |
| Added in version 3.9. | |
| Dictionaries and dictionary views are reversible. | |
| >>> d = {"one": 1, "two": 2, "three": 3, "four": 4} | |
| >>> d | |
| {'one': 1, 'two': 2, 'three': 3, 'four': 4} | |
| >>> list(reversed(d)) | |
| ['four', 'three', 'two', 'one'] | |
| >>> list(reversed(d.values())) | |
| [4, 3, 2, 1] | |
| >>> list(reversed(d.items())) | |
| [('four', 4), ('three', 3), ('two', 2), ('one', 1)] | |
| Changed in version 3.8: Dictionaries are now reversible. | |
| See also: | |
| "frozendict" and "types.MappingProxyType" can be used to create a | |
| read-only view of a "dict". | |
| See also: | |
| For detailed information on thread-safety guarantees for "dict" | |
| objects, see Thread safety for dict objects. | |
| Dictionary view objects | |
| ======================= | |
| The objects returned by "dict.keys()", "dict.values()" and | |
| "dict.items()" are *view objects*. They provide a dynamic view on the | |
| dictionary’s entries, which means that when the dictionary changes, | |
| the view reflects these changes. | |
| Dictionary views can be iterated over to yield their respective data, | |
| and support membership tests: | |
| len(dictview) | |
| Return the number of entries in the dictionary. | |
| iter(dictview) | |
| Return an iterator over the keys, values or items (represented as | |
| tuples of "(key, value)") in the dictionary. | |
| Keys and values are iterated over in insertion order. This allows | |
| the creation of "(value, key)" pairs using "zip()": "pairs = | |
| zip(d.values(), d.keys())". Another way to create the same list is | |
| "pairs = [(v, k) for (k, v) in d.items()]". | |
| Iterating views while adding or deleting entries in the dictionary | |
| may raise a "RuntimeError" or fail to iterate over all entries. | |
| Changed in version 3.7: Dictionary order is guaranteed to be | |
| insertion order. | |
| x in dictview | |
| Return "True" if *x* is in the underlying dictionary’s keys, values | |
| or items (in the latter case, *x* should be a "(key, value)" | |
| tuple). | |
| reversed(dictview) | |
| Return a reverse iterator over the keys, values or items of the | |
| dictionary. The view will be iterated in reverse order of the | |
| insertion. | |
| Changed in version 3.8: Dictionary views are now reversible. | |
| dictview.mapping | |
| Return a "types.MappingProxyType" that wraps the original | |
| dictionary to which the view refers. | |
| Added in version 3.10. | |
| Keys views are set-like since their entries are unique and *hashable*. | |
| Items views also have set-like operations since the (key, value) pairs | |
| are unique and the keys are hashable. If all values in an items view | |
| are hashable as well, then the items view can interoperate with other | |
| sets. (Values views are not treated as set-like since the entries are | |
| generally not unique.) For set-like views, all of the operations | |
| defined for the abstract base class "collections.abc.Set" are | |
| available (for example, "==", "<", or "^"). While using set | |
| operators, set-like views accept any iterable as the other operand, | |
| unlike sets which only accept sets as the input. | |
| An example of dictionary view usage: | |
| >>> dishes = {'eggs': 2, 'sausage': 1, 'bacon': 1, 'spam': 500} | |
| >>> keys = dishes.keys() | |
| >>> values = dishes.values() | |
| >>> # iteration | |
| >>> n = 0 | |
| >>> for val in values: | |
| ... n += val | |
| ... | |
| >>> print(n) | |
| 504 | |
| >>> # keys and values are iterated over in the same order (insertion order) | |
| >>> list(keys) | |
| ['eggs', 'sausage', 'bacon', 'spam'] | |
| >>> list(values) | |
| [2, 1, 1, 500] | |
| >>> # view objects are dynamic and reflect dict changes | |
| >>> del dishes['eggs'] | |
| >>> del dishes['sausage'] | |
| >>> list(keys) | |
| ['bacon', 'spam'] | |
| >>> # set operations | |
| >>> keys & {'eggs', 'bacon', 'salad'} | |
| {'bacon'} | |
| >>> keys ^ {'sausage', 'juice'} == {'juice', 'sausage', 'bacon', 'spam'} | |
| True | |
| >>> keys | ['juice', 'juice', 'juice'] == {'bacon', 'spam', 'juice'} | |
| True | |
| >>> # get back a read-only proxy for the original dictionary | |
| >>> values.mapping | |
| mappingproxy({'bacon': 1, 'spam': 500}) | |
| >>> values.mapping['spam'] | |
| 500 | |
| Frozen dictionaries | |
| =================== | |
| class frozendict(**kwargs) | |
| class frozendict(mapping, /, **kwargs) | |
| class frozendict(iterable, /, **kwargs) | |
| Return a new frozen dictionary initialized from an optional | |
| positional argument and a possibly empty set of keyword arguments. | |
| A "frozendict" has a similar API to the "dict" API, with the | |
| following differences: | |
| * "dict" has more methods than "frozendict": | |
| * "__delitem__()" | |
| * "__setitem__()" | |
| * "clear()" | |
| * "pop()" | |
| * "popitem()" | |
| * "setdefault()" | |
| * "update()" | |
| * A "frozendict" can be hashed with "hash(frozendict)" if all keys | |
| and values can be hashed. | |
| * "frozendict |= other" does not modify the "frozendict" in-place | |
| but creates a new frozen dictionary. | |
| "frozendict" is not a "dict" subclass but inherits directly from | |
| "object". | |
| Like dictionaries, frozendicts are generic over two types, | |
| signifying (respectively) the types of the frozendict’s keys and | |
| values. | |
| classmethod fromkeys(iterable, value=None, /) | |
| Similar to "dict.fromkeys()", but call again the type | |
| constructor with an initialized "frozendict" if the type is a | |
| "frozendict" subclass or if the constructor returned a | |
| "frozendict". | |
| Added in version 3.15. | |
| ''', | |
| 'typesmethods': r'''Methods | |
| ******* | |
| Methods are functions that are called using the attribute notation. | |
| There are two flavors: built-in methods (such as "append()" on lists) | |
| and class instance methods. Built-in methods are described with the | |
| types that support them. | |
| If you access a method (a function defined in a class namespace) | |
| through an instance, you get a special object: a *bound method* (also | |
| called instance method) object. When called, it will add the "self" | |
| argument to the argument list. Bound methods have two special read- | |
| only attributes: "m.__self__" is the object on which the method | |
| operates, and "m.__func__" is the function implementing the method. | |
| Calling "m(arg-1, arg-2, ..., arg-n)" is completely equivalent to | |
| calling "m.__func__(m.__self__, arg-1, arg-2, ..., arg-n)". | |
| Like function objects, bound method objects support getting arbitrary | |
| attributes. However, since method attributes are actually stored on | |
| the underlying function object ("method.__func__"), setting method | |
| attributes on bound methods is disallowed. Attempting to set an | |
| attribute on a method results in an "AttributeError" being raised. In | |
| order to set a method attribute, you need to explicitly set it on the | |
| underlying function object: | |
| >>> class C: | |
| ... def method(self): | |
| ... pass | |
| ... | |
| >>> c = C() | |
| >>> c.method.whoami = 'my name is method' # can't set on the method | |
| Traceback (most recent call last): | |
| File "<stdin>", line 1, in <module> | |
| AttributeError: 'method' object has no attribute 'whoami' | |
| >>> c.method.__func__.whoami = 'my name is method' | |
| >>> c.method.whoami | |
| 'my name is method' | |
| See Instance methods for more information. | |
| ''', | |
| 'typesmodules': r'''Modules | |
| ******* | |
| The only special operation on a module is attribute access: "m.name", | |
| where *m* is a module and *name* accesses a name defined in *m*’s | |
| symbol table. Module attributes can be assigned to. (Note that the | |
| "import" statement is not, strictly speaking, an operation on a module | |
| object; "import foo" does not require a module object named *foo* to | |
| exist, rather it requires an (external) *definition* for a module | |
| named *foo* somewhere.) | |
| A special attribute of every module is "__dict__". This is the | |
| dictionary containing the module’s symbol table. Modifying this | |
| dictionary will actually change the module’s symbol table, but direct | |
| assignment to the "__dict__" attribute is not possible (you can write | |
| "m.__dict__['a'] = 1", which defines "m.a" to be "1", but you can’t | |
| write "m.__dict__ = {}"). Modifying "__dict__" directly is not | |
| recommended. | |
| Modules built into the interpreter are written like this: "<module | |
| 'sys' (built-in)>". If loaded from a file, they are written as | |
| "<module 'os' from '/usr/local/lib/pythonX.Y/os.pyc'>". | |
| ''', | |
| 'typesseq': r'''Sequence Types — "list", "tuple", "range" | |
| ***************************************** | |
| There are three basic sequence types: lists, tuples, and range | |
| objects. Additional sequence types tailored for processing of binary | |
| data and text strings are described in dedicated sections. | |
| Common Sequence Operations | |
| ========================== | |
| The operations in the following table are supported by most sequence | |
| types, both mutable and immutable. The "collections.abc.Sequence" ABC | |
| is provided to make it easier to correctly implement these operations | |
| on custom sequence types. | |
| This table lists the sequence operations sorted in ascending priority. | |
| In the table, *s* and *t* are sequences of the same type, *n*, *i*, | |
| *j* and *k* are integers and *x* is an arbitrary object that meets any | |
| type and value restrictions imposed by *s*. | |
| The "in" and "not in" operations have the same priorities as the | |
| comparison operations. The "+" (concatenation) and "*" (repetition) | |
| operations have the same priority as the corresponding numeric | |
| operations. [3] | |
| See Time complexity of operations on built-in types for the costs of | |
| the various sequence operations. | |
| +----------------------------+----------------------------------+------------+ | |
| | Operation | Result | Notes | | |
| |============================|==================================|============| | |
| | "x in s" | "True" if an item of *s* is | (1) | | |
| | | equal to *x*, else "False" | | | |
| +----------------------------+----------------------------------+------------+ | |
| | "x not in s" | "False" if an item of *s* is | (1) | | |
| | | equal to *x*, else "True" | | | |
| +----------------------------+----------------------------------+------------+ | |
| | "s + t" | the concatenation of *s* and *t* | (6)(7) | | |
| +----------------------------+----------------------------------+------------+ | |
| | "s * n" or "n * s" | equivalent to adding *s* to | (2)(7) | | |
| | | itself *n* times | | | |
| +----------------------------+----------------------------------+------------+ | |
| | "s[i]" | *i*th item of *s*, origin 0 | (3)(8) | | |
| +----------------------------+----------------------------------+------------+ | |
| | "s[i:j]" | slice of *s* from *i* to *j* | (3)(4) | | |
| +----------------------------+----------------------------------+------------+ | |
| | "s[i:j:k]" | slice of *s* from *i* to *j* | (3)(5) | | |
| | | with step *k* | | | |
| +----------------------------+----------------------------------+------------+ | |
| | "len(s)" | length of *s* | | | |
| +----------------------------+----------------------------------+------------+ | |
| | "min(s)" | smallest item of *s* | | | |
| +----------------------------+----------------------------------+------------+ | |
| | "max(s)" | largest item of *s* | | | |
| +----------------------------+----------------------------------+------------+ | |
| Sequences of the same type also support comparisons. In particular, | |
| tuples and lists are compared lexicographically by comparing | |
| corresponding elements. This means that to compare equal, every | |
| element must compare equal and the two sequences must be of the same | |
| type and have the same length. (For full details see Comparisons in | |
| the language reference.) | |
| Forward and reversed iterators over mutable sequences access values | |
| using an index. That index will continue to march forward (or | |
| backward) even if the underlying sequence is mutated. The iterator | |
| terminates only when an "IndexError" or a "StopIteration" is | |
| encountered (or when the index drops below zero). | |
| Notes: | |
| 1. While the "in" and "not in" operations are used only for simple | |
| containment testing in the general case, some specialised sequences | |
| (such as "str", "bytes" and "bytearray") also use them for | |
| subsequence testing: | |
| >>> "gg" in "eggs" | |
| True | |
| 2. Values of *n* less than "0" are treated as "0" (which yields an | |
| empty sequence of the same type as *s*). Note that items in the | |
| sequence *s* are not copied; they are referenced multiple times. | |
| This often haunts new Python programmers; consider: | |
| >>> lists = [[]] * 3 | |
| >>> lists | |
| [[], [], []] | |
| >>> lists[0].append(3) | |
| >>> lists | |
| [[3], [3], [3]] | |
| What has happened is that "[[]]" is a one-element list containing | |
| an empty list, so all three elements of "[[]] * 3" are references | |
| to this single empty list. Modifying any of the elements of | |
| "lists" modifies this single list. You can create a list of | |
| different lists this way: | |
| >>> lists = [[] for i in range(3)] | |
| >>> lists[0].append(3) | |
| >>> lists[1].append(5) | |
| >>> lists[2].append(7) | |
| >>> lists | |
| [[3], [5], [7]] | |
| Further explanation is available in the FAQ entry How do I create a | |
| multidimensional list?. | |
| 3. If *i* or *j* is negative, the index is relative to the end of | |
| sequence *s*: "len(s) + i" or "len(s) + j" is substituted. But | |
| note that "-0" is still "0". | |
| 4. The slice of *s* from *i* to *j* is defined as the sequence of | |
| items with index *k* such that "i <= k < j". | |
| * If *i* is omitted or "None", use "0". | |
| * If *j* is omitted or "None", use "len(s)". | |
| * If *i* or *j* is less than "-len(s)", use "0". | |
| * If *i* or *j* is greater than "len(s)", use "len(s)". | |
| * If *i* is greater than or equal to *j*, the slice is empty. | |
| 5. The slice of *s* from *i* to *j* with step *k* is defined as the | |
| sequence of items with index "x = i + n*k" such that "0 <= n < | |
| (j-i)/k". In other words, the indices are "i", "i+k", "i+2*k", | |
| "i+3*k" and so on, stopping when *j* is reached (but never | |
| including *j*). When *k* is positive, *i* and *j* are reduced to | |
| "len(s)" if they are greater. When *k* is negative, *i* and *j* are | |
| reduced to "len(s) - 1" if they are greater. If *i* or *j* are | |
| omitted or "None", they become “end” values (which end depends on | |
| the sign of *k*). Note, *k* cannot be zero. If *k* is "None", it | |
| is treated like "1". | |
| 6. Concatenating immutable sequences always results in a new object. | |
| This means that building up a sequence by repeated concatenation | |
| will have a quadratic runtime cost in the total sequence length. | |
| To get a linear runtime cost, you must switch to one of the | |
| alternatives below: | |
| * if concatenating "str" objects, you can build a list and use | |
| "str.join()" at the end or else write to an "io.StringIO" | |
| instance and retrieve its value when complete | |
| * if concatenating "bytes" objects, you can similarly use | |
| "bytes.join()" or "io.BytesIO", or you can do in-place | |
| concatenation with a "bytearray" object. "bytearray" objects are | |
| mutable and have an efficient overallocation mechanism | |
| * if concatenating "tuple" objects, extend a "list" instead | |
| * for other types, investigate the relevant class documentation | |
| 7. Some sequence types (such as "range") only support item sequences | |
| that follow specific patterns, and hence don’t support sequence | |
| concatenation or repetition. | |
| 8. An "IndexError" is raised if *i* is outside the sequence range. | |
| -[ Sequence Methods ]- | |
| Sequence types also support the following methods: | |
| sequence.count(value, /) | |
| Return the total number of occurrences of *value* in *sequence*. | |
| sequence.index(value[, start[, stop]]) | |
| Return the index of the first occurrence of *value* in *sequence*. | |
| Raises "ValueError" if *value* is not found in *sequence*. | |
| The *start* or *stop* arguments allow for efficient searching of | |
| subsections of the sequence, beginning at *start* and ending at | |
| *stop*. This is roughly equivalent to "start + | |
| sequence[start:stop].index(value)", only without copying any data. | |
| Caution: | |
| Not all sequence types support passing the *start* and *stop* | |
| arguments. | |
| Immutable Sequence Types | |
| ======================== | |
| The only operation that immutable sequence types generally implement | |
| that is not also implemented by mutable sequence types is support for | |
| the "hash()" built-in. | |
| This support allows immutable sequences, such as "tuple" instances, to | |
| be used as "dict" keys and stored in "set" and "frozenset" instances. | |
| Attempting to hash an immutable sequence that contains unhashable | |
| values will result in "TypeError". | |
| Mutable Sequence Types | |
| ====================== | |
| The operations in the following table are defined on mutable sequence | |
| types. The "collections.abc.MutableSequence" ABC is provided to make | |
| it easier to correctly implement these operations on custom sequence | |
| types. | |
| In the table *s* is an instance of a mutable sequence type, *t* is any | |
| iterable object and *x* is an arbitrary object that meets any type and | |
| value restrictions imposed by *s* (for example, "bytearray" only | |
| accepts integers that meet the value restriction "0 <= x <= 255"). | |
| +--------------------------------+----------------------------------+-----------------------+ | |
| | Operation | Result | Notes | | |
| |================================|==================================|=======================| | |
| | "s[i] = x" | item *i* of *s* is replaced by | | | |
| | | *x* | | | |
| +--------------------------------+----------------------------------+-----------------------+ | |
| | "del s[i]" | removes item *i* of *s* | | | |
| +--------------------------------+----------------------------------+-----------------------+ | |
| | "s[i:j] = t" | slice of *s* from *i* to *j* is | | | |
| | | replaced by the contents of the | | | |
| | | iterable *t* | | | |
| +--------------------------------+----------------------------------+-----------------------+ | |
| | "del s[i:j]" | removes the elements of "s[i:j]" | | | |
| | | from the list (same as "s[i:j] = | | | |
| | | []") | | | |
| +--------------------------------+----------------------------------+-----------------------+ | |
| | "s[i:j:k] = t" | the elements of "s[i:j:k]" are | (1) | | |
| | | replaced by those of *t* | | | |
| +--------------------------------+----------------------------------+-----------------------+ | |
| | "del s[i:j:k]" | removes the elements of | | | |
| | | "s[i:j:k]" from the list | | | |
| +--------------------------------+----------------------------------+-----------------------+ | |
| | "s += t" | extends *s* with the contents of | | | |
| | | *t* (for the most part the same | | | |
| | | as "s[len(s):len(s)] = t") | | | |
| +--------------------------------+----------------------------------+-----------------------+ | |
| | "s *= n" | updates *s* with its contents | (2) | | |
| | | repeated *n* times | | | |
| +--------------------------------+----------------------------------+-----------------------+ | |
| Notes: | |
| 1. If *k* is not equal to "1", *t* must have the same length as the | |
| slice it is replacing. | |
| 2. The value *n* is an integer, or an object implementing | |
| "__index__()". Zero and negative values of *n* clear the sequence. | |
| Items in the sequence are not copied; they are referenced multiple | |
| times, as explained for "s * n" under Common Sequence Operations. | |
| -[ Mutable Sequence Methods ]- | |
| Mutable sequence types also support the following methods: | |
| sequence.append(value, /) | |
| Append *value* to the end of the sequence. This is equivalent to | |
| writing "seq[len(seq):len(seq)] = [value]". | |
| sequence.clear() | |
| Added in version 3.3. | |
| Remove all items from *sequence*. This is equivalent to writing | |
| "del sequence[:]". | |
| sequence.copy() | |
| Added in version 3.3. | |
| Create a shallow copy of *sequence*. This is equivalent to writing | |
| "sequence[:]". | |
| Hint: | |
| The "copy()" method is not part of the "MutableSequence" "ABC", | |
| but most concrete mutable sequence types provide it. | |
| sequence.extend(iterable, /) | |
| Extend *sequence* with the contents of *iterable*. For the most | |
| part, this is the same as writing "seq[len(seq):len(seq)] = | |
| iterable". | |
| sequence.insert(index, value, /) | |
| Insert *value* into *sequence* at the given *index*. This is | |
| equivalent to writing "sequence[index:index] = [value]". | |
| sequence.pop(index=-1, /) | |
| Retrieve the item at *index* and also remove it from *sequence*. By | |
| default, the last item in *sequence* is removed and returned. | |
| sequence.remove(value, /) | |
| Remove the first item from *sequence* where "sequence[i] == value". | |
| Raises "ValueError" if *value* is not found in *sequence*. | |
| sequence.reverse() | |
| Reverse the items of *sequence* in place. This method maintains | |
| economy of space when reversing a large sequence. To remind users | |
| that it operates by side-effect, it returns "None". | |
| Lists | |
| ===== | |
| Lists are mutable sequences, typically used to store collections of | |
| homogeneous items (where the precise degree of similarity will vary by | |
| application). | |
| class list(iterable=(), /) | |
| Lists may be constructed in several ways: | |
| * Using a pair of square brackets to denote the empty list: "[]" | |
| * Using square brackets, separating items with commas: "[a]", "[a, | |
| b, c]" | |
| * Using a list comprehension: "[x for x in iterable]" | |
| * Using the type constructor: "list()" or "list(iterable)" | |
| The constructor builds a list whose items are the same and in the | |
| same order as *iterable*’s items. *iterable* may be either a | |
| sequence, a container that supports iteration, or an iterator | |
| object. If *iterable* is already a list, a copy is made and | |
| returned, similar to "iterable[:]". For example, "list('abc')" | |
| returns "['a', 'b', 'c']" and "list( (1, 2, 3) )" returns "[1, 2, | |
| 3]". If no argument is given, the constructor creates a new empty | |
| list, "[]". | |
| Many other operations also produce lists, including the "sorted()" | |
| built-in. | |
| Lists are generic over the types of their items. | |
| Lists implement all of the common and mutable sequence operations. | |
| Lists also provide the following additional method: | |
| sort(*, key=None, reverse=False) | |
| This method sorts the list in place, using only "<" comparisons | |
| between items. Exceptions are not suppressed - if any comparison | |
| operations fail, the entire sort operation will fail (and the | |
| list will likely be left in a partially modified state). | |
| "sort()" accepts two arguments that can only be passed by | |
| keyword (keyword-only arguments): | |
| *key* specifies a function of one argument that is used to | |
| extract a comparison key from each list element (for example, | |
| "key=str.lower"). The key corresponding to each item in the list | |
| is calculated once and then used for the entire sorting process. | |
| The default value of "None" means that list items are sorted | |
| directly without calculating a separate key value. | |
| The "functools.cmp_to_key()" utility is available to convert a | |
| 2.x style *cmp* function to a *key* function. | |
| *reverse* is a boolean value. If set to "True", then the list | |
| elements are sorted as if each comparison were reversed. | |
| This method modifies the sequence in place for economy of space | |
| when sorting a large sequence. To remind users that it operates | |
| by side effect, it does not return the sorted sequence (use | |
| "sorted()" to explicitly request a new sorted list instance). | |
| The "sort()" method is guaranteed to be stable. A sort is | |
| stable if it guarantees not to change the relative order of | |
| elements that compare equal — this is helpful for sorting in | |
| multiple passes (for example, sort by department, then by salary | |
| grade). | |
| For sorting examples and a brief sorting tutorial, see Sorting | |
| Techniques. | |
| **CPython implementation detail:** While a list is being sorted, | |
| the effect of attempting to mutate, or even inspect, the list is | |
| undefined. The C implementation of Python makes the list appear | |
| empty for the duration, and raises "ValueError" if it can detect | |
| that the list has been mutated during a sort. | |
| See also: | |
| For detailed information on thread-safety guarantees for "list" | |
| objects, see Thread safety for list objects. | |
| Tuples | |
| ====== | |
| Tuples are immutable sequences, typically used to store collections of | |
| heterogeneous data (such as the 2-tuples produced by the "enumerate()" | |
| built-in). Tuples are also used for cases where an immutable sequence | |
| of homogeneous data is needed (such as allowing storage in a "set" or | |
| "dict" instance). | |
| class tuple(iterable=(), /) | |
| Tuples may be constructed in a number of ways: | |
| * Using a pair of parentheses to denote the empty tuple: "()" | |
| * Using a trailing comma for a singleton tuple: "a," or "(a,)" | |
| * Separating items with commas: "a, b, c" or "(a, b, c)" | |
| * Using the "tuple()" built-in: "tuple()" or "tuple(iterable)" | |
| The constructor builds a tuple whose items are the same and in the | |
| same order as *iterable*’s items. *iterable* may be either a | |
| sequence, a container that supports iteration, or an iterator | |
| object. If *iterable* is already a tuple, it is returned | |
| unchanged. For example, "tuple('abc')" returns "('a', 'b', 'c')" | |
| and "tuple( [1, 2, 3] )" returns "(1, 2, 3)". If no argument is | |
| given, the constructor creates a new empty tuple, "()". | |
| Note that it is actually the comma which makes a tuple, not the | |
| parentheses. The parentheses are optional, except in the empty | |
| tuple case, or when they are needed to avoid syntactic ambiguity. | |
| For example, "f(a, b, c)" is a function call with three arguments, | |
| while "f((a, b, c))" is a function call with a 3-tuple as the sole | |
| argument. | |
| Tuples implement all of the common sequence operations. | |
| Tuples are generic over the types of their contents. For more | |
| information, refer to the typing documentation on annotating | |
| tuples. | |
| For heterogeneous collections of data where access by name is clearer | |
| than access by index, "collections.namedtuple()" may be a more | |
| appropriate choice than a simple tuple object. | |
| Ranges | |
| ====== | |
| The "range" type represents an immutable sequence of numbers and is | |
| commonly used for looping a specific number of times in "for" loops. | |
| class range(stop, /) | |
| class range(start, stop, step=1, /) | |
| The arguments to the range constructor must be integers (either | |
| built-in "int" or any object that implements the "__index__()" | |
| special method). If the *step* argument is omitted, it defaults to | |
| "1". If the *start* argument is omitted, it defaults to "0". If | |
| *step* is zero, "ValueError" is raised. | |
| For a positive *step*, the contents of a range "r" are determined | |
| by the formula "r[i] = start + step*i" where "i >= 0" and "r[i] < | |
| stop". | |
| For a negative *step*, the contents of the range are still | |
| determined by the formula "r[i] = start + step*i", but the | |
| constraints are "i >= 0" and "r[i] > stop". | |
| A range object will be empty if "r[0]" does not meet the value | |
| constraint. Ranges do support negative indices, but these are | |
| interpreted as indexing from the end of the sequence determined by | |
| the positive indices. | |
| Ranges containing absolute values larger than "sys.maxsize" are | |
| permitted but some features (such as "len()") may raise | |
| "OverflowError". | |
| Range examples: | |
| >>> list(range(10)) | |
| [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] | |
| >>> list(range(1, 11)) | |
| [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] | |
| >>> list(range(0, 30, 5)) | |
| [0, 5, 10, 15, 20, 25] | |
| >>> list(range(0, 10, 3)) | |
| [0, 3, 6, 9] | |
| >>> list(range(0, -10, -1)) | |
| [0, -1, -2, -3, -4, -5, -6, -7, -8, -9] | |
| >>> list(range(0)) | |
| [] | |
| >>> list(range(1, 0)) | |
| [] | |
| Ranges implement all of the common sequence operations except | |
| concatenation and repetition (due to the fact that range objects | |
| can only represent sequences that follow a strict pattern and | |
| repetition and concatenation will usually violate that pattern). | |
| start | |
| The value of the *start* parameter (or "0" if the parameter was | |
| not supplied) | |
| stop | |
| The value of the *stop* parameter | |
| step | |
| The value of the *step* parameter (or "1" if the parameter was | |
| not supplied) | |
| The advantage of the "range" type over a regular "list" or "tuple" is | |
| that a "range" object will always take the same (small) amount of | |
| memory, no matter the size of the range it represents (as it only | |
| stores the "start", "stop" and "step" values, calculating individual | |
| items and subranges as needed). | |
| Range objects implement the "collections.abc.Sequence" ABC, and | |
| provide features such as containment tests, element index lookup, | |
| slicing and support for negative indices (see Sequence Types — list, | |
| tuple, range): | |
| >>> r = range(0, 20, 2) | |
| >>> r | |
| range(0, 20, 2) | |
| >>> 11 in r | |
| False | |
| >>> 10 in r | |
| True | |
| >>> r.index(10) | |
| 5 | |
| >>> r[5] | |
| 10 | |
| >>> r[:5] | |
| range(0, 10, 2) | |
| >>> r[-1] | |
| 18 | |
| Testing range objects for equality with "==" and "!=" compares them as | |
| sequences. That is, two range objects are considered equal if they | |
| represent the same sequence of values. (Note that two range objects | |
| that compare equal might have different "start", "stop" and "step" | |
| attributes, for example "range(0) == range(2, 1, 3)" or "range(0, 3, | |
| 2) == range(0, 4, 2)".) | |
| Changed in version 3.2: Implement the Sequence ABC. Support slicing | |
| and negative indices. Test "int" objects for membership in constant | |
| time instead of iterating through all items. | |
| Changed in version 3.3: Define ‘==’ and ‘!=’ to compare range objects | |
| based on the sequence of values they define (instead of comparing | |
| based on object identity).Added the "start", "stop" and "step" | |
| attributes. | |
| See also: | |
| * The linspace recipe shows how to implement a lazy version of range | |
| suitable for floating-point applications. | |
| ''', | |
| 'typesseq-mutable': r'''Mutable Sequence Types | |
| ********************** | |
| The operations in the following table are defined on mutable sequence | |
| types. The "collections.abc.MutableSequence" ABC is provided to make | |
| it easier to correctly implement these operations on custom sequence | |
| types. | |
| In the table *s* is an instance of a mutable sequence type, *t* is any | |
| iterable object and *x* is an arbitrary object that meets any type and | |
| value restrictions imposed by *s* (for example, "bytearray" only | |
| accepts integers that meet the value restriction "0 <= x <= 255"). | |
| +--------------------------------+----------------------------------+-----------------------+ | |
| | Operation | Result | Notes | | |
| |================================|==================================|=======================| | |
| | "s[i] = x" | item *i* of *s* is replaced by | | | |
| | | *x* | | | |
| +--------------------------------+----------------------------------+-----------------------+ | |
| | "del s[i]" | removes item *i* of *s* | | | |
| +--------------------------------+----------------------------------+-----------------------+ | |
| | "s[i:j] = t" | slice of *s* from *i* to *j* is | | | |
| | | replaced by the contents of the | | | |
| | | iterable *t* | | | |
| +--------------------------------+----------------------------------+-----------------------+ | |
| | "del s[i:j]" | removes the elements of "s[i:j]" | | | |
| | | from the list (same as "s[i:j] = | | | |
| | | []") | | | |
| +--------------------------------+----------------------------------+-----------------------+ | |
| | "s[i:j:k] = t" | the elements of "s[i:j:k]" are | (1) | | |
| | | replaced by those of *t* | | | |
| +--------------------------------+----------------------------------+-----------------------+ | |
| | "del s[i:j:k]" | removes the elements of | | | |
| | | "s[i:j:k]" from the list | | | |
| +--------------------------------+----------------------------------+-----------------------+ | |
| | "s += t" | extends *s* with the contents of | | | |
| | | *t* (for the most part the same | | | |
| | | as "s[len(s):len(s)] = t") | | | |
| +--------------------------------+----------------------------------+-----------------------+ | |
| | "s *= n" | updates *s* with its contents | (2) | | |
| | | repeated *n* times | | | |
| +--------------------------------+----------------------------------+-----------------------+ | |
| Notes: | |
| 1. If *k* is not equal to "1", *t* must have the same length as the | |
| slice it is replacing. | |
| 2. The value *n* is an integer, or an object implementing | |
| "__index__()". Zero and negative values of *n* clear the sequence. | |
| Items in the sequence are not copied; they are referenced multiple | |
| times, as explained for "s * n" under Common Sequence Operations. | |
| -[ Mutable Sequence Methods ]- | |
| Mutable sequence types also support the following methods: | |
| sequence.append(value, /) | |
| Append *value* to the end of the sequence. This is equivalent to | |
| writing "seq[len(seq):len(seq)] = [value]". | |
| sequence.clear() | |
| Added in version 3.3. | |
| Remove all items from *sequence*. This is equivalent to writing | |
| "del sequence[:]". | |
| sequence.copy() | |
| Added in version 3.3. | |
| Create a shallow copy of *sequence*. This is equivalent to writing | |
| "sequence[:]". | |
| Hint: | |
| The "copy()" method is not part of the "MutableSequence" "ABC", | |
| but most concrete mutable sequence types provide it. | |
| sequence.extend(iterable, /) | |
| Extend *sequence* with the contents of *iterable*. For the most | |
| part, this is the same as writing "seq[len(seq):len(seq)] = | |
| iterable". | |
| sequence.insert(index, value, /) | |
| Insert *value* into *sequence* at the given *index*. This is | |
| equivalent to writing "sequence[index:index] = [value]". | |
| sequence.pop(index=-1, /) | |
| Retrieve the item at *index* and also remove it from *sequence*. By | |
| default, the last item in *sequence* is removed and returned. | |
| sequence.remove(value, /) | |
| Remove the first item from *sequence* where "sequence[i] == value". | |
| Raises "ValueError" if *value* is not found in *sequence*. | |
| sequence.reverse() | |
| Reverse the items of *sequence* in place. This method maintains | |
| economy of space when reversing a large sequence. To remind users | |
| that it operates by side-effect, it returns "None". | |
| ''', | |
| 'unary': r'''Unary arithmetic and bitwise operations | |
| *************************************** | |
| All unary arithmetic and bitwise operations have the same priority: | |
| u_expr: power | "-" u_expr | "+" u_expr | "~" u_expr | |
| The unary "-" (minus) operator yields the negation of its numeric | |
| argument; the operation can be overridden with the "__neg__()" special | |
| method. | |
| The unary "+" (plus) operator yields its numeric argument unchanged; | |
| the operation can be overridden with the "__pos__()" special method. | |
| The unary "~" (invert) operator yields the bitwise inversion of its | |
| integer argument. The bitwise inversion of "x" is defined as | |
| "-(x+1)". It only applies to integral numbers or to custom objects | |
| that override the "__invert__()" special method. | |
| In all three cases, if the argument does not have the proper type, a | |
| "TypeError" exception is raised. | |
| ''', | |
| 'while': r'''The "while" statement | |
| ********************* | |
| The "while" statement is used for repeated execution as long as an | |
| expression is true: | |
| while_stmt: "while" assignment_expression ":" suite | |
| ["else" ":" suite] | |
| This repeatedly tests the expression and, if it is true, executes the | |
| first suite; if the expression is false (which may be the first time | |
| it is tested) the suite of the "else" clause, if present, is executed | |
| and the loop terminates. | |
| A "break" statement executed in the first suite terminates the loop | |
| without executing the "else" clause’s suite. A "continue" statement | |
| executed in the first suite skips the rest of the suite and goes back | |
| to testing the expression. | |
| ''', | |
| 'with': r'''The "with" statement | |
| ******************** | |
| The "with" statement is used to wrap the execution of a block with | |
| methods defined by a context manager (see section With Statement | |
| Context Managers). This allows common "try"…"except"…"finally" usage | |
| patterns to be encapsulated for convenient reuse. | |
| with_stmt: "with" ( "(" with_stmt_contents ","? ")" | with_stmt_contents ) ":" suite | |
| with_stmt_contents: with_item ("," with_item)* | |
| with_item: expression ["as" target] | |
| The execution of the "with" statement with one “item” proceeds as | |
| follows: | |
| 1. The context expression (the expression given in the "with_item") is | |
| evaluated to obtain a context manager. | |
| 2. The context manager’s "__enter__()" is loaded for later use. | |
| 3. The context manager’s "__exit__()" is loaded for later use. | |
| 4. The context manager’s "__enter__()" method is invoked. | |
| 5. If a target was included in the "with" statement, the return value | |
| from "__enter__()" is assigned to it. | |
| Note: | |
| The "with" statement guarantees that if the "__enter__()" method | |
| returns without an error, then "__exit__()" will always be | |
| called. Thus, if an error occurs during the assignment to the | |
| target list, it will be treated the same as an error occurring | |
| within the suite would be. See step 7 below. | |
| 6. The suite is executed. | |
| 7. The context manager’s "__exit__()" method is invoked. If an | |
| exception caused the suite to be exited, its type, value, and | |
| traceback are passed as arguments to "__exit__()". Otherwise, three | |
| "None" arguments are supplied. | |
| If the suite was exited due to an exception, and the return value | |
| from the "__exit__()" method was false, the exception is reraised. | |
| If the return value was true, the exception is suppressed, and | |
| execution continues with the statement following the "with" | |
| statement. | |
| If the suite was exited for any reason other than an exception, the | |
| return value from "__exit__()" is ignored, and execution proceeds | |
| at the normal location for the kind of exit that was taken. | |
| The following code: | |
| with EXPRESSION as TARGET: | |
| SUITE | |
| is semantically equivalent to: | |
| manager = (EXPRESSION) | |
| enter = manager.__enter__ | |
| exit = manager.__exit__ | |
| value = enter() | |
| hit_except = False | |
| try: | |
| TARGET = value | |
| SUITE | |
| except: | |
| hit_except = True | |
| if not exit(*sys.exc_info()): | |
| raise | |
| finally: | |
| if not hit_except: | |
| exit(None, None, None) | |
| except that implicit special method lookup is used for "__enter__()" | |
| and "__exit__()". | |
| With more than one item, the context managers are processed as if | |
| multiple "with" statements were nested: | |
| with A() as a, B() as b: | |
| SUITE | |
| is semantically equivalent to: | |
| with A() as a: | |
| with B() as b: | |
| SUITE | |
| You can also write multi-item context managers in multiple lines if | |
| the items are surrounded by parentheses. For example: | |
| with ( | |
| A() as a, | |
| B() as b, | |
| ): | |
| SUITE | |
| Changed in version 3.1: Support for multiple context expressions. | |
| Changed in version 3.10: Support for using grouping parentheses to | |
| break the statement in multiple lines. | |
| See also: | |
| **PEP 343** - The “with” statement | |
| The specification, background, and examples for the Python "with" | |
| statement. | |
| ''', | |
| 'yield': r'''The "yield" statement | |
| ********************* | |
| yield_stmt: yield_expression | |
| A "yield" statement is semantically equivalent to a yield expression. | |
| The "yield" statement can be used to omit the parentheses that would | |
| otherwise be required in the equivalent yield expression statement. | |
| For example, the yield statements | |
| yield <expr> | |
| yield from <expr> | |
| are equivalent to the yield expression statements | |
| (yield <expr>) | |
| (yield from <expr>) | |
| Yield expressions and statements are only used when defining a | |
| *generator* function, and are only used in the body of the generator | |
| function. Using "yield" in a function definition is sufficient to | |
| cause that definition to create a generator function instead of a | |
| normal function. | |
| For full details of "yield" semantics, refer to the Yield expressions | |
| section. | |
| ''', | |
| } |