Python (Programming Language) : Jump To Navigation Jump To Search
Python (Programming Language) : Jump To Navigation Jump To Search
Python
Paradigm Multi-paradigm: functional, imperative, object-
oriented, structured, reflective
discipline
more
Website www.python.org
Major implementations
CPython, PyPy, Stackless
Python, MicroPython, CircuitPython, IronPython, Jython, RustPython
Dialects
Cython, RPython, Starlark[7]
Influenced by
ABC,[8] Ada,[9] ALGOL 68,[10] APL,[11] C,[12] C++,[13] CLU,[14] Dylan,
[15]
Haskell,[16] Icon,[17] Java,[18] Lisp,[19] Modula-3,[13] Perl, Standard ML[11]
Influenced
Apache Groovy, Boo, Cobra, CoffeeScript,[20] D, F#, Genie,
[21]
Go, JavaScript,[22][23] Julia,[24] Nim, Ring,[25] Ruby,[26] Swift[27]
13See also
14References
o 14.1Sources
15Further reading
16External links
History[edit]
The assignment statement (token '=', the equals sign). This operates differently
than in traditional imperative programming languages, and this fundamental
mechanism (including the nature of Python's version of variables) illuminates many
other features of the language. Assignment in C, e.g., x = 2 , translates to "typed
variable name x receives a copy of numeric value 2". The (right-hand) value is
copied into an allocated storage location for which the (left-hand) variable name is
the symbolic address. The memory allocated to the variable is large enough
(potentially quite large) for the declared type. In the simplest case of Python
assignment, using the same example, x = 2 , translates to "(generic) name x
receives a reference to a separate, dynamically allocated object of numeric (int) type
of value 2." This is termed binding the name to the object. Since the name's storage
location doesn't contain the indicated value, it is improper to call it a variable. Names
may be subsequently rebound at any time to objects of greatly varying types,
including strings, procedures, complex objects with data and methods, etc.
Successive assignments of a common value to multiple names, e.g., x = 2 ; y =
2 ; z = 2 result in allocating storage to (at most) three names and one numeric
object, to which all three names are bound. Since a name is a generic reference
holder it is unreasonable to associate a fixed data type with it. However at a given
time a name will be bound to some object, which will have a type; thus there
is dynamic typing.
The if statement, which conditionally executes a block of code, along
with else and elif (a contraction of else-if).
The for statement, which iterates over an iterable object, capturing each
element to a local variable for use by the attached block.
The while statement, which executes a block of code as long as its condition is
true.
The try statement, which allows exceptions raised in its attached code block to
be caught and handled by except clauses; it also ensures that clean-up code in
a finally block will always be run regardless of how the block exits.
The raise statement, used to raise a specified exception or re-raise a caught
exception.
The class statement, which executes a block of code and attaches its local
namespace to a class, for use in object-oriented programming.
The def statement, which defines a function or method.
The with statement, from Python 2.5 released in September 2006, [66] which
encloses a code block within a context manager (for example, acquiring
a lock before the block of code is run and releasing the lock afterwards, or opening
a file and then closing it), allowing Resource Acquisition Is Initialization (RAII)-like
behavior and replaces a common try/finally idiom. [67]
The break statement, exits from the loop.
The continue statement, skips this iteration and continues with the next item.
The pass statement, which serves as a NOP. It is syntactically needed to create
an empty code block.
The assert statement, used during debugging to check for conditions that ought
to apply.
The yield statement, which returns a value from a generator function. From
Python 2.5, yield is also an operator. This form is used to implement coroutines.
The import statement, which is used to import modules whose functions or
variables can be used in the current program. There are three ways of using
import: import <module name> [as <alias>] or from <module name> import
* or from <module name> import <definition 1> [as <alias 1>], <definition
2> [as <alias 2>], ... .
The print statement was changed to the print() function in Python 3.
Python does not support tail call optimization or first-class continuations, and, according
to Guido van Rossum, it never will.[68][69] However, better support for coroutine-like
functionality is provided in 2.5, by extending Python's generators.[70] Before 2.5,
generators were lazy iterators; information was passed unidirectionally out of the
generator. From Python 2.5, it is possible to pass information back into a generator
function, and from Python 3.3, the information can be passed through multiple stack
levels.[71]
Expressions[edit]
Some Python expressions are similar to languages such as C and Java, while some are
not:
Addition, subtraction, and multiplication are the same, but the behavior of division
differs. There are two types of divisions in Python. They are floor division (or integer
division) // and floating point / division.[72] Python also added the ** operator for
exponentiation.
From Python 3.5, the new @ infix operator was introduced. It is intended to be
used by libraries such as NumPy for matrix multiplication.[73][74]
From Python 3.8, the syntax := , called the 'walrus operator' was introduced. It
assigns values to variables as part of a larger expression. [75]
In Python, == compares by value, versus Java, which compares numerics by
value[76] and objects by reference.[77] (Value comparisons in Java on objects can be
performed with the equals() method.) Python's is operator may be used to
compare object identities (comparison by reference). In Python, comparisons may
be chained, for example a <= b <= c .
Python uses the words and , or , not for its boolean operators rather than the
symbolic && , || , ! used in Java and C.
Python has a type of expression termed a list comprehension. Python 2.4
extended list comprehensions into a more general expression termed
a generator expression.[54]
Anonymous functions are implemented using lambda expressions; however,
these are limited in that the body can only be one expression.
Conditional expressions in Python are written as x if c else y [78] (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 are written as (1, 2, 3) , are immutable and
thus can be used as the keys of dictionaries, provided all elements of the tuple are
immutable. The + operator can be used to concatenate two tuples, which does not
directly modify their contents, but rather produces a new tuple containing the
elements of both provided tuples. 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. [79]
Python features sequence unpacking wherein multiple expressions, each
evaluating to anything that can be assigned to (a variable, a writable property, etc.),
are associated in the 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, and will iterate through it, assigning each of the produced values to
the corresponding expression on the left. [80]
Python has a "string format" operator % . This functions analogous
to printf format strings in C, e.g. "spam=%s eggs=%d" % ("blah", 2) evaluates
to "spam=blah eggs=2" . In Python 3 and 2.6+, 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": blah = "blah"; eggs = 2; f'spam={blah}
eggs={eggs}' .[81]
Python has various kinds of string literals:
o Strings delimited by single or double quote marks. Unlike in Unix
shells, Perl and Perl-influenced languages, single quote marks and double quote
marks function identically. Both kinds of string use the backslash ( \ ) as
an escape character. String interpolation became available in Python 3.6 as
"formatted string literals".[81]
o Triple-quoted strings, which begin and end with a series of three single or
double quote marks. They 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 an 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 on 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[edit]
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, or Ruby).[82]
Typing[edit]
Mutabilit
Type Description Syntax examples
y
True
bool immutable Boolean value
False
b'Some ASCII'
bytes immutable Sequence of bytes b"Some ASCII"
bytes([119, 105, 107, 105])
Complex
complex immutable number with real and 3+2.7 j
imaginary parts
Associative array (or
dictionary) of key
and value pairs; can { 'key1': 1.0, 3: False}
dict mutable contain mixed types
{}
(keys and values),
keys must be a
hashable type
An ellipsis placehold
er to be used as an ...
ellipsis a
immutable
index Ellipsis
in NumPy arrays
Double
precision floating
point number. The
float immutable precision is machine 3.1415927
dependent but in
practice is 64 bits.
[citation needed]
Unordered set,
contains no frozenset ([4.0, 'string', Tru
frozenset immutable duplicates; can
e])
contain mixed types,
if hashable
A placeholder that
can be returned
NotImplementedTyp from overloaded
immutable NotImplemented
ea operators to indicate
unsupported operand
types.
A Sequence of
numbers commonly range (1, 10)
range immutable used for looping
specific number of range(10, -5, -2)
times in for loops[87]
Unordered set,
contains no { 4.0, 'string', True}
set mutable duplicates; can
set()
contain mixed types,
if hashable
'Wikipedia'
"Wikipedia"
A character string:
str immutable sequence of Unicode
codepoints """Spanning
multiple
lines"""
( 4.0, 'string', True)
Can contain mixed
tuple immutable ('single element',)
types
()
Python 2.1 and earlier used C's division behavior. The / operator is integer
division if both operands are integers, and floating-point division otherwise. Integer
division rounds towards 0, e.g. 7/3 == 2 and -7/3 == -2 .
Python 2.2 changed integer division to round towards negative infinity, e.g. 7/3
== 2 and -7/3 == -3 . The floor division // operator was introduced. So 7//3 ==
2 , -7//3 == -3 , 7.5//3 == 2.0 and -7.5//3 == -3.0 . Adding from __future__
import division causes a module to use Python 3.0 rules for division (see next).
Python 3.0 changed / to always be floating-point division, e.g. 5/2 == 2.5 .
In Python terms, / is true division (or simply division), and // is floor division. / before
version 3.0 is classic division.[89]
Rounding towards negative infinity, though different from most languages, adds
consistency. For instance, it means that the equation (a + b)//b == a//b + 1 is
always true. It also means that the equation b*(a//b) + a%b == a is valid for both
positive and negative values of a . However, maintaining the validity of this equation
means that while the result of a%b is, as expected, in the half-open interval [0, b),
where b is a positive integer, it has to lie in the interval (b, 0] when b is negative.[90]
Python provides a round function for rounding a float to the nearest integer. For tie-
breaking, Python 3 uses round to even: round(1.5) and round(2.5) both produce 2 .
[91]
Versions before 3 used round-away-from-zero: round(0.5) is 1.0 , round(-
0.5) is −1.0 .[92]
Python allows boolean expressions with multiple equality relations in a manner that is
consistent with general use in mathematics. For example, the expression a < b <
c tests whether a is less than b and b is less than c .[93] C-derived languages interpret
this expression differently: in C, the expression would first evaluate a < b , resulting in 0
or 1, and that result would then be compared with c .[94]
Python uses arbitrary-precision arithmetic for all integer operations.
The Decimal type/class in the decimal module provides decimal floating point numbers
to a pre-defined arbitrary precision and several rounding modes. [95] The Fraction class
in the fractions module provides arbitrary precision for rational numbers.[96]
Due to Python's extensive mathematics library, and the third-party library NumPy that
further extends the native capabilities, it is frequently used as a scientific scripting
language to aid in problems such as numerical data processing and manipulation. [97][98]
Libraries[edit]
Some parts of the standard library are covered by specifications (for example, the Web
Server Gateway Interface (WSGI) implementation wsgiref follows PEP 333[101]), but
most modules are not. They are specified by their code, internal documentation, and
test suites. However, because most of the standard library is cross-platform Python
code, only a few modules need altering or rewriting for variant implementations.
Development environments[edit]
See also: Comparison of integrated development environments § Python
Most Python implementations (including CPython) include a read–eval–print
loop (REPL), permitting them to function as a command line interpreter for which the
user enters statements sequentially and receives results immediately.
Other shells, including IDLE and IPython, add further abilities such as improved auto-
completion, session state retention and syntax highlighting.
As well as standard desktop integrated development environments, there are Web
browser-based IDEs; SageMath (intended for developing science and math-related
Python programs); PythonAnywhere, a browser-based IDE and hosting environment;
and Canopy IDE, a commercial Python IDE emphasizing scientific computing.[104]
Implementations[edit]
See also: List of Python software § Python implementations
Reference implementation[edit]
CPython is the reference implementation of Python. It is written in C, meeting
the C89 standard with several select C99 features.[105] It compiles Python programs into
an intermediate bytecode[106] which is then executed by its virtual machine.[107] CPython is
distributed with a large standard library written in a mixture of C and native Python. It is
available for many platforms, including Windows (Vista and later; supported Windows
XP and older, with by now unsupported Python 2.7) and most modern Unix-
like systems. Platform portability was one of its earliest priorities, [108] in Python 1 and 2
time-frame, even supporting VMS and OS/2, while since support has been dropped for
a lot of platforms.
Other implementations[edit]
PyPy is a fast, compliant interpreter of Python 2.7 and 3.6. [109] Its just-in-time
compiler brings a significant speed improvement over CPython but several libraries
written in C cannot be used with it.[110][111]
Stackless Python is a significant fork of CPython that implements microthreads; it does
not use the C memory stack, thus allowing massively concurrent programs. PyPy also
has a stackless version.[112]
MicroPython and CircuitPython are Python 3 variants optimized for microcontrollers.
This includes Lego Mindstorms EV3.[113]
Unsupported implementations[edit]
Other just-in-time Python compilers have been developed, but are now unsupported:
Google began a project named Unladen Swallow in 2009, with the aim of
speeding up the Python interpreter five-fold by using the LLVM, and of improving its
multithreading ability to scale to thousands of cores, [114] while ordinary
implementations suffer from the global interpreter lock.
Psyco was a just-in-time specializing compiler that integrates with CPython and
transforms bytecode to machine code at runtime. The emitted code is specialized for
certain data types and is faster than standard Python code.
In 2005, Nokia released a Python interpreter for the Series 60 mobile phones
named PyS60. It includes many of the modules from the CPython implementations and
some additional modules to integrate with the Symbian operating system. The project
has been kept up-to-date to run on all variants of the S60 platform, and several third-
party modules are available. The Nokia N900 also supports Python with GTK widget
libraries, enabling programs to be written and run on the target device. [115]
Cross-compilers to other languages[edit]
There are several compilers to high-level object languages, with either unrestricted
Python, a restricted subset of Python, or a language similar to Python as the source
language:
Development[edit]
Python's development is conducted largely through the Python Enhancement
Proposal (PEP) process, the primary mechanism for proposing major new features,
collecting community input on issues and documenting Python design decisions.
[123]
Python coding style is covered in PEP 8.[124] Outstanding PEPs are reviewed and
commented on by the Python community and the steering council. [123]
Enhancement of the language corresponds with development of the CPython reference
implementation. The mailing list python-dev is the primary forum for the language's
development. Specific issues are discussed in the Roundup bug tracker hosted
at bugs.python.org.[125] Development originally took place on a self-hosted source-code
repository running Mercurial, until Python moved to GitHub in January 2017.[126]
CPython's public releases come in three types, distinguished by which part of the
version number is incremented:
Naming[edit]
;[134] for example, the metasyntactic variables often used in Python literature
are spam and eggs instead of the traditional foo and bar.[134][135] The official Python
documentation also contains various references to Monty Python routines. [136][137]
Uses[edit]
Main article: List of Python software