Python
Python
History
In 2022, Python 3.10.4 and 3.9.12 were expedited[59] and 3.8.13, and 3.7.13, because of many
security issues.[60] When Python 3.9.13 was released in May 2022, it was announced that the 3.9
series (joining the older series 3.8 and 3.7) would only receive security fixes in the future.[61] On
September 7, 2022, four new releases were made due to a potential denial-of-service attack:
3.10.7, 3.9.14, 3.8.14, and 3.7.14.[62][63]
As of November 2022, Python 3.11.0 is the current stable release. Notable changes from 3.10
include increased program execution speed and improved error reporting.[64]
Indentation
Main article: Python syntax and semantics § Indentation
Python uses whitespace indentation, rather than curly brackets or keywords, to delimit blocks. An
increase in indentation comes after certain statements; a decrease in indentation signifies the
end of the current block.[82] Thus, the program's visual structure accurately represents its
semantic structure.[83] This feature is sometimes termed the off-side rule. Some other languages
use indentation this way; but in most, indentation has no semantic meaning. The recommended
indent size is four spaces.[84]
Expressions
Python's expressions include:
The + , - , and * operators for mathematical addition, subtraction, and multiplication are
similar to other languages, but the behavior of division differs. There are two types of
divisions in Python: floor division (or integer division) // and floating-point / division.
[91]
Python uses the ** operator for exponentiation.
Python uses the + operator for string concatenation. Python uses the * operator for
duplicating a string a specified number of times.
The @ infix operator. It is intended to be used by libraries such as NumPy for matrix
multiplication.[92][93]
The syntax := , called the "walrus operator", was introduced in Python 3.8. It assigns values
to variables as part of a larger expression.[94]
In Python, == compares by value. Python's is operator may be used to compare object
identities (comparison by reference), and comparisons may be chained—for
example, a <= b <= c .
Python uses and , or , and not as boolean operators.
Python has a type of expression called a list comprehension, as well as a more general
expression called a generator expression.[71]
Anonymous functions are implemented using lambda expressions; however, there may be
only one expression in each body.
Conditional expressions are written as x if c else y [95] (different in order of operands
from the c ? x : y operator common to many other languages).
Python makes a distinction between lists and tuples. Lists are written as [1, 2, 3] , are
mutable, and cannot be used as the keys of dictionaries (dictionary keys must
be immutable in Python). Tuples, written as (1, 2, 3) , are immutable and thus can be
used as keys of dictionaries, provided all of the tuple's elements are immutable.
The + operator can be used to concatenate two tuples, which does not directly modify their
contents, but produces a new tuple containing the elements of both. Thus, given the
variable t initially equal to (1, 2, 3) , executing t = t + (4, 5) first
evaluates t + (4, 5) , which yields (1, 2, 3, 4, 5) , which is then assigned back to t
—thereby effectively "modifying the contents" of t while conforming to the immutable nature
of tuple objects. Parentheses are optional for tuples in unambiguous contexts.[96]
Python features sequence unpacking where multiple expressions, each evaluating to
anything that can be assigned (to a variable, writable property, etc.) are associated in an
identical manner to that forming tuple literals—and, as a whole, are put on the left-hand side
of the equal sign in an assignment statement. The statement expects an iterable object on
the right-hand side of the equal sign that produces the same number of values as the
provided writable expressions; when iterated through them, it assigns each of the produced
values to the corresponding expression on the left.[97]
Python has a "string format" operator % that functions analogously to printf format strings
in C—e.g. "spam=%s eggs=%d" % ("blah", 2) evaluates to "spam=blah eggs=2" . In
Python 2.6+ and 3+, this was supplemented by the format() method of the str class,
e.g. "spam={0} eggs={1}".format("blah", 2) . Python 3.6 added "f-
strings": spam = "blah"; eggs = 2; f'spam={spam} eggs={eggs}' .[98]
Strings in Python can be concatenated by "adding" them (with the same operator as for
adding integers and floats), e.g. "spam" + "eggs" returns "spameggs" . If strings contain
numbers, they are added as strings rather than integers, e.g. "2" + "2" returns "22" .
Python has various string literals:
o Delimited by single or double quote marks; unlike in Unix shells, Perl, and Perl-
influenced languages, single and double quote marks work the same. Both use the
backslash ( \ ) as an escape character. String interpolation became available in
Python 3.6 as "formatted string literals".[98]
o Triple-quoted (beginning and ending with three single or double quote marks), which
may span multiple lines and function like here documents in shells, Perl, and Ruby.
o Raw string varieties, denoted by prefixing the string literal with r . Escape sequences are
not interpreted; hence raw strings are useful where literal backslashes are common,
such as regular expressions and Windows-style paths. (Compare " @ -quoting" in C#.)
Python has array index and array slicing expressions in lists, denoted
as a[key] , a[start:stop] or a[start:stop:step] . Indexes are zero-based, and
negative indexes are relative to the end. Slices take elements from the start index up to, but
not including, the stop index. The third slice parameter called step or stride, allows elements
to be skipped and reversed. Slice indexes may be omitted—for example, a[:] returns a
copy of the entire list. Each element of a slice is a shallow copy.
In Python, a distinction between expressions and statements is rigidly enforced, in contrast to
languages such as Common Lisp, Scheme, or Ruby. This leads to duplicating some functionality.
For example:
Methods
Methods on objects are functions attached to the object's class; the
syntax instance.method(argument) is, for normal methods and functions, syntactic
sugar for Class.method(instance, argument) . Python methods have an
explicit self parameter to access instance data, in contrast to the implicit self (or this ) in
some other object-oriented programming languages (e.g., C++, Java, Objective-C, Ruby).
[99]
Python also provides methods, often called dunder methods (due to their names beginning
and ending with double-underscores), to allow user-defined classes to modify how they are
handled by native operations including length, comparison, in arithmetic operations and type
conversion.[100]