Язык программирования пейтон как пишется

Python

Python-logo-notext.svg
Paradigm Multi-paradigm: object-oriented,[1] procedural (imperative), functional, structured, reflective
Designed by Guido van Rossum
Developer Python Software Foundation
First appeared 20 February 1991; 32 years ago[2]
Stable release

3.11.2[3] Edit this on Wikidata
/ 8 February 2023; 25 days ago

Preview release

3.12.0a5[4] Edit this on Wikidata
/ 7 February 2023; 26 days ago

Typing discipline Duck, dynamic, strong typing;[5] gradual (since 3.5, but ignored in CPython)[6]
OS Windows, macOS, Linux/UNIX, Android[7][8] and more[9]
License Python Software Foundation License
Filename extensions .py, .pyi, .pyc, .pyd, .pyw, .pyz (since 3.5),[10] .pyo (prior to 3.5)[11]
Website python.org
Major implementations
CPython, PyPy, Stackless Python, MicroPython, CircuitPython, IronPython, Jython
Dialects
Cython, RPython, Starlark[12]
Influenced by
ABC,[13] Ada,[14] ALGOL 68,[15] APL,[16] C,[17] C++,[18] CLU,[19] Dylan,[20] Haskell,[21][16] Icon,[22] Lisp,[23] Modula-3,[15][18] Perl,[24] Standard ML[16]
Influenced
Apache Groovy, Boo, Cobra, CoffeeScript,[25] D, F#, GDScript, Genie,[26] Go, JavaScript,[27][28] Julia,[29] Nim, Ring,[30] Ruby,[31] Swift[32]
  • Python Programming at Wikibooks

Python is a high-level, general-purpose programming language. Its design philosophy emphasizes code readability with the use of significant indentation.[33]

Python is dynamically typed and garbage-collected. It supports multiple programming paradigms, including structured (particularly procedural), object-oriented and functional programming. It is often described as a «batteries included» language due to its comprehensive standard library.[34][35]

Guido van Rossum began working on Python in the late 1980s as a successor to the ABC programming language and first released it in 1991 as Python 0.9.0.[36] Python 2.0 was released in 2000. Python 3.0, released in 2008, was a major revision not completely backward-compatible with earlier versions. Python 2.7.18, released in 2020, was the last release of Python 2.[37]

Python consistently ranks as one of the most popular programming languages.[38][39][40][41]

History

Python was conceived in the late 1980s[42] by Guido van Rossum at Centrum Wiskunde & Informatica (CWI) in the Netherlands as a successor to the ABC programming language, which was inspired by SETL,[43] capable of exception handling and interfacing with the Amoeba operating system.[13] Its implementation began in December 1989.[44] Van Rossum shouldered sole responsibility for the project, as the lead developer, until 12 July 2018, when he announced his «permanent vacation» from his responsibilities as Python’s «benevolent dictator for life», a title the Python community bestowed upon him to reflect his long-term commitment as the project’s chief decision-maker.[45] In January 2019, active Python core developers elected a five-member Steering Council to lead the project.[46][47]

Python 2.0 was released on 16 October 2000, with many major new features such as list comprehensions, cycle-detecting garbage collection, reference counting, and Unicode support.[48] Python 3.0, released on 3 December 2008, with many of its major features backported to Python 2.6.x[49] and 2.7.x. Releases of Python 3 include the 2to3 utility, which automates the translation of Python 2 code to Python 3.[50]

Python 2.7’s end-of-life was initially set for 2015, then postponed to 2020 out of concern that a large body of existing code could not easily be forward-ported to Python 3.[51][52] No further security patches or other improvements will be released for it.[53][54] Currently only 3.7 and later are supported. In 2021, Python 3.9.2 and 3.8.8 were expedited[55] as all versions of Python (including 2.7[56]) had security issues leading to possible remote code execution[57] and web cache poisoning.[58]

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]

Design philosophy and features

Python is a multi-paradigm programming language. Object-oriented programming and structured programming are fully supported, and many of their features support functional programming and aspect-oriented programming (including metaprogramming[65] and metaobjects).[66] Many other paradigms are supported via extensions, including design by contract[67][68] and logic programming.[69]

Python uses dynamic typing and a combination of reference counting and a cycle-detecting garbage collector for memory management.[70] It uses dynamic name resolution (late binding), which binds method and variable names during program execution.

Its design offers some support for functional programming in the Lisp tradition. It has filter,mapandreduce functions; list comprehensions, dictionaries, sets, and generator expressions.[71] The standard library has two modules (itertools and functools) that implement functional tools borrowed from Haskell and Standard ML.[72]

Its core philosophy is summarized in the document The Zen of Python (PEP 20), which includes aphorisms such as:[73]

  • Beautiful is better than ugly.
  • Explicit is better than implicit.
  • Simple is better than complex.
  • Complex is better than complicated.
  • Readability counts.

Rather than building all of its functionality into its core, Python was designed to be highly extensible via modules. This compact modularity has made it particularly popular as a means of adding programmable interfaces to existing applications. Van Rossum’s vision of a small core language with a large standard library and easily extensible interpreter stemmed from his frustrations with ABC, which espoused the opposite approach.[42]

Python strives for a simpler, less-cluttered syntax and grammar while giving developers a choice in their coding methodology. In contrast to Perl’s «there is more than one way to do it» motto, Python embraces a «there should be one—and preferably only one—obvious way to do it» philosophy.[73] Alex Martelli, a Fellow at the Python Software Foundation and Python book author, wrote: «To describe something as ‘clever’ is not considered a compliment in the Python culture.»[74]

Python’s developers strive to avoid premature optimization and reject patches to non-critical parts of the CPython reference implementation that would offer marginal increases in speed at the cost of clarity.[75] When speed is important, a Python programmer can move time-critical functions to extension modules written in languages such as C; or use PyPy, a just-in-time compiler. Cython is also available, which translates a Python script into C and makes direct C-level API calls into the Python interpreter.

Python’s developers aim for it to be fun to use. This is reflected in its name—a tribute to the British comedy group Monty Python[76]—and in occasionally playful approaches to tutorials and reference materials, such as the use of the terms «spam» and «eggs» (a reference to a Monty Python sketch) in examples, instead of the often-used «foo» and «bar».[77][78]

A common neologism in the Python community is pythonic, which has a wide range of meanings related to program style. «Pythonic» code may use Python idioms well, be natural or show fluency in the language, or conform with Python’s minimalist philosophy and emphasis on readability. Code that is difficult to understand or reads like a rough transcription from another programming language is called unpythonic.[79][80]

Syntax and semantics

Python is meant to be an easily readable language. Its formatting is visually uncluttered and often uses English keywords where other languages use punctuation. Unlike many other languages, it does not use curly brackets to delimit blocks, and semicolons after statements are allowed but rarely used. It has fewer syntactic exceptions and special cases than C or Pascal.[81]

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]

Statements and control flow

Python’s statements include:

  • The assignment statement, using a single equals sign =
  • 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 (or new syntax except* in Python 3.11 for exception groups[85]); it also ensures that clean-up code in a finally block is always 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, which encloses a code block within a context manager (for example, acquiring a lock before it is run, then releasing the lock; or opening and closing a file), allowing resource-acquisition-is-initialization (RAII)-like behavior and replacing a common try/finally idiom[86]
  • The break statement, which exits a loop
  • The continue statement, which skips the rest of the current iteration and continues with the next
  • The del statement, which removes a variable—deleting the reference from the name to the value, and producing an error if the variable is referred to before it is redefined
  • The pass statement, serving as a NOP, syntactically needed to create an empty code block
  • The assert statement, used in debugging to check for conditions that should apply
  • The yield statement, which returns a value from a generator function (and also an operator); used to implement coroutines
  • The return statement, used to return a value from a function
  • The import and from statements, used to import modules whose functions or variables can be used in the current program

The assignment statement (=) binds a name as a reference to a separate, dynamically allocated object. Variables may subsequently be rebound at any time to any object. In Python, a variable name is a generic reference holder without a fixed data type; however, it always refers to some object with a type. This is called dynamic typing—in contrast to statically-typed languages, where each variable may contain only a value of a certain type.

Python does not support tail call optimization or first-class continuations, and, according to Van Rossum, it never will.[87][88] However, better support for coroutine-like functionality is provided by extending Python’s generators.[89] Before 2.5, generators were lazy iterators; data was passed unidirectionally out of the generator. From Python 2.5 on, it is possible to pass data back into a generator function; and from version 3.3, it can be passed through multiple stack levels.[90]

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:
    • 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]
    • 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.
    • 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:

  • List comprehensions vs. for-loops
  • Conditional expressions vs. if blocks
  • The eval() vs. exec() built-in functions (in Python 2, exec is a statement); the former is for expressions, the latter is for statements

Statements cannot be a part of an expression—so list and other comprehensions or lambda expressions, all being expressions, cannot contain statements. A particular case is that an assignment statement such as a = 1 cannot form part of the conditional expression of a conditional statement. This has the advantage of avoiding a classic C error of mistaking an assignment operator = for an equality operator == in conditions: if (c = 1) { ... } is syntactically valid (but probably unintended) C code, but if c = 1: ... causes a syntax error in Python.

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]

Typing

The standard type hierarchy in Python 3

Python uses duck typing and has typed objects but untyped variable names. Type constraints are not checked at compile time; rather, operations on an object may fail, signifying that it is not of a suitable type. Despite being dynamically typed, Python is strongly typed, forbidding operations that are not well-defined (for example, adding a number to a string) rather than silently attempting to make sense of them.

Python allows programmers to define their own types using classes, most often used for object-oriented programming. New instances of classes are constructed by calling the class (for example, SpamClass() or EggsClass()), and the classes are instances of the metaclass type (itself an instance of itself), allowing metaprogramming and reflection.

Before version 3.0, Python had two kinds of classes (both using the same syntax): old-style and new-style,[101] current Python versions only support the semantics new style.

Python supports gradual typing.[102] Python’s syntax allows specifying static types, but they are not checked in the default implementation, CPython. An experimental optional static type-checker, mypy, supports compile-time type checking.[103]

Summary of Python 3’s built-in types

Type Mutability Description Syntax examples
bool immutable Boolean value True
False
bytearray mutable Sequence of bytes bytearray(b'Some ASCII')
bytearray(b"Some ASCII")
bytearray([119, 105, 107, 105])
bytes immutable Sequence of bytes b'Some ASCII'
b"Some ASCII"
bytes([119, 105, 107, 105])
complex immutable Complex number with real and imaginary parts 3+2.7j
3 + 2.7j
dict mutable Associative array (or dictionary) of key and value pairs; can contain mixed types (keys and values), keys must be a hashable type {'key1': 1.0, 3: False}
{}
types.EllipsisType immutable An ellipsis placeholder to be used as an index in NumPy arrays ...
Ellipsis
float immutable Double-precision floating-point number. The precision is machine-dependent but in practice is generally implemented as a 64-bit IEEE 754 number with 53 bits of precision.[104]

1.33333

frozenset immutable Unordered set, contains no duplicates; can contain mixed types, if hashable frozenset([4.0, 'string', True])
int immutable Integer of unlimited magnitude[105] 42
list mutable List, can contain mixed types [4.0, 'string', True]
[]
types.NoneType immutable An object representing the absence of a value, often called null in other languages None
types.NotImplementedType immutable A placeholder that can be returned from overloaded operators to indicate unsupported operand types. NotImplemented
range immutable An immutable sequence of numbers commonly used for looping a specific number of times in for loops[106] range(-1, 10)
range(10, -5, -2)
set mutable Unordered set, contains no duplicates; can contain mixed types, if hashable {4.0, 'string', True}
set()
str immutable A character string: sequence of Unicode codepoints 'Wikipedia'
"Wikipedia"

"""Spanning
multiple
lines"""
Spanning
multiple
lines
tuple immutable Can contain mixed types (4.0, 'string', True)
('single element',)
()

Arithmetic operations

Python has the usual symbols for arithmetic operators (+, -, *, /), the floor division operator // and the modulo operation % (where the remainder can be negative, e.g. 4 % -3 == -2). It also has ** for exponentiation, e.g. 5**3 == 125 and 9**0.5 == 3.0, and a matrix‑multiplication operator @ .[107] These operators work like in traditional math; with the same precedence rules, the operators infix (+ and - can also be unary to represent positive and negative numbers respectively).

The division between integers produces floating-point results. The behavior of division has changed significantly over time:[108]

  • Current Python (i.e. since 3.0) changed / to always be floating-point division, e.g. 5/2 == 2.5.
  • 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 used in Python 2.7 to use Python 3.0 rules for division (see above).

In Python terms, / is true division (or simply division), and // is floor division. / before version 3.0 is classic division.[108]

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.[109]

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.[110] Versions before 3 used round-away-from-zero: round(0.5) is 1.0, round(-0.5) is −1.0.[111]

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.[112] 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.[113]

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.[114] The Fraction class in the fractions module provides arbitrary precision for rational numbers.[115]

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.[116][117]

Programming examples

Hello world program:

Program to calculate the factorial of a positive integer:

n = int(input('Type a number, and its factorial will be printed: '))

if n < 0:
    raise ValueError('You must enter a non-negative integer')

factorial = 1
for i in range(2, n + 1):
    factorial *= i

print(factorial)

Libraries

Python’s large standard library[118] provides tools suited to many tasks and is commonly cited as one of its greatest strengths. For Internet-facing applications, many standard formats and protocols such as MIME and HTTP are supported. It includes modules for creating graphical user interfaces, connecting to relational databases, generating pseudorandom numbers, arithmetic with arbitrary-precision decimals,[119] manipulating regular expressions, and unit testing.

Some parts of the standard library are covered by specifications—for example, the Web Server Gateway Interface (WSGI) implementation wsgiref follows PEP 333[120]—but most 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.

As of 14 November 2022, the Python Package Index (PyPI), the official repository for third-party Python software, contains over 415,000[121] packages with a wide range of functionality, including:

  • Automation
  • Data analytics
  • Databases
  • Documentation
  • Graphical user interfaces
  • Image processing
  • Machine learning
  • Mobile apps
  • Multimedia
  • Computer networking
  • Scientific computing
  • System administration
  • Test frameworks
  • Text processing
  • Web frameworks
  • Web scraping

Development environments

Most Python implementations (including CPython) include a read–eval–print loop (REPL), permitting them to function as a command line interpreter for which users enter statements sequentially and receive results immediately.

Python also comes with an Integrated development environment (IDE) called IDLE, which is more beginner-oriented.

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, including SageMath, for developing science- and math-related programs; PythonAnywhere, a browser-based IDE and hosting environment; and Canopy IDE, a commercial IDE emphasizing scientific computing.[122]

Implementations

Reference implementation

CPython is the reference implementation of Python. It is written in C, meeting the C89 standard (Python 3.11 uses C11[123]) with several select C99 features (With later C versions out, it is considered outdated.[124][125] CPython includes its own C extensions, but third-party extensions are not limited to older C versions—e.g. they can be implemented with C11 or C++.[126][127]) It compiles Python programs into an intermediate bytecode[128] which is then executed by its virtual machine.[129] CPython is distributed with a large standard library written in a mixture of C and native Python, and is available for many platforms, including Windows (starting with Python 3.9, the Python installer deliberately fails to install on Windows 7 and 8;[130][131] Windows XP was supported until Python 3.5) and most modern Unix-like systems, including macOS (and Apple M1 Macs, since Python 3.9.1, with experimental installer) and unofficial support for e.g. VMS.[132] Platform portability was one of its earliest priorities.[133] (During Python 1 and 2 development, even OS/2 and Solaris were supported,[134] but support has since been dropped for many platforms.)

Other implementations

  • PyPy is a fast, compliant interpreter of Python 2.7 and 3.8.[135][136] Its just-in-time compiler often brings a significant speed improvement over CPython but some libraries written in C cannot be used with it.[137]
  • Stackless Python is a significant fork of CPython that implements microthreads; it does not use the call stack in the same way, thus allowing massively concurrent programs. PyPy also has a stackless version.[138]
  • MicroPython and CircuitPython are Python 3 variants optimized for microcontrollers, including Lego Mindstorms EV3.[139]
  • Pyston is a variant of the Python runtime that uses just-in-time compilation to speed up the execution of Python programs.[140]
  • Cinder is a performance-oriented fork of CPython 3.8 that contains a number of optimizations including bytecode inline caching, eager evaluation of coroutines, a method-at-a-time JIT, and an experimental bytecode compiler.[141]

Unsupported implementations

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 fivefold by using the LLVM, and of improving its multithreading ability to scale to thousands of cores,[142] while ordinary implementations suffer from the global interpreter lock.
  • Psyco is a discontinued 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 the standard Python code. Psyco does not support Python 2.7 or later.
  • PyS60 was a Python 2 interpreter for Series 60 mobile phones released by Nokia in 2005. It implemented many of the modules from the standard library and some additional modules for integrating with the Symbian operating system. The Nokia N900 also supports Python with GTK widget libraries, enabling programs to be written and run on the target device.[143]

Cross-compilers to other languages

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:

  • Brython,[144] Transcrypt[145][146] and Pyjs (latest release in 2012) compile Python to JavaScript.
  • Cython compiles (a superset of) Python to C (while the resulting code is also usable with Python and also e.g. C++).
  • Nuitka compiles Python into C.[147]
  • Numba uses LLVM to compile a subset of Python to machine code.
  • Pythran compiles a subset of Python 3 to C++ (C++11).[148][149][150]
  • RPython can be compiled to C, and is used to build the PyPy interpreter of Python.
  • The Python → 11l → C++ transpiler[151] compiles a subset of Python 3 to C++ (C++17).

Specialized:

  • MyHDL is a Python-based hardware description language (HDL), that converts MyHDL code to Verilog or VHDL code.

Older projects (or not to be used with Python 3.x and latest syntax):

  • Google’s Grumpy (latest release in 2017) transpiles Python 2 to Go.[152][153][154]
  • IronPython allows running Python 2.7 programs (and an alpha, released in 2021, is also available for «Python 3.4, although features and behaviors from later versions may be included»[155]) on the .NET Common Language Runtime.[156]
  • Jython compiles Python 2.7 to Java bytecode, allowing the use of the Java libraries from a Python program.[157]
  • Pyrex (latest release in 2010) and Shed Skin (latest release in 2013) compile to C and C++ respectively.

Performance

Performance comparison of various Python implementations on a non-numerical (combinatorial) workload was presented at EuroSciPy ’13.[158] Python’s performance compared to other programming languages is also benchmarked by The Computer Language Benchmarks Game.[159]

Development

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.[160] Python coding style is covered in PEP 8.[161] Outstanding PEPs are reviewed and commented on by the Python community and the steering council.[160]

Enhancement of the language corresponds with the development of the CPython reference implementation. The mailing list python-dev is the primary forum for the language’s development. Specific issues were originally discussed in the Roundup bug tracker hosted at by the foundation.[162] In 2022, all issues and discussions were migrated to GitHub.[163] Development originally took place on a self-hosted source-code repository running Mercurial, until Python moved to GitHub in January 2017.[164]

CPython’s public releases come in three types, distinguished by which part of the version number is incremented:

  • Backward-incompatible versions, where code is expected to break and needs to be manually ported. The first part of the version number is incremented. These releases happen infrequently—version 3.0 was released 8 years after 2.0. According to Guido van Rossum, a version 4.0 is very unlikely to ever happen.[165]
  • Major or «feature» releases are largely compatible with the previous version but introduce new features. The second part of the version number is incremented. Starting with Python 3.9, these releases are expected to happen annually.[166][167] Each major version is supported by bug fixes for several years after its release.[168]
  • Bugfix releases,[169] which introduce no new features, occur about every 3 months and are made when a sufficient number of bugs have been fixed upstream since the last release. Security vulnerabilities are also patched in these releases. The third and final part of the version number is incremented.[169]

Many alpha, beta, and release-candidates are also released as previews and for testing before final releases. Although there is a rough schedule for each release, they are often delayed if the code is not ready. Python’s development team monitors the state of the code by running the large unit test suite during development.[170]

The major academic conference on Python is PyCon. There are also special Python mentoring programs, such as Pyladies.

Python 3.10 deprecated wstr (to be removed in Python 3.12; meaning Python extensions[171] need to be modified by then),[172] and added pattern matching to the language.[173]

API documentation generators

Tools that can generate documentation for Python API include pydoc (available as part of the standard library), Sphinx, Pdoc and its forks, Doxygen and Graphviz, among others.[174]

Naming

Python’s name is derived from the British comedy group Monty Python, whom Python creator Guido van Rossum enjoyed while developing the language. Monty Python references appear frequently in Python code and culture;[175] for example, the metasyntactic variables often used in Python literature are spam and eggs instead of the traditional foo and bar.[175][176] The official Python documentation also contains various references to Monty Python routines.[177][178]

The prefix Py- is used to show that something is related to Python. Examples of the use of this prefix in names of Python applications or libraries include Pygame, a binding of SDL to Python (commonly used to create games); PyQt and PyGTK, which bind Qt and GTK to Python respectively; and PyPy, a Python implementation originally written in Python.

Popularity

Since 2003, Python has consistently ranked in the top ten most popular programming languages in the TIOBE Programming Community Index where as of December 2022 it was the most popular language (ahead of C, C++, and Java).[40] It was selected Programming Language of the Year (for «the highest rise in ratings in a year») in 2007, 2010, 2018, and 2020 (the only language to have done so four times as of 2020[179]).

An empirical study found that scripting languages, such as Python, are more productive than conventional languages, such as C and Java, for programming problems involving string manipulation and search in a dictionary, and determined that memory consumption was often «better than Java and not much worse than C or C++».[180]

Large organizations that use Python include Wikipedia, Google,[181] Yahoo!,[182] CERN,[183] NASA,[184] Facebook,[185] Amazon, Instagram,[186] Spotify,[187] and some smaller entities like ILM[188] and ITA.[189] The social news networking site Reddit was written mostly in Python.[190]

Uses

Python can serve as a scripting language for web applications, e.g., via mod_wsgi for the Apache webserver.[191] With Web Server Gateway Interface, a standard API has evolved to facilitate these applications. Web frameworks like Django, Pylons, Pyramid, TurboGears, web2py, Tornado, Flask, Bottle, and Zope support developers in the design and maintenance of complex applications. Pyjs and IronPython can be used to develop the client-side of Ajax-based applications. SQLAlchemy can be used as a data mapper to a relational database. Twisted is a framework to program communications between computers, and is used (for example) by Dropbox.

Libraries such as NumPy, SciPy, and Matplotlib allow the effective use of Python in scientific computing,[192][193] with specialized libraries such as Biopython and Astropy providing domain-specific functionality. SageMath is a computer algebra system with a notebook interface programmable in Python: its library covers many aspects of mathematics, including algebra, combinatorics, numerical mathematics, number theory, and calculus.[194] OpenCV has Python bindings with a rich set of features for computer vision and image processing.[195]

Python is commonly used in artificial intelligence projects and machine learning projects with the help of libraries like TensorFlow, Keras, Pytorch, and scikit-learn.[196][197][198][199] As a scripting language with a modular architecture, simple syntax, and rich text processing tools, Python is often used for natural language processing.[200]

Python can also be used to create games, with libraries such as Pygame, which can make 2D games.

Python has been successfully embedded in many software products as a scripting language, including in finite element method software such as Abaqus, 3D parametric modelers like FreeCAD, 3D animation packages such as 3ds Max, Blender, Cinema 4D, Lightwave, Houdini, Maya, modo, MotionBuilder, Softimage, the visual effects compositor Nuke, 2D imaging programs like GIMP,[201] Inkscape, Scribus and Paint Shop Pro,[202] and musical notation programs like scorewriter and capella. GNU Debugger uses Python as a pretty printer to show complex structures such as C++ containers. Esri promotes Python as the best choice for writing scripts in ArcGIS.[203] It has also been used in several video games,[204][205] and has been adopted as first of the three available programming languages in Google App Engine, the other two being Java and Go.[206]

Many operating systems include Python as a standard component. It ships with most Linux distributions,[207] AmigaOS 4 (using Python 2.7), FreeBSD (as a package), NetBSD, and OpenBSD (as a package) and can be used from the command line (terminal). Many Linux distributions use installers written in Python: Ubuntu uses the Ubiquity installer, while Red Hat Linux and Fedora Linux use the Anaconda installer. Gentoo Linux uses Python in its package management system, Portage.

Python is used extensively in the information security industry, including in exploit development.[208][209]

Most of the Sugar software for the One Laptop per Child XO, developed at Sugar Labs since 2008, is written in Python.[210] The Raspberry Pi single-board computer project has adopted Python as its main user-programming language.

LibreOffice includes Python and intends to replace Java with Python. Its Python Scripting Provider is a core feature[211] since Version 4.0 from 7 February 2013.

Languages influenced by Python

Python’s design and philosophy have influenced many other programming languages:

  • Boo uses indentation, a similar syntax, and a similar object model.[212]
  • Cobra uses indentation and a similar syntax, and its Acknowledgements document lists Python first among languages that influenced it.[213]
  • CoffeeScript, a programming language that cross-compiles to JavaScript, has Python-inspired syntax.
  • ECMAScript/JavaScript borrowed iterators and generators from Python.[214]
  • GDScript, a scripting language very similar to Python, built-in to the Godot game engine.[215]
  • Go is designed for the «speed of working in a dynamic language like Python»[216] and shares the same syntax for slicing arrays.
  • Groovy was motivated by the desire to bring the Python design philosophy to Java.[217]
  • Julia was designed to be «as usable for general programming as Python».[29]
  • Nim uses indentation and similar syntax.[218]
  • Ruby’s creator, Yukihiro Matsumoto, has said: «I wanted a scripting language that was more powerful than Perl, and more object-oriented than Python. That’s why I decided to design my own language.»[219]
  • Swift, a programming language developed by Apple, has some Python-inspired syntax.[220]

Python’s development practices have also been emulated by other languages. For example, the practice of requiring a document describing the rationale for, and issues surrounding, a change to the language (in Python, a PEP) is also used in Tcl,[221] Erlang,[222] and Swift.[223]

See also

  • Python syntax and semantics
  • pip (package manager)
  • List of programming languages
  • History of programming languages
  • Comparison of programming languages

References

  1. ^ «General Python FAQ — Python 3.9.2 documentation». docs.python.org. Archived from the original on 24 October 2012. Retrieved 28 March 2021.
  2. ^ «Python 0.9.1 part 01/21». alt.sources archives. Archived from the original on 11 August 2021. Retrieved 11 August 2021.
  3. ^ «Python 3.11.2, Python 3.10.10 and 3.12.0 alpha 5 are available». 8 February 2023. Retrieved 8 February 2023.
  4. ^ «Python 3.11.2, Python 3.10.10 and 3.12.0 alpha 5 are available». 7 February 2023. Retrieved 8 February 2023.
  5. ^ «Why is Python a dynamic language and also a strongly typed language – Python Wiki». wiki.python.org. Archived from the original on 14 March 2021. Retrieved 27 January 2021.
  6. ^ «PEP 483 – The Theory of Type Hints». Python.org. Archived from the original on 14 June 2020. Retrieved 14 June 2018.
  7. ^ «test — Regression tests package for Python — Python 3.7.13 documentation». docs.python.org. Retrieved 17 May 2022.
  8. ^ «platform — Access to underlying platform’s identifying data — Python 3.10.4 documentation». docs.python.org. Retrieved 17 May 2022.
  9. ^ «Download Python». Python.org. Archived from the original on 8 August 2018. Retrieved 24 May 2021.
  10. ^ Holth, Moore (30 March 2014). «PEP 0441 – Improving Python ZIP Application Support». Archived from the original on 26 December 2018. Retrieved 12 November 2015.
  11. ^ File extension .pyo was removed in Python 3.5. See PEP 0488 Archived 1 June 2020 at the Wayback Machine
  12. ^ «Starlark Language». Archived from the original on 15 June 2020. Retrieved 25 May 2019.
  13. ^ a b «Why was Python created in the first place?». General Python FAQ. Python Software Foundation. Archived from the original on 24 October 2012. Retrieved 22 March 2007. I had extensive experience with implementing an interpreted language in the ABC group at CWI, and from working with this group I had learned a lot about language design. This is the origin of many Python features, including the use of indentation for statement grouping and the inclusion of very high-level data types (although the details are all different in Python).
  14. ^ «Ada 83 Reference Manual (raise statement)». Archived from the original on 22 October 2019. Retrieved 7 January 2020.
  15. ^ a b Kuchling, Andrew M. (22 December 2006). «Interview with Guido van Rossum (July 1998)». amk.ca. Archived from the original on 1 May 2007. Retrieved 12 March 2012. I’d spent a summer at DEC’s Systems Research Center, which introduced me to Modula-2+; the Modula-3 final report was being written there at about the same time. What I learned there later showed up in Python’s exception handling, modules, and the fact that methods explicitly contain ‘self’ in their parameter list. String slicing came from Algol-68 and Icon.
  16. ^ a b c «itertools — Functions creating iterators for efficient looping — Python 3.7.1 documentation». docs.python.org. Archived from the original on 14 June 2020. Retrieved 22 November 2016. This module implements a number of iterator building blocks inspired by constructs from APL, Haskell, and SML.
  17. ^ van Rossum, Guido (1993). «An Introduction to Python for UNIX/C Programmers». Proceedings of the NLUUG Najaarsconferentie (Dutch UNIX Users Group). CiteSeerX 10.1.1.38.2023. even though the design of C is far from ideal, its influence on Python is considerable.
  18. ^ a b «Classes». The Python Tutorial. Python Software Foundation. Archived from the original on 23 October 2012. Retrieved 20 February 2012. It is a mixture of the class mechanisms found in C++ and Modula-3
  19. ^ Lundh, Fredrik. «Call By Object». effbot.org. Archived from the original on 23 November 2019. Retrieved 21 November 2017. replace «CLU» with «Python», «record» with «instance», and «procedure» with «function or method», and you get a pretty accurate description of Python’s object model.
  20. ^ Simionato, Michele. «The Python 2.3 Method Resolution Order». Python Software Foundation. Archived from the original on 20 August 2020. Retrieved 29 July 2014. The C3 method itself has nothing to do with Python, since it was invented by people working on Dylan and it is described in a paper intended for lispers
  21. ^ Kuchling, A. M. «Functional Programming HOWTO». Python v2.7.2 documentation. Python Software Foundation. Archived from the original on 24 October 2012. Retrieved 9 February 2012. List comprehensions and generator expressions […] are a concise notation for such operations, borrowed from the functional programming language Haskell.
  22. ^ Schemenauer, Neil; Peters, Tim; Hetland, Magnus Lie (18 May 2001). «PEP 255 – Simple Generators». Python Enhancement Proposals. Python Software Foundation. Archived from the original on 5 June 2020. Retrieved 9 February 2012.
  23. ^ «More Control Flow Tools». Python 3 documentation. Python Software Foundation. Archived from the original on 4 June 2016. Retrieved 24 July 2015. By popular demand, a few features commonly found in functional programming languages like Lisp have been added to Python. With the lambda keyword, small anonymous functions can be created.
  24. ^ «re — Regular expression operations — Python 3.10.6 documentation». docs.python.org. Retrieved 6 September 2022. This module provides regular expression matching operations similar to those found in Perl.
  25. ^ «CoffeeScript». coffeescript.org. Archived from the original on 12 June 2020. Retrieved 3 July 2018.
  26. ^ «The Genie Programming Language Tutorial». Archived from the original on 1 June 2020. Retrieved 28 February 2020.
  27. ^ «Perl and Python influences in JavaScript». www.2ality.com. 24 February 2013. Archived from the original on 26 December 2018. Retrieved 15 May 2015.
  28. ^ Rauschmayer, Axel. «Chapter 3: The Nature of JavaScript; Influences». O’Reilly, Speaking JavaScript. Archived from the original on 26 December 2018. Retrieved 15 May 2015.
  29. ^ a b «Why We Created Julia». Julia website. February 2012. Archived from the original on 2 May 2020. Retrieved 5 June 2014. We want something as usable for general programming as Python […]
  30. ^ Ring Team (4 December 2017). «Ring and other languages». ring-lang.net. ring-lang. Archived from the original on 25 December 2018. Retrieved 4 December 2017.
  31. ^ Bini, Ola (2007). Practical JRuby on Rails Web 2.0 Projects: bringing Ruby on Rails to the Java platform. Berkeley: APress. p. 3. ISBN 978-1-59059-881-8.
  32. ^ Lattner, Chris (3 June 2014). «Chris Lattner’s Homepage». Chris Lattner. Archived from the original on 25 December 2018. Retrieved 3 June 2014. The Swift language is the product of tireless effort from a team of language experts, documentation gurus, compiler optimization ninjas, and an incredibly important internal dogfooding group who provided feedback to help refine and battle-test ideas. Of course, it also greatly benefited from the experiences hard-won by many other languages in the field, drawing ideas from Objective-C, Rust, Haskell, Ruby, Python, C#, CLU, and far too many others to list.
  33. ^ Kuhlman, Dave. «A Python Book: Beginning Python, Advanced Python, and Python Exercises». Section 1.1. Archived from the original (PDF) on 23 June 2012.
  34. ^ «About Python». Python Software Foundation. Archived from the original on 20 April 2012. Retrieved 24 April 2012., second section «Fans of Python use the phrase «batteries included» to describe the standard library, which covers everything from asynchronous processing to zip files.»
  35. ^ «PEP 206 – Python Advanced Library». Python.org. Archived from the original on 5 May 2021. Retrieved 11 October 2021.
  36. ^ Rossum, Guido Van (20 January 2009). «The History of Python: A Brief Timeline of Python». The History of Python. Archived from the original on 5 June 2020. Retrieved 5 March 2021.
  37. ^ Peterson, Benjamin (20 April 2020). «Python Insider: Python 2.7.18, the last release of Python 2». Python Insider. Archived from the original on 26 April 2020. Retrieved 27 April 2020.
  38. ^ «Stack Overflow Developer Survey 2022». Stack Overflow. Retrieved 12 August 2022.
  39. ^ «The State of Developer Ecosystem in 2020 Infographic». JetBrains: Developer Tools for Professionals and Teams. Archived from the original on 1 March 2021. Retrieved 5 March 2021.
  40. ^ a b «TIOBE Index». TIOBE. Retrieved 3 January 2023. The TIOBE Programming Community index is an indicator of the popularity of programming languages Updated as required.
  41. ^ «PYPL PopularitY of Programming Language index». pypl.github.io. Archived from the original on 14 March 2017. Retrieved 26 March 2021.
  42. ^ a b Venners, Bill (13 January 2003). «The Making of Python». Artima Developer. Artima. Archived from the original on 1 September 2016. Retrieved 22 March 2007.
  43. ^ van Rossum, Guido (29 August 2000). «SETL (was: Lukewarm about range literals)». Python-Dev (Mailing list). Archived from the original on 14 July 2018. Retrieved 13 March 2011.
  44. ^ van Rossum, Guido (20 January 2009). «A Brief Timeline of Python». The History of Python. Archived from the original on 5 June 2020. Retrieved 20 January 2009.
  45. ^ Fairchild, Carlie (12 July 2018). «Guido van Rossum Stepping Down from Role as Python’s Benevolent Dictator For Life». Linux Journal. Archived from the original on 13 July 2018. Retrieved 13 July 2018.
  46. ^ «PEP 8100». Python Software Foundation. Archived from the original on 4 June 2020. Retrieved 4 May 2019.
  47. ^ «PEP 13 – Python Language Governance». Python.org. Archived from the original on 27 May 2021. Retrieved 25 August 2021.
  48. ^ Kuchling, A. M.; Zadka, Moshe (16 October 2000). «What’s New in Python 2.0». Python Software Foundation. Archived from the original on 23 October 2012. Retrieved 11 February 2012.
  49. ^ van Rossum, Guido (5 April 2006). «PEP 3000 – Python 3000». Python Enhancement Proposals. Python Software Foundation. Archived from the original on 3 March 2016. Retrieved 27 June 2009.
  50. ^ «2to3 – Automated Python 2 to 3 code translation». docs.python.org. Archived from the original on 4 June 2020. Retrieved 2 February 2021.
  51. ^ «PEP 373 – Python 2.7 Release Schedule». python.org. Archived from the original on 19 May 2020. Retrieved 9 January 2017.
  52. ^ «PEP 466 – Network Security Enhancements for Python 2.7.x». python.org. Archived from the original on 4 June 2020. Retrieved 9 January 2017.
  53. ^ «Sunsetting Python 2». Python.org. Archived from the original on 12 January 2020. Retrieved 22 September 2019.
  54. ^ «PEP 373 – Python 2.7 Release Schedule». Python.org. Archived from the original on 13 January 2020. Retrieved 22 September 2019.
  55. ^ Langa, Łukasz (19 February 2021). «Python Insider: Python 3.9.2 and 3.8.8 are now available». Python Insider. Archived from the original on 25 February 2021. Retrieved 26 February 2021.
  56. ^ «Red Hat Customer Portal – Access to 24×7 support and knowledge». access.redhat.com. Archived from the original on 6 March 2021. Retrieved 26 February 2021.
  57. ^ «CVE – CVE-2021-3177». cve.mitre.org. Archived from the original on 27 February 2021. Retrieved 26 February 2021.
  58. ^ «CVE – CVE-2021-23336». cve.mitre.org. Archived from the original on 24 February 2021. Retrieved 26 February 2021.
  59. ^ Langa, Łukasz (24 March 2022). «Python Insider: Python 3.10.4 and 3.9.12 are now available out of schedule». Python Insider. Retrieved 19 April 2022.
  60. ^ Langa, Łukasz (16 March 2022). «Python Insider: Python 3.10.3, 3.9.11, 3.8.13, and 3.7.13 are now available with security content». Python Insider. Retrieved 19 April 2022.
  61. ^ Langa, Łukasz (17 May 2022). «Python Insider: Python 3.9.13 is now available». Python Insider. Retrieved 21 May 2022.
  62. ^ «Python Insider: Python releases 3.10.7, 3.9.14, 3.8.14, and 3.7.14 are now available». pythoninsider.blogspot.com. 7 September 2022. Retrieved 16 September 2022.
  63. ^ «CVE — CVE-2020-10735». cve.mitre.org. Retrieved 16 September 2022.
  64. ^ corbet (24 October 2022). «Python 3.11 released [LWN.net]». lwn.net. Retrieved 15 November 2022.
  65. ^ The Cain Gang Ltd. «Python Metaclasses: Who? Why? When?» (PDF). Archived from the original (PDF) on 30 May 2009. Retrieved 27 June 2009.
  66. ^ «3.3. Special method names». The Python Language Reference. Python Software Foundation. Archived from the original on 15 December 2018. Retrieved 27 June 2009.
  67. ^ «PyDBC: method preconditions, method postconditions and class invariants for Python». Archived from the original on 23 November 2019. Retrieved 24 September 2011.
  68. ^ «Contracts for Python». Archived from the original on 15 June 2020. Retrieved 24 September 2011.
  69. ^ «PyDatalog». Archived from the original on 13 June 2020. Retrieved 22 July 2012.
  70. ^ «Extending and Embedding the Python Interpreter: Reference Counts». Docs.python.org. Archived from the original on 18 October 2012. Retrieved 5 June 2020. Since Python makes heavy use of malloc() and free(), it needs a strategy to avoid memory leaks as well as the use of freed memory. The chosen method is called reference counting.
  71. ^ a b Hettinger, Raymond (30 January 2002). «PEP 289 – Generator Expressions». Python Enhancement Proposals. Python Software Foundation. Archived from the original on 14 June 2020. Retrieved 19 February 2012.
  72. ^ «6.5 itertools – Functions creating iterators for efficient looping». Docs.python.org. Archived from the original on 14 June 2020. Retrieved 22 November 2016.
  73. ^ a b Peters, Tim (19 August 2004). «PEP 20 – The Zen of Python». Python Enhancement Proposals. Python Software Foundation. Archived from the original on 26 December 2018. Retrieved 24 November 2008.
  74. ^ Martelli, Alex; Ravenscroft, Anna; Ascher, David (2005). Python Cookbook, 2nd Edition. O’Reilly Media. p. 230. ISBN 978-0-596-00797-3. Archived from the original on 23 February 2020. Retrieved 14 November 2015.
  75. ^ «Python Culture». ebeab. 21 January 2014. Archived from the original on 30 January 2014.
  76. ^ «Why is it called Python?». General Python FAQ. Docs.python.org. Archived from the original on 24 October 2012. Retrieved 3 January 2023.
  77. ^ «15 Ways Python Is a Powerful Force on the Web». Archived from the original on 11 May 2019. Retrieved 3 July 2018.
  78. ^ «pprint — Data pretty printer — Python 3.11.0 documentation». docs.python.org. Archived from the original on 22 January 2021. Retrieved 5 November 2022. stuff = [‘spam’, ‘eggs’, ‘lumberjack’, ‘knights’, ‘ni’]
  79. ^ Clark, Robert (26 April 2019). «How to be Pythonic and why you should care». Medium. Archived from the original on 13 August 2021. Retrieved 20 January 2021.
  80. ^ «Code Style — The Hitchhiker’s Guide to Python». docs.python-guide.org. Archived from the original on 27 January 2021. Retrieved 20 January 2021.
  81. ^ «Is Python a good language for beginning programmers?». General Python FAQ. Python Software Foundation. Archived from the original on 24 October 2012. Retrieved 21 March 2007.
  82. ^ «Myths about indentation in Python». Secnetix.de. Archived from the original on 18 February 2018. Retrieved 19 April 2011.
  83. ^ Guttag, John V. (12 August 2016). Introduction to Computation and Programming Using Python: With Application to Understanding Data. MIT Press. ISBN 978-0-262-52962-4.
  84. ^ «PEP 8 – Style Guide for Python Code». Python.org. Archived from the original on 17 April 2019. Retrieved 26 March 2019.
  85. ^ «8. Errors and Exceptions — Python 3.12.0a0 documentation». docs.python.org. Retrieved 9 May 2022.
  86. ^ «Highlights: Python 2.5». Python.org. Archived from the original on 4 August 2019. Retrieved 20 March 2018.
  87. ^ van Rossum, Guido (22 April 2009). «Tail Recursion Elimination». Neopythonic.blogspot.be. Archived from the original on 19 May 2018. Retrieved 3 December 2012.
  88. ^ van Rossum, Guido (9 February 2006). «Language Design Is Not Just Solving Puzzles». Artima forums. Artima. Archived from the original on 17 January 2020. Retrieved 21 March 2007.
  89. ^ van Rossum, Guido; Eby, Phillip J. (10 May 2005). «PEP 342 – Coroutines via Enhanced Generators». Python Enhancement Proposals. Python Software Foundation. Archived from the original on 29 May 2020. Retrieved 19 February 2012.
  90. ^ «PEP 380». Python.org. Archived from the original on 4 June 2020. Retrieved 3 December 2012.
  91. ^ «division». python.org. Archived from the original on 20 July 2006. Retrieved 30 July 2014.
  92. ^ «PEP 0465 – A dedicated infix operator for matrix multiplication». python.org. Archived from the original on 4 June 2020. Retrieved 1 January 2016.
  93. ^ «Python 3.5.1 Release and Changelog». python.org. Archived from the original on 14 May 2020. Retrieved 1 January 2016.
  94. ^ «What’s New in Python 3.8». Archived from the original on 8 June 2020. Retrieved 14 October 2019.
  95. ^ van Rossum, Guido; Hettinger, Raymond (7 February 2003). «PEP 308 – Conditional Expressions». Python Enhancement Proposals. Python Software Foundation. Archived from the original on 13 March 2016. Retrieved 13 July 2011.
  96. ^ «4. Built-in Types — Python 3.6.3rc1 documentation». python.org. Archived from the original on 14 June 2020. Retrieved 1 October 2017.
  97. ^ «5.3. Tuples and Sequences — Python 3.7.1rc2 documentation». python.org. Archived from the original on 10 June 2020. Retrieved 17 October 2018.
  98. ^ a b «PEP 498 – Literal String Interpolation». python.org. Archived from the original on 15 June 2020. Retrieved 8 March 2017.
  99. ^ «Why must ‘self’ be used explicitly in method definitions and calls?». Design and History FAQ. Python Software Foundation. Archived from the original on 24 October 2012. Retrieved 19 February 2012.
  100. ^ Sweigart, Al (2020). Beyond the Basic Stuff with Python: Best Practices for Writing Clean Code. No Starch Press. p. 322. ISBN 978-1-59327-966-0. Archived from the original on 13 August 2021. Retrieved 7 July 2021.
  101. ^ «The Python Language Reference, section 3.3. New-style and classic classes, for release 2.7.1». Archived from the original on 26 October 2012. Retrieved 12 January 2011.
  102. ^ «Type hinting for Python». LWN.net. 24 December 2014. Archived from the original on 20 June 2019. Retrieved 5 May 2015.
  103. ^ «mypy – Optional Static Typing for Python». Archived from the original on 6 June 2020. Retrieved 28 January 2017.
  104. ^ «15. Floating Point Arithmetic: Issues and Limitations — Python 3.8.3 documentation». docs.python.org. Archived from the original on 6 June 2020. Retrieved 6 June 2020. Almost all machines today (November 2000) use IEEE-754 floating point arithmetic, and almost all platforms map Python floats to IEEE-754 «double precision».
  105. ^ Zadka, Moshe; van Rossum, Guido (11 March 2001). «PEP 237 – Unifying Long Integers and Integers». Python Enhancement Proposals. Python Software Foundation. Archived from the original on 28 May 2020. Retrieved 24 September 2011.
  106. ^ «Built-in Types». Archived from the original on 14 June 2020. Retrieved 3 October 2019.
  107. ^ «PEP 465 – A dedicated infix operator for matrix multiplication». python.org. Archived from the original on 29 May 2020. Retrieved 3 July 2018.
  108. ^ a b Zadka, Moshe; van Rossum, Guido (11 March 2001). «PEP 238 – Changing the Division Operator». Python Enhancement Proposals. Python Software Foundation. Archived from the original on 28 May 2020. Retrieved 23 October 2013.
  109. ^ «Why Python’s Integer Division Floors». 24 August 2010. Archived from the original on 5 June 2020. Retrieved 25 August 2010.
  110. ^ «round», The Python standard library, release 3.2, §2: Built-in functions, archived from the original on 25 October 2012, retrieved 14 August 2011
  111. ^ «round», The Python standard library, release 2.7, §2: Built-in functions, archived from the original on 27 October 2012, retrieved 14 August 2011
  112. ^ Beazley, David M. (2009). Python Essential Reference (4th ed.). p. 66. ISBN 9780672329784.
  113. ^ Kernighan, Brian W.; Ritchie, Dennis M. (1988). The C Programming Language (2nd ed.). p. 206.
  114. ^ Batista, Facundo. «PEP 0327 – Decimal Data Type». Python.org. Archived from the original on 4 June 2020. Retrieved 26 September 2015.
  115. ^ «What’s New in Python 2.6 — Python v2.6.9 documentation». docs.python.org. Archived from the original on 23 December 2019. Retrieved 26 September 2015.
  116. ^ «10 Reasons Python Rocks for Research (And a Few Reasons it Doesn’t) – Hoyt Koepke». www.stat.washington.edu. Archived from the original on 31 May 2020. Retrieved 3 February 2019.
  117. ^ Shell, Scott (17 June 2014). «An introduction to Python for scientific computing» (PDF). Archived (PDF) from the original on 4 February 2019. Retrieved 3 February 2019.
  118. ^ Piotrowski, Przemyslaw (July 2006). «Build a Rapid Web Development Environment for Python Server Pages and Oracle». Oracle Technology Network. Oracle. Archived from the original on 2 April 2019. Retrieved 12 March 2012.
  119. ^ Batista, Facundo (17 October 2003). «PEP 327 – Decimal Data Type». Python Enhancement Proposals. Python Software Foundation. Archived from the original on 4 June 2020. Retrieved 24 November 2008.
  120. ^ Eby, Phillip J. (7 December 2003). «PEP 333 – Python Web Server Gateway Interface v1.0». Python Enhancement Proposals. Python Software Foundation. Archived from the original on 14 June 2020. Retrieved 19 February 2012.
  121. ^ «Modulecounts». Modulecounts. 14 November 2022. Archived from the original on 26 June 2022.
  122. ^ Enthought, Canopy. «Canopy». www.enthought.com. Archived from the original on 15 July 2017. Retrieved 20 August 2016.
  123. ^ «PEP 7 – Style Guide for C Code | peps.python.org». peps.python.org. Retrieved 28 April 2022.
  124. ^ «Mailman 3 Why aren’t we allowing the use of C11? — Python-Dev — python.org». mail.python.org. Archived from the original on 14 April 2021. Retrieved 1 March 2021.
  125. ^ «Issue 35473: Intel compiler (icc) does not fully support C11 Features, including atomics – Python tracker». bugs.python.org. Archived from the original on 14 April 2021. Retrieved 1 March 2021.
  126. ^ «4. Building C and C++ Extensions — Python 3.9.2 documentation». docs.python.org. Archived from the original on 3 March 2021. Retrieved 1 March 2021.
  127. ^ van Rossum, Guido (5 June 2001). «PEP 7 – Style Guide for C Code». Python Enhancement Proposals. Python Software Foundation. Archived from the original on 1 June 2020. Retrieved 24 November 2008.
  128. ^ «CPython byte code». Docs.python.org. Archived from the original on 5 June 2020. Retrieved 16 February 2016.
  129. ^ «Python 2.5 internals» (PDF). Archived (PDF) from the original on 6 August 2012. Retrieved 19 April 2011.
  130. ^ «Changelog — Python 3.9.0 documentation». docs.python.org. Archived from the original on 7 February 2021. Retrieved 8 February 2021.
  131. ^ «Download Python». Python.org. Archived from the original on 8 December 2020. Retrieved 13 December 2020.
  132. ^ «history [vmspython]». www.vmspython.org. Archived from the original on 2 December 2020. Retrieved 4 December 2020.
  133. ^ «An Interview with Guido van Rossum». Oreilly.com. Archived from the original on 16 July 2014. Retrieved 24 November 2008.
  134. ^ «Download Python for Other Platforms». Python.org. Archived from the original on 27 November 2020. Retrieved 4 December 2020.
  135. ^ «PyPy compatibility». Pypy.org. Archived from the original on 6 June 2020. Retrieved 3 December 2012.
  136. ^ Team, The PyPy (28 December 2019). «Download and Install». PyPy. Retrieved 8 January 2022.
  137. ^ «speed comparison between CPython and Pypy». Speed.pypy.org. Archived from the original on 10 May 2021. Retrieved 3 December 2012.
  138. ^ «Application-level Stackless features — PyPy 2.0.2 documentation». Doc.pypy.org. Archived from the original on 4 June 2020. Retrieved 17 July 2013.
  139. ^ «Python-for-EV3». LEGO Education. Archived from the original on 7 June 2020. Retrieved 17 April 2019.
  140. ^ Yegulalp, Serdar (29 October 2020). «Pyston returns from the dead to speed Python». InfoWorld. Archived from the original on 27 January 2021. Retrieved 26 January 2021.
  141. ^ «cinder: Instagram’s performance-oriented fork of CPython». GitHub. Archived from the original on 4 May 2021. Retrieved 4 May 2021.
  142. ^ «Plans for optimizing Python». Google Project Hosting. 15 December 2009. Archived from the original on 11 April 2016. Retrieved 24 September 2011.
  143. ^ «Python on the Nokia N900». Stochastic Geometry. 29 April 2010. Archived from the original on 20 June 2019. Retrieved 9 July 2015.
  144. ^ «Brython». brython.info. Archived from the original on 3 August 2018. Retrieved 21 January 2021.
  145. ^ «Transcrypt – Python in the browser». transcrypt.org. Archived from the original on 19 August 2018. Retrieved 22 December 2020.
  146. ^ «Transcrypt: Anatomy of a Python to JavaScript Compiler». InfoQ. Archived from the original on 5 December 2020. Retrieved 20 January 2021.
  147. ^ «Nuitka Home | Nuitka Home». nuitka.net. Archived from the original on 30 May 2020. Retrieved 18 August 2017.
  148. ^ Borderies, Olivier (24 January 2019). «Pythran: Python at C++ speed !». Medium. Archived from the original on 25 March 2020. Retrieved 25 March 2020.
  149. ^ «Pythran — Pythran 0.9.5 documentation». pythran.readthedocs.io. Archived from the original on 19 February 2020. Retrieved 25 March 2020.
  150. ^ Guelton, Serge; Brunet, Pierrick; Amini, Mehdi; Merlini, Adrien; Corbillon, Xavier; Raynaud, Alan (16 March 2015). «Pythran: enabling static optimization of scientific Python programs». Computational Science & Discovery. IOP Publishing. 8 (1): 014001. Bibcode:2015CS&D….8a4001G. doi:10.1088/1749-4680/8/1/014001. ISSN 1749-4699.
  151. ^ The Python → 11l → C++ transpiler
  152. ^ «google/grumpy». 10 April 2020. Archived from the original on 15 April 2020. Retrieved 25 March 2020 – via GitHub.
  153. ^ «Projects». opensource.google. Archived from the original on 24 April 2020. Retrieved 25 March 2020.
  154. ^ Francisco, Thomas Claburn in San. «Google’s Grumpy code makes Python Go». www.theregister.com. Archived from the original on 7 March 2021. Retrieved 20 January 2021.
  155. ^ «GitHub – IronLanguages/ironpython3: Implementation of Python 3.x for .NET Framework that is built on top of the Dynamic Language Runtime». GitHub. Archived from the original on 28 September 2021.
  156. ^ «IronPython.net /». ironpython.net. Archived from the original on 17 April 2021.
  157. ^ «Jython FAQ». www.jython.org. Archived from the original on 22 April 2021. Retrieved 22 April 2021.
  158. ^ Murri, Riccardo (2013). Performance of Python runtimes on a non-numeric scientific code. European Conference on Python in Science (EuroSciPy). arXiv:1404.6388. Bibcode:2014arXiv1404.6388M.
  159. ^ «The Computer Language Benchmarks Game». Archived from the original on 14 June 2020. Retrieved 30 April 2020.
  160. ^ a b Warsaw, Barry; Hylton, Jeremy; Goodger, David (13 June 2000). «PEP 1 – PEP Purpose and Guidelines». Python Enhancement Proposals. Python Software Foundation. Archived from the original on 6 June 2020. Retrieved 19 April 2011.
  161. ^ «PEP 8 – Style Guide for Python Code». Python.org. Archived from the original on 17 April 2019. Retrieved 26 March 2019.
  162. ^ Cannon, Brett. «Guido, Some Guys, and a Mailing List: How Python is Developed». python.org. Python Software Foundation. Archived from the original on 1 June 2009. Retrieved 27 June 2009.
  163. ^ «Moving Python’s bugs to GitHub [LWN.net]».
  164. ^ «Python Developer’s Guide — Python Developer’s Guide». devguide.python.org. Archived from the original on 9 November 2020. Retrieved 17 December 2019.
  165. ^ Hughes, Owen (24 May 2021). «Programming languages: Why Python 4.0 might never arrive, according to its creator». TechRepublic. Retrieved 16 May 2022.
  166. ^ «PEP 602 – Annual Release Cycle for Python». Python.org. Archived from the original on 14 June 2020. Retrieved 6 November 2019.
  167. ^ «Changing the Python release cadence [LWN.net]». lwn.net. Archived from the original on 6 November 2019. Retrieved 6 November 2019.
  168. ^ Norwitz, Neal (8 April 2002). «[Python-Dev] Release Schedules (was Stability & change)». Archived from the original on 15 December 2018. Retrieved 27 June 2009.
  169. ^ a b Aahz; Baxter, Anthony (15 March 2001). «PEP 6 – Bug Fix Releases». Python Enhancement Proposals. Python Software Foundation. Archived from the original on 5 June 2020. Retrieved 27 June 2009.
  170. ^ «Python Buildbot». Python Developer’s Guide. Python Software Foundation. Archived from the original on 5 June 2020. Retrieved 24 September 2011.
  171. ^ «1. Extending Python with C or C++ — Python 3.9.1 documentation». docs.python.org. Archived from the original on 23 June 2020. Retrieved 14 February 2021.
  172. ^ «PEP 623 – Remove wstr from Unicode». Python.org. Archived from the original on 5 March 2021. Retrieved 14 February 2021.
  173. ^ «PEP 634 – Structural Pattern Matching: Specification». Python.org. Archived from the original on 6 May 2021. Retrieved 14 February 2021.
  174. ^ «Documentation Tools». Python.org. Archived from the original on 11 November 2020. Retrieved 22 March 2021.
  175. ^ a b «Whetting Your Appetite». The Python Tutorial. Python Software Foundation. Archived from the original on 26 October 2012. Retrieved 20 February 2012.
  176. ^ «In Python, should I use else after a return in an if block?». Stack Overflow. Stack Exchange. 17 February 2011. Archived from the original on 20 June 2019. Retrieved 6 May 2011.
  177. ^ Lutz, Mark (2009). Learning Python: Powerful Object-Oriented Programming. O’Reilly Media, Inc. p. 17. ISBN 9781449379322. Archived from the original on 17 July 2017. Retrieved 9 May 2017.
  178. ^ Fehily, Chris (2002). Python. Peachpit Press. p. xv. ISBN 9780201748840. Archived from the original on 17 July 2017. Retrieved 9 May 2017.
  179. ^ Blake, Troy (18 January 2021). «TIOBE Index for January 2021». Technology News and Information by SeniorDBA. Archived from the original on 21 March 2021. Retrieved 26 February 2021.
  180. ^ Prechelt, Lutz (14 March 2000). «An empirical comparison of C, C++, Java, Perl, Python, Rexx, and Tcl» (PDF). Archived (PDF) from the original on 3 January 2020. Retrieved 30 August 2013.
  181. ^ «Quotes about Python». Python Software Foundation. Archived from the original on 3 June 2020. Retrieved 8 January 2012.
  182. ^ «Organizations Using Python». Python Software Foundation. Archived from the original on 21 August 2018. Retrieved 15 January 2009.
  183. ^ «Python : the holy grail of programming». CERN Bulletin. CERN Publications (31/2006). 31 July 2006. Archived from the original on 15 January 2013. Retrieved 11 February 2012.
  184. ^ Shafer, Daniel G. (17 January 2003). «Python Streamlines Space Shuttle Mission Design». Python Software Foundation. Archived from the original on 5 June 2020. Retrieved 24 November 2008.
  185. ^ «Tornado: Facebook’s Real-Time Web Framework for Python – Facebook for Developers». Facebook for Developers. Archived from the original on 19 February 2019. Retrieved 19 June 2018.
  186. ^ «What Powers Instagram: Hundreds of Instances, Dozens of Technologies». Instagram Engineering. 11 December 2016. Archived from the original on 15 June 2020. Retrieved 27 May 2019.
  187. ^ «How we use Python at Spotify». Spotify Labs. 20 March 2013. Archived from the original on 10 June 2020. Retrieved 25 July 2018.
  188. ^ Fortenberry, Tim (17 January 2003). «Industrial Light & Magic Runs on Python». Python Software Foundation. Archived from the original on 6 June 2020. Retrieved 11 February 2012.
  189. ^ Taft, Darryl K. (5 March 2007). «Python Slithers into Systems». eWeek.com. Ziff Davis Holdings. Archived from the original on 13 August 2021. Retrieved 24 September 2011.
  190. ^ GitHub – reddit-archive/reddit: historical code from reddit.com., The Reddit Archives, archived from the original on 1 June 2020, retrieved 20 March 2019
  191. ^ «Usage statistics and market share of Python for websites». 2012. Archived from the original on 13 August 2021. Retrieved 18 December 2012.
  192. ^ Oliphant, Travis (2007). «Python for Scientific Computing». Computing in Science and Engineering. 9 (3): 10–20. Bibcode:2007CSE…..9c..10O. CiteSeerX 10.1.1.474.6460. doi:10.1109/MCSE.2007.58. S2CID 206457124. Archived from the original on 15 June 2020. Retrieved 10 April 2015.
  193. ^ Millman, K. Jarrod; Aivazis, Michael (2011). «Python for Scientists and Engineers». Computing in Science and Engineering. 13 (2): 9–12. Bibcode:2011CSE….13b…9M. doi:10.1109/MCSE.2011.36. Archived from the original on 19 February 2019. Retrieved 7 July 2014.
  194. ^ Science education with SageMath, Innovative Computing in Science Education, archived from the original on 15 June 2020, retrieved 22 April 2019
  195. ^ «OpenCV: OpenCV-Python Tutorials». docs.opencv.org. Archived from the original on 23 September 2020. Retrieved 14 September 2020.
  196. ^ Dean, Jeff; Monga, Rajat; et al. (9 November 2015). «TensorFlow: Large-scale machine learning on heterogeneous systems» (PDF). TensorFlow.org. Google Research. Archived (PDF) from the original on 20 November 2015. Retrieved 10 November 2015.
  197. ^ Piatetsky, Gregory. «Python eats away at R: Top Software for Analytics, Data Science, Machine Learning in 2018: Trends and Analysis». KDnuggets. KDnuggets. Archived from the original on 15 November 2019. Retrieved 30 May 2018.
  198. ^ «Who is using scikit-learn? — scikit-learn 0.20.1 documentation». scikit-learn.org. Archived from the original on 6 May 2020. Retrieved 30 November 2018.
  199. ^ Jouppi, Norm. «Google supercharges machine learning tasks with TPU custom chip». Google Cloud Platform Blog. Archived from the original on 18 May 2016. Retrieved 19 May 2016.
  200. ^ «Natural Language Toolkit — NLTK 3.5b1 documentation». www.nltk.org. Archived from the original on 13 June 2020. Retrieved 10 April 2020.
  201. ^ «Installers for GIMP for Windows – Frequently Asked Questions». 26 July 2013. Archived from the original on 17 July 2013. Retrieved 26 July 2013.
  202. ^ «jasc psp9components». Archived from the original on 19 March 2008.
  203. ^ «About getting started with writing geoprocessing scripts». ArcGIS Desktop Help 9.2. Environmental Systems Research Institute. 17 November 2006. Archived from the original on 5 June 2020. Retrieved 11 February 2012.
  204. ^ CCP porkbelly (24 August 2010). «Stackless Python 2.7». EVE Community Dev Blogs. CCP Games. Archived from the original on 11 January 2014. Retrieved 11 January 2014. As you may know, EVE has at its core the programming language known as Stackless Python.
  205. ^ Caudill, Barry (20 September 2005). «Modding Sid Meier’s Civilization IV». Sid Meier’s Civilization IV Developer Blog. Firaxis Games. Archived from the original on 2 December 2010. we created three levels of tools … The next level offers Python and XML support, letting modders with more experience manipulate the game world and everything in it.
  206. ^ «Python Language Guide (v1.0)». Google Documents List Data API v1.0. Archived from the original on 15 July 2010.
  207. ^ «Python Setup and Usage». Python Software Foundation. Archived from the original on 17 June 2020. Retrieved 10 January 2020.
  208. ^ «Immunity: Knowing You’re Secure». Archived from the original on 16 February 2009.
  209. ^ «Core Security». Core Security. Archived from the original on 9 June 2020. Retrieved 10 April 2020.
  210. ^ «What is Sugar?». Sugar Labs. Archived from the original on 9 January 2009. Retrieved 11 February 2012.
  211. ^ «4.0 New Features and Fixes». LibreOffice.org. The Document Foundation. 2013. Archived from the original on 9 February 2014. Retrieved 25 February 2013.
  212. ^ «Gotchas for Python Users». boo.codehaus.org. Codehaus Foundation. Archived from the original on 11 December 2008. Retrieved 24 November 2008.
  213. ^ Esterbrook, Charles. «Acknowledgements». cobra-language.com. Cobra Language. Archived from the original on 8 February 2008. Retrieved 7 April 2010.
  214. ^ «Proposals: iterators and generators [ES4 Wiki]». wiki.ecmascript.org. Archived from the original on 20 October 2007. Retrieved 24 November 2008.
  215. ^ «Frequently asked questions». Godot Engine documentation. Archived from the original on 28 April 2021. Retrieved 10 May 2021.
  216. ^ Kincaid, Jason (10 November 2009). «Google’s Go: A New Programming Language That’s Python Meets C++». TechCrunch. Archived from the original on 18 January 2010. Retrieved 29 January 2010.
  217. ^ Strachan, James (29 August 2003). «Groovy – the birth of a new dynamic language for the Java platform». Archived from the original on 5 April 2007. Retrieved 11 June 2007.
  218. ^ Yegulalp, Serdar (16 January 2017). «Nim language draws from best of Python, Rust, Go, and Lisp». InfoWorld. Archived from the original on 13 October 2018. Retrieved 7 June 2020. Nim’s syntax is strongly reminiscent of Python’s, as it uses indented code blocks and some of the same syntax (such as the way if/elif/then/else blocks are constructed).
  219. ^ «An Interview with the Creator of Ruby». Linuxdevcenter.com. Archived from the original on 28 April 2018. Retrieved 3 December 2012.
  220. ^ Lattner, Chris (3 June 2014). «Chris Lattner’s Homepage». Chris Lattner. Archived from the original on 22 December 2015. Retrieved 3 June 2014. I started work on the Swift Programming Language in July of 2010. I implemented much of the basic language structure, with only a few people knowing of its existence. A few other (amazing) people started contributing in earnest late in 2011, and it became a major focus for the Apple Developer Tools group in July 2013 […] drawing ideas from Objective-C, Rust, Haskell, Ruby, Python, C#, CLU, and far too many others to list.
  221. ^ Kupries, Andreas; Fellows, Donal K. (14 September 2000). «TIP #3: TIP Format». tcl.tk. Tcl Developer Xchange. Archived from the original on 13 July 2017. Retrieved 24 November 2008.
  222. ^ Gustafsson, Per; Niskanen, Raimo (29 January 2007). «EEP 1: EEP Purpose and Guidelines». erlang.org. Archived from the original on 15 June 2020. Retrieved 19 April 2011.
  223. ^ «Swift Evolution Process». Swift Programming Language Evolution repository on GitHub. 18 February 2020. Archived from the original on 27 April 2020. Retrieved 27 April 2020.

Sources

  • «Python for Artificial Intelligence». Wiki.python.org. 19 July 2012. Archived from the original on 1 November 2012. Retrieved 3 December 2012.
  • Paine, Jocelyn, ed. (August 2005). «AI in Python». AI Expert Newsletter. Amzi!. Archived from the original on 26 March 2012. Retrieved 11 February 2012.
  • «PyAIML 0.8.5 : Python Package Index». Pypi.python.org. Retrieved 17 July 2013.
  • Russell, Stuart J. & Norvig, Peter (2009). Artificial Intelligence: A Modern Approach (3rd ed.). Upper Saddle River, NJ: Prentice Hall. ISBN 978-0-13-604259-4.

Further reading

  • Downey, Allen B. (May 2012). Think Python: How to Think Like a Computer Scientist (version 1.6.6 ed.). ISBN 978-0-521-72596-5.
  • Hamilton, Naomi (5 August 2008). «The A-Z of Programming Languages: Python». Computerworld. Archived from the original on 29 December 2008. Retrieved 31 March 2010.
  • Lutz, Mark (2013). Learning Python (5th ed.). O’Reilly Media. ISBN 978-0-596-15806-4.
  • Summerfield, Mark (2009). Programming in Python 3 (2nd ed.). Addison-Wesley Professional. ISBN 978-0-321-68056-3.
  • Ramalho, Luciano (May 2022). Fluent Python (2nd ed.). O’Reilly Media. ISBN 978-1-4920-5632-4.

External links

  • Official website Edit this at Wikidata
Python

Python-logo-notext.svg
Paradigm Multi-paradigm: object-oriented,[1] procedural (imperative), functional, structured, reflective
Designed by Guido van Rossum
Developer Python Software Foundation
First appeared 20 February 1991; 32 years ago[2]
Stable release

3.11.2[3] Edit this on Wikidata
/ 8 February 2023; 25 days ago

Preview release

3.12.0a5[4] Edit this on Wikidata
/ 7 February 2023; 26 days ago

Typing discipline Duck, dynamic, strong typing;[5] gradual (since 3.5, but ignored in CPython)[6]
OS Windows, macOS, Linux/UNIX, Android[7][8] and more[9]
License Python Software Foundation License
Filename extensions .py, .pyi, .pyc, .pyd, .pyw, .pyz (since 3.5),[10] .pyo (prior to 3.5)[11]
Website python.org
Major implementations
CPython, PyPy, Stackless Python, MicroPython, CircuitPython, IronPython, Jython
Dialects
Cython, RPython, Starlark[12]
Influenced by
ABC,[13] Ada,[14] ALGOL 68,[15] APL,[16] C,[17] C++,[18] CLU,[19] Dylan,[20] Haskell,[21][16] Icon,[22] Lisp,[23] Modula-3,[15][18] Perl,[24] Standard ML[16]
Influenced
Apache Groovy, Boo, Cobra, CoffeeScript,[25] D, F#, GDScript, Genie,[26] Go, JavaScript,[27][28] Julia,[29] Nim, Ring,[30] Ruby,[31] Swift[32]
  • Python Programming at Wikibooks

Python is a high-level, general-purpose programming language. Its design philosophy emphasizes code readability with the use of significant indentation.[33]

Python is dynamically typed and garbage-collected. It supports multiple programming paradigms, including structured (particularly procedural), object-oriented and functional programming. It is often described as a «batteries included» language due to its comprehensive standard library.[34][35]

Guido van Rossum began working on Python in the late 1980s as a successor to the ABC programming language and first released it in 1991 as Python 0.9.0.[36] Python 2.0 was released in 2000. Python 3.0, released in 2008, was a major revision not completely backward-compatible with earlier versions. Python 2.7.18, released in 2020, was the last release of Python 2.[37]

Python consistently ranks as one of the most popular programming languages.[38][39][40][41]

History

Python was conceived in the late 1980s[42] by Guido van Rossum at Centrum Wiskunde & Informatica (CWI) in the Netherlands as a successor to the ABC programming language, which was inspired by SETL,[43] capable of exception handling and interfacing with the Amoeba operating system.[13] Its implementation began in December 1989.[44] Van Rossum shouldered sole responsibility for the project, as the lead developer, until 12 July 2018, when he announced his «permanent vacation» from his responsibilities as Python’s «benevolent dictator for life», a title the Python community bestowed upon him to reflect his long-term commitment as the project’s chief decision-maker.[45] In January 2019, active Python core developers elected a five-member Steering Council to lead the project.[46][47]

Python 2.0 was released on 16 October 2000, with many major new features such as list comprehensions, cycle-detecting garbage collection, reference counting, and Unicode support.[48] Python 3.0, released on 3 December 2008, with many of its major features backported to Python 2.6.x[49] and 2.7.x. Releases of Python 3 include the 2to3 utility, which automates the translation of Python 2 code to Python 3.[50]

Python 2.7’s end-of-life was initially set for 2015, then postponed to 2020 out of concern that a large body of existing code could not easily be forward-ported to Python 3.[51][52] No further security patches or other improvements will be released for it.[53][54] Currently only 3.7 and later are supported. In 2021, Python 3.9.2 and 3.8.8 were expedited[55] as all versions of Python (including 2.7[56]) had security issues leading to possible remote code execution[57] and web cache poisoning.[58]

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]

Design philosophy and features

Python is a multi-paradigm programming language. Object-oriented programming and structured programming are fully supported, and many of their features support functional programming and aspect-oriented programming (including metaprogramming[65] and metaobjects).[66] Many other paradigms are supported via extensions, including design by contract[67][68] and logic programming.[69]

Python uses dynamic typing and a combination of reference counting and a cycle-detecting garbage collector for memory management.[70] It uses dynamic name resolution (late binding), which binds method and variable names during program execution.

Its design offers some support for functional programming in the Lisp tradition. It has filter,mapandreduce functions; list comprehensions, dictionaries, sets, and generator expressions.[71] The standard library has two modules (itertools and functools) that implement functional tools borrowed from Haskell and Standard ML.[72]

Its core philosophy is summarized in the document The Zen of Python (PEP 20), which includes aphorisms such as:[73]

  • Beautiful is better than ugly.
  • Explicit is better than implicit.
  • Simple is better than complex.
  • Complex is better than complicated.
  • Readability counts.

Rather than building all of its functionality into its core, Python was designed to be highly extensible via modules. This compact modularity has made it particularly popular as a means of adding programmable interfaces to existing applications. Van Rossum’s vision of a small core language with a large standard library and easily extensible interpreter stemmed from his frustrations with ABC, which espoused the opposite approach.[42]

Python strives for a simpler, less-cluttered syntax and grammar while giving developers a choice in their coding methodology. In contrast to Perl’s «there is more than one way to do it» motto, Python embraces a «there should be one—and preferably only one—obvious way to do it» philosophy.[73] Alex Martelli, a Fellow at the Python Software Foundation and Python book author, wrote: «To describe something as ‘clever’ is not considered a compliment in the Python culture.»[74]

Python’s developers strive to avoid premature optimization and reject patches to non-critical parts of the CPython reference implementation that would offer marginal increases in speed at the cost of clarity.[75] When speed is important, a Python programmer can move time-critical functions to extension modules written in languages such as C; or use PyPy, a just-in-time compiler. Cython is also available, which translates a Python script into C and makes direct C-level API calls into the Python interpreter.

Python’s developers aim for it to be fun to use. This is reflected in its name—a tribute to the British comedy group Monty Python[76]—and in occasionally playful approaches to tutorials and reference materials, such as the use of the terms «spam» and «eggs» (a reference to a Monty Python sketch) in examples, instead of the often-used «foo» and «bar».[77][78]

A common neologism in the Python community is pythonic, which has a wide range of meanings related to program style. «Pythonic» code may use Python idioms well, be natural or show fluency in the language, or conform with Python’s minimalist philosophy and emphasis on readability. Code that is difficult to understand or reads like a rough transcription from another programming language is called unpythonic.[79][80]

Syntax and semantics

Python is meant to be an easily readable language. Its formatting is visually uncluttered and often uses English keywords where other languages use punctuation. Unlike many other languages, it does not use curly brackets to delimit blocks, and semicolons after statements are allowed but rarely used. It has fewer syntactic exceptions and special cases than C or Pascal.[81]

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]

Statements and control flow

Python’s statements include:

  • The assignment statement, using a single equals sign =
  • 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 (or new syntax except* in Python 3.11 for exception groups[85]); it also ensures that clean-up code in a finally block is always 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, which encloses a code block within a context manager (for example, acquiring a lock before it is run, then releasing the lock; or opening and closing a file), allowing resource-acquisition-is-initialization (RAII)-like behavior and replacing a common try/finally idiom[86]
  • The break statement, which exits a loop
  • The continue statement, which skips the rest of the current iteration and continues with the next
  • The del statement, which removes a variable—deleting the reference from the name to the value, and producing an error if the variable is referred to before it is redefined
  • The pass statement, serving as a NOP, syntactically needed to create an empty code block
  • The assert statement, used in debugging to check for conditions that should apply
  • The yield statement, which returns a value from a generator function (and also an operator); used to implement coroutines
  • The return statement, used to return a value from a function
  • The import and from statements, used to import modules whose functions or variables can be used in the current program

The assignment statement (=) binds a name as a reference to a separate, dynamically allocated object. Variables may subsequently be rebound at any time to any object. In Python, a variable name is a generic reference holder without a fixed data type; however, it always refers to some object with a type. This is called dynamic typing—in contrast to statically-typed languages, where each variable may contain only a value of a certain type.

Python does not support tail call optimization or first-class continuations, and, according to Van Rossum, it never will.[87][88] However, better support for coroutine-like functionality is provided by extending Python’s generators.[89] Before 2.5, generators were lazy iterators; data was passed unidirectionally out of the generator. From Python 2.5 on, it is possible to pass data back into a generator function; and from version 3.3, it can be passed through multiple stack levels.[90]

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:
    • 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]
    • 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.
    • 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:

  • List comprehensions vs. for-loops
  • Conditional expressions vs. if blocks
  • The eval() vs. exec() built-in functions (in Python 2, exec is a statement); the former is for expressions, the latter is for statements

Statements cannot be a part of an expression—so list and other comprehensions or lambda expressions, all being expressions, cannot contain statements. A particular case is that an assignment statement such as a = 1 cannot form part of the conditional expression of a conditional statement. This has the advantage of avoiding a classic C error of mistaking an assignment operator = for an equality operator == in conditions: if (c = 1) { ... } is syntactically valid (but probably unintended) C code, but if c = 1: ... causes a syntax error in Python.

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]

Typing

The standard type hierarchy in Python 3

Python uses duck typing and has typed objects but untyped variable names. Type constraints are not checked at compile time; rather, operations on an object may fail, signifying that it is not of a suitable type. Despite being dynamically typed, Python is strongly typed, forbidding operations that are not well-defined (for example, adding a number to a string) rather than silently attempting to make sense of them.

Python allows programmers to define their own types using classes, most often used for object-oriented programming. New instances of classes are constructed by calling the class (for example, SpamClass() or EggsClass()), and the classes are instances of the metaclass type (itself an instance of itself), allowing metaprogramming and reflection.

Before version 3.0, Python had two kinds of classes (both using the same syntax): old-style and new-style,[101] current Python versions only support the semantics new style.

Python supports gradual typing.[102] Python’s syntax allows specifying static types, but they are not checked in the default implementation, CPython. An experimental optional static type-checker, mypy, supports compile-time type checking.[103]

Summary of Python 3’s built-in types

Type Mutability Description Syntax examples
bool immutable Boolean value True
False
bytearray mutable Sequence of bytes bytearray(b'Some ASCII')
bytearray(b"Some ASCII")
bytearray([119, 105, 107, 105])
bytes immutable Sequence of bytes b'Some ASCII'
b"Some ASCII"
bytes([119, 105, 107, 105])
complex immutable Complex number with real and imaginary parts 3+2.7j
3 + 2.7j
dict mutable Associative array (or dictionary) of key and value pairs; can contain mixed types (keys and values), keys must be a hashable type {'key1': 1.0, 3: False}
{}
types.EllipsisType immutable An ellipsis placeholder to be used as an index in NumPy arrays ...
Ellipsis
float immutable Double-precision floating-point number. The precision is machine-dependent but in practice is generally implemented as a 64-bit IEEE 754 number with 53 bits of precision.[104]

1.33333

frozenset immutable Unordered set, contains no duplicates; can contain mixed types, if hashable frozenset([4.0, 'string', True])
int immutable Integer of unlimited magnitude[105] 42
list mutable List, can contain mixed types [4.0, 'string', True]
[]
types.NoneType immutable An object representing the absence of a value, often called null in other languages None
types.NotImplementedType immutable A placeholder that can be returned from overloaded operators to indicate unsupported operand types. NotImplemented
range immutable An immutable sequence of numbers commonly used for looping a specific number of times in for loops[106] range(-1, 10)
range(10, -5, -2)
set mutable Unordered set, contains no duplicates; can contain mixed types, if hashable {4.0, 'string', True}
set()
str immutable A character string: sequence of Unicode codepoints 'Wikipedia'
"Wikipedia"

"""Spanning
multiple
lines"""
Spanning
multiple
lines
tuple immutable Can contain mixed types (4.0, 'string', True)
('single element',)
()

Arithmetic operations

Python has the usual symbols for arithmetic operators (+, -, *, /), the floor division operator // and the modulo operation % (where the remainder can be negative, e.g. 4 % -3 == -2). It also has ** for exponentiation, e.g. 5**3 == 125 and 9**0.5 == 3.0, and a matrix‑multiplication operator @ .[107] These operators work like in traditional math; with the same precedence rules, the operators infix (+ and - can also be unary to represent positive and negative numbers respectively).

The division between integers produces floating-point results. The behavior of division has changed significantly over time:[108]

  • Current Python (i.e. since 3.0) changed / to always be floating-point division, e.g. 5/2 == 2.5.
  • 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 used in Python 2.7 to use Python 3.0 rules for division (see above).

In Python terms, / is true division (or simply division), and // is floor division. / before version 3.0 is classic division.[108]

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.[109]

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.[110] Versions before 3 used round-away-from-zero: round(0.5) is 1.0, round(-0.5) is −1.0.[111]

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.[112] 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.[113]

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.[114] The Fraction class in the fractions module provides arbitrary precision for rational numbers.[115]

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.[116][117]

Programming examples

Hello world program:

Program to calculate the factorial of a positive integer:

n = int(input('Type a number, and its factorial will be printed: '))

if n < 0:
    raise ValueError('You must enter a non-negative integer')

factorial = 1
for i in range(2, n + 1):
    factorial *= i

print(factorial)

Libraries

Python’s large standard library[118] provides tools suited to many tasks and is commonly cited as one of its greatest strengths. For Internet-facing applications, many standard formats and protocols such as MIME and HTTP are supported. It includes modules for creating graphical user interfaces, connecting to relational databases, generating pseudorandom numbers, arithmetic with arbitrary-precision decimals,[119] manipulating regular expressions, and unit testing.

Some parts of the standard library are covered by specifications—for example, the Web Server Gateway Interface (WSGI) implementation wsgiref follows PEP 333[120]—but most 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.

As of 14 November 2022, the Python Package Index (PyPI), the official repository for third-party Python software, contains over 415,000[121] packages with a wide range of functionality, including:

  • Automation
  • Data analytics
  • Databases
  • Documentation
  • Graphical user interfaces
  • Image processing
  • Machine learning
  • Mobile apps
  • Multimedia
  • Computer networking
  • Scientific computing
  • System administration
  • Test frameworks
  • Text processing
  • Web frameworks
  • Web scraping

Development environments

Most Python implementations (including CPython) include a read–eval–print loop (REPL), permitting them to function as a command line interpreter for which users enter statements sequentially and receive results immediately.

Python also comes with an Integrated development environment (IDE) called IDLE, which is more beginner-oriented.

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, including SageMath, for developing science- and math-related programs; PythonAnywhere, a browser-based IDE and hosting environment; and Canopy IDE, a commercial IDE emphasizing scientific computing.[122]

Implementations

Reference implementation

CPython is the reference implementation of Python. It is written in C, meeting the C89 standard (Python 3.11 uses C11[123]) with several select C99 features (With later C versions out, it is considered outdated.[124][125] CPython includes its own C extensions, but third-party extensions are not limited to older C versions—e.g. they can be implemented with C11 or C++.[126][127]) It compiles Python programs into an intermediate bytecode[128] which is then executed by its virtual machine.[129] CPython is distributed with a large standard library written in a mixture of C and native Python, and is available for many platforms, including Windows (starting with Python 3.9, the Python installer deliberately fails to install on Windows 7 and 8;[130][131] Windows XP was supported until Python 3.5) and most modern Unix-like systems, including macOS (and Apple M1 Macs, since Python 3.9.1, with experimental installer) and unofficial support for e.g. VMS.[132] Platform portability was one of its earliest priorities.[133] (During Python 1 and 2 development, even OS/2 and Solaris were supported,[134] but support has since been dropped for many platforms.)

Other implementations

  • PyPy is a fast, compliant interpreter of Python 2.7 and 3.8.[135][136] Its just-in-time compiler often brings a significant speed improvement over CPython but some libraries written in C cannot be used with it.[137]
  • Stackless Python is a significant fork of CPython that implements microthreads; it does not use the call stack in the same way, thus allowing massively concurrent programs. PyPy also has a stackless version.[138]
  • MicroPython and CircuitPython are Python 3 variants optimized for microcontrollers, including Lego Mindstorms EV3.[139]
  • Pyston is a variant of the Python runtime that uses just-in-time compilation to speed up the execution of Python programs.[140]
  • Cinder is a performance-oriented fork of CPython 3.8 that contains a number of optimizations including bytecode inline caching, eager evaluation of coroutines, a method-at-a-time JIT, and an experimental bytecode compiler.[141]

Unsupported implementations

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 fivefold by using the LLVM, and of improving its multithreading ability to scale to thousands of cores,[142] while ordinary implementations suffer from the global interpreter lock.
  • Psyco is a discontinued 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 the standard Python code. Psyco does not support Python 2.7 or later.
  • PyS60 was a Python 2 interpreter for Series 60 mobile phones released by Nokia in 2005. It implemented many of the modules from the standard library and some additional modules for integrating with the Symbian operating system. The Nokia N900 also supports Python with GTK widget libraries, enabling programs to be written and run on the target device.[143]

Cross-compilers to other languages

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:

  • Brython,[144] Transcrypt[145][146] and Pyjs (latest release in 2012) compile Python to JavaScript.
  • Cython compiles (a superset of) Python to C (while the resulting code is also usable with Python and also e.g. C++).
  • Nuitka compiles Python into C.[147]
  • Numba uses LLVM to compile a subset of Python to machine code.
  • Pythran compiles a subset of Python 3 to C++ (C++11).[148][149][150]
  • RPython can be compiled to C, and is used to build the PyPy interpreter of Python.
  • The Python → 11l → C++ transpiler[151] compiles a subset of Python 3 to C++ (C++17).

Specialized:

  • MyHDL is a Python-based hardware description language (HDL), that converts MyHDL code to Verilog or VHDL code.

Older projects (or not to be used with Python 3.x and latest syntax):

  • Google’s Grumpy (latest release in 2017) transpiles Python 2 to Go.[152][153][154]
  • IronPython allows running Python 2.7 programs (and an alpha, released in 2021, is also available for «Python 3.4, although features and behaviors from later versions may be included»[155]) on the .NET Common Language Runtime.[156]
  • Jython compiles Python 2.7 to Java bytecode, allowing the use of the Java libraries from a Python program.[157]
  • Pyrex (latest release in 2010) and Shed Skin (latest release in 2013) compile to C and C++ respectively.

Performance

Performance comparison of various Python implementations on a non-numerical (combinatorial) workload was presented at EuroSciPy ’13.[158] Python’s performance compared to other programming languages is also benchmarked by The Computer Language Benchmarks Game.[159]

Development

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.[160] Python coding style is covered in PEP 8.[161] Outstanding PEPs are reviewed and commented on by the Python community and the steering council.[160]

Enhancement of the language corresponds with the development of the CPython reference implementation. The mailing list python-dev is the primary forum for the language’s development. Specific issues were originally discussed in the Roundup bug tracker hosted at by the foundation.[162] In 2022, all issues and discussions were migrated to GitHub.[163] Development originally took place on a self-hosted source-code repository running Mercurial, until Python moved to GitHub in January 2017.[164]

CPython’s public releases come in three types, distinguished by which part of the version number is incremented:

  • Backward-incompatible versions, where code is expected to break and needs to be manually ported. The first part of the version number is incremented. These releases happen infrequently—version 3.0 was released 8 years after 2.0. According to Guido van Rossum, a version 4.0 is very unlikely to ever happen.[165]
  • Major or «feature» releases are largely compatible with the previous version but introduce new features. The second part of the version number is incremented. Starting with Python 3.9, these releases are expected to happen annually.[166][167] Each major version is supported by bug fixes for several years after its release.[168]
  • Bugfix releases,[169] which introduce no new features, occur about every 3 months and are made when a sufficient number of bugs have been fixed upstream since the last release. Security vulnerabilities are also patched in these releases. The third and final part of the version number is incremented.[169]

Many alpha, beta, and release-candidates are also released as previews and for testing before final releases. Although there is a rough schedule for each release, they are often delayed if the code is not ready. Python’s development team monitors the state of the code by running the large unit test suite during development.[170]

The major academic conference on Python is PyCon. There are also special Python mentoring programs, such as Pyladies.

Python 3.10 deprecated wstr (to be removed in Python 3.12; meaning Python extensions[171] need to be modified by then),[172] and added pattern matching to the language.[173]

API documentation generators

Tools that can generate documentation for Python API include pydoc (available as part of the standard library), Sphinx, Pdoc and its forks, Doxygen and Graphviz, among others.[174]

Naming

Python’s name is derived from the British comedy group Monty Python, whom Python creator Guido van Rossum enjoyed while developing the language. Monty Python references appear frequently in Python code and culture;[175] for example, the metasyntactic variables often used in Python literature are spam and eggs instead of the traditional foo and bar.[175][176] The official Python documentation also contains various references to Monty Python routines.[177][178]

The prefix Py- is used to show that something is related to Python. Examples of the use of this prefix in names of Python applications or libraries include Pygame, a binding of SDL to Python (commonly used to create games); PyQt and PyGTK, which bind Qt and GTK to Python respectively; and PyPy, a Python implementation originally written in Python.

Popularity

Since 2003, Python has consistently ranked in the top ten most popular programming languages in the TIOBE Programming Community Index where as of December 2022 it was the most popular language (ahead of C, C++, and Java).[40] It was selected Programming Language of the Year (for «the highest rise in ratings in a year») in 2007, 2010, 2018, and 2020 (the only language to have done so four times as of 2020[179]).

An empirical study found that scripting languages, such as Python, are more productive than conventional languages, such as C and Java, for programming problems involving string manipulation and search in a dictionary, and determined that memory consumption was often «better than Java and not much worse than C or C++».[180]

Large organizations that use Python include Wikipedia, Google,[181] Yahoo!,[182] CERN,[183] NASA,[184] Facebook,[185] Amazon, Instagram,[186] Spotify,[187] and some smaller entities like ILM[188] and ITA.[189] The social news networking site Reddit was written mostly in Python.[190]

Uses

Python can serve as a scripting language for web applications, e.g., via mod_wsgi for the Apache webserver.[191] With Web Server Gateway Interface, a standard API has evolved to facilitate these applications. Web frameworks like Django, Pylons, Pyramid, TurboGears, web2py, Tornado, Flask, Bottle, and Zope support developers in the design and maintenance of complex applications. Pyjs and IronPython can be used to develop the client-side of Ajax-based applications. SQLAlchemy can be used as a data mapper to a relational database. Twisted is a framework to program communications between computers, and is used (for example) by Dropbox.

Libraries such as NumPy, SciPy, and Matplotlib allow the effective use of Python in scientific computing,[192][193] with specialized libraries such as Biopython and Astropy providing domain-specific functionality. SageMath is a computer algebra system with a notebook interface programmable in Python: its library covers many aspects of mathematics, including algebra, combinatorics, numerical mathematics, number theory, and calculus.[194] OpenCV has Python bindings with a rich set of features for computer vision and image processing.[195]

Python is commonly used in artificial intelligence projects and machine learning projects with the help of libraries like TensorFlow, Keras, Pytorch, and scikit-learn.[196][197][198][199] As a scripting language with a modular architecture, simple syntax, and rich text processing tools, Python is often used for natural language processing.[200]

Python can also be used to create games, with libraries such as Pygame, which can make 2D games.

Python has been successfully embedded in many software products as a scripting language, including in finite element method software such as Abaqus, 3D parametric modelers like FreeCAD, 3D animation packages such as 3ds Max, Blender, Cinema 4D, Lightwave, Houdini, Maya, modo, MotionBuilder, Softimage, the visual effects compositor Nuke, 2D imaging programs like GIMP,[201] Inkscape, Scribus and Paint Shop Pro,[202] and musical notation programs like scorewriter and capella. GNU Debugger uses Python as a pretty printer to show complex structures such as C++ containers. Esri promotes Python as the best choice for writing scripts in ArcGIS.[203] It has also been used in several video games,[204][205] and has been adopted as first of the three available programming languages in Google App Engine, the other two being Java and Go.[206]

Many operating systems include Python as a standard component. It ships with most Linux distributions,[207] AmigaOS 4 (using Python 2.7), FreeBSD (as a package), NetBSD, and OpenBSD (as a package) and can be used from the command line (terminal). Many Linux distributions use installers written in Python: Ubuntu uses the Ubiquity installer, while Red Hat Linux and Fedora Linux use the Anaconda installer. Gentoo Linux uses Python in its package management system, Portage.

Python is used extensively in the information security industry, including in exploit development.[208][209]

Most of the Sugar software for the One Laptop per Child XO, developed at Sugar Labs since 2008, is written in Python.[210] The Raspberry Pi single-board computer project has adopted Python as its main user-programming language.

LibreOffice includes Python and intends to replace Java with Python. Its Python Scripting Provider is a core feature[211] since Version 4.0 from 7 February 2013.

Languages influenced by Python

Python’s design and philosophy have influenced many other programming languages:

  • Boo uses indentation, a similar syntax, and a similar object model.[212]
  • Cobra uses indentation and a similar syntax, and its Acknowledgements document lists Python first among languages that influenced it.[213]
  • CoffeeScript, a programming language that cross-compiles to JavaScript, has Python-inspired syntax.
  • ECMAScript/JavaScript borrowed iterators and generators from Python.[214]
  • GDScript, a scripting language very similar to Python, built-in to the Godot game engine.[215]
  • Go is designed for the «speed of working in a dynamic language like Python»[216] and shares the same syntax for slicing arrays.
  • Groovy was motivated by the desire to bring the Python design philosophy to Java.[217]
  • Julia was designed to be «as usable for general programming as Python».[29]
  • Nim uses indentation and similar syntax.[218]
  • Ruby’s creator, Yukihiro Matsumoto, has said: «I wanted a scripting language that was more powerful than Perl, and more object-oriented than Python. That’s why I decided to design my own language.»[219]
  • Swift, a programming language developed by Apple, has some Python-inspired syntax.[220]

Python’s development practices have also been emulated by other languages. For example, the practice of requiring a document describing the rationale for, and issues surrounding, a change to the language (in Python, a PEP) is also used in Tcl,[221] Erlang,[222] and Swift.[223]

See also

  • Python syntax and semantics
  • pip (package manager)
  • List of programming languages
  • History of programming languages
  • Comparison of programming languages

References

  1. ^ «General Python FAQ — Python 3.9.2 documentation». docs.python.org. Archived from the original on 24 October 2012. Retrieved 28 March 2021.
  2. ^ «Python 0.9.1 part 01/21». alt.sources archives. Archived from the original on 11 August 2021. Retrieved 11 August 2021.
  3. ^ «Python 3.11.2, Python 3.10.10 and 3.12.0 alpha 5 are available». 8 February 2023. Retrieved 8 February 2023.
  4. ^ «Python 3.11.2, Python 3.10.10 and 3.12.0 alpha 5 are available». 7 February 2023. Retrieved 8 February 2023.
  5. ^ «Why is Python a dynamic language and also a strongly typed language – Python Wiki». wiki.python.org. Archived from the original on 14 March 2021. Retrieved 27 January 2021.
  6. ^ «PEP 483 – The Theory of Type Hints». Python.org. Archived from the original on 14 June 2020. Retrieved 14 June 2018.
  7. ^ «test — Regression tests package for Python — Python 3.7.13 documentation». docs.python.org. Retrieved 17 May 2022.
  8. ^ «platform — Access to underlying platform’s identifying data — Python 3.10.4 documentation». docs.python.org. Retrieved 17 May 2022.
  9. ^ «Download Python». Python.org. Archived from the original on 8 August 2018. Retrieved 24 May 2021.
  10. ^ Holth, Moore (30 March 2014). «PEP 0441 – Improving Python ZIP Application Support». Archived from the original on 26 December 2018. Retrieved 12 November 2015.
  11. ^ File extension .pyo was removed in Python 3.5. See PEP 0488 Archived 1 June 2020 at the Wayback Machine
  12. ^ «Starlark Language». Archived from the original on 15 June 2020. Retrieved 25 May 2019.
  13. ^ a b «Why was Python created in the first place?». General Python FAQ. Python Software Foundation. Archived from the original on 24 October 2012. Retrieved 22 March 2007. I had extensive experience with implementing an interpreted language in the ABC group at CWI, and from working with this group I had learned a lot about language design. This is the origin of many Python features, including the use of indentation for statement grouping and the inclusion of very high-level data types (although the details are all different in Python).
  14. ^ «Ada 83 Reference Manual (raise statement)». Archived from the original on 22 October 2019. Retrieved 7 January 2020.
  15. ^ a b Kuchling, Andrew M. (22 December 2006). «Interview with Guido van Rossum (July 1998)». amk.ca. Archived from the original on 1 May 2007. Retrieved 12 March 2012. I’d spent a summer at DEC’s Systems Research Center, which introduced me to Modula-2+; the Modula-3 final report was being written there at about the same time. What I learned there later showed up in Python’s exception handling, modules, and the fact that methods explicitly contain ‘self’ in their parameter list. String slicing came from Algol-68 and Icon.
  16. ^ a b c «itertools — Functions creating iterators for efficient looping — Python 3.7.1 documentation». docs.python.org. Archived from the original on 14 June 2020. Retrieved 22 November 2016. This module implements a number of iterator building blocks inspired by constructs from APL, Haskell, and SML.
  17. ^ van Rossum, Guido (1993). «An Introduction to Python for UNIX/C Programmers». Proceedings of the NLUUG Najaarsconferentie (Dutch UNIX Users Group). CiteSeerX 10.1.1.38.2023. even though the design of C is far from ideal, its influence on Python is considerable.
  18. ^ a b «Classes». The Python Tutorial. Python Software Foundation. Archived from the original on 23 October 2012. Retrieved 20 February 2012. It is a mixture of the class mechanisms found in C++ and Modula-3
  19. ^ Lundh, Fredrik. «Call By Object». effbot.org. Archived from the original on 23 November 2019. Retrieved 21 November 2017. replace «CLU» with «Python», «record» with «instance», and «procedure» with «function or method», and you get a pretty accurate description of Python’s object model.
  20. ^ Simionato, Michele. «The Python 2.3 Method Resolution Order». Python Software Foundation. Archived from the original on 20 August 2020. Retrieved 29 July 2014. The C3 method itself has nothing to do with Python, since it was invented by people working on Dylan and it is described in a paper intended for lispers
  21. ^ Kuchling, A. M. «Functional Programming HOWTO». Python v2.7.2 documentation. Python Software Foundation. Archived from the original on 24 October 2012. Retrieved 9 February 2012. List comprehensions and generator expressions […] are a concise notation for such operations, borrowed from the functional programming language Haskell.
  22. ^ Schemenauer, Neil; Peters, Tim; Hetland, Magnus Lie (18 May 2001). «PEP 255 – Simple Generators». Python Enhancement Proposals. Python Software Foundation. Archived from the original on 5 June 2020. Retrieved 9 February 2012.
  23. ^ «More Control Flow Tools». Python 3 documentation. Python Software Foundation. Archived from the original on 4 June 2016. Retrieved 24 July 2015. By popular demand, a few features commonly found in functional programming languages like Lisp have been added to Python. With the lambda keyword, small anonymous functions can be created.
  24. ^ «re — Regular expression operations — Python 3.10.6 documentation». docs.python.org. Retrieved 6 September 2022. This module provides regular expression matching operations similar to those found in Perl.
  25. ^ «CoffeeScript». coffeescript.org. Archived from the original on 12 June 2020. Retrieved 3 July 2018.
  26. ^ «The Genie Programming Language Tutorial». Archived from the original on 1 June 2020. Retrieved 28 February 2020.
  27. ^ «Perl and Python influences in JavaScript». www.2ality.com. 24 February 2013. Archived from the original on 26 December 2018. Retrieved 15 May 2015.
  28. ^ Rauschmayer, Axel. «Chapter 3: The Nature of JavaScript; Influences». O’Reilly, Speaking JavaScript. Archived from the original on 26 December 2018. Retrieved 15 May 2015.
  29. ^ a b «Why We Created Julia». Julia website. February 2012. Archived from the original on 2 May 2020. Retrieved 5 June 2014. We want something as usable for general programming as Python […]
  30. ^ Ring Team (4 December 2017). «Ring and other languages». ring-lang.net. ring-lang. Archived from the original on 25 December 2018. Retrieved 4 December 2017.
  31. ^ Bini, Ola (2007). Practical JRuby on Rails Web 2.0 Projects: bringing Ruby on Rails to the Java platform. Berkeley: APress. p. 3. ISBN 978-1-59059-881-8.
  32. ^ Lattner, Chris (3 June 2014). «Chris Lattner’s Homepage». Chris Lattner. Archived from the original on 25 December 2018. Retrieved 3 June 2014. The Swift language is the product of tireless effort from a team of language experts, documentation gurus, compiler optimization ninjas, and an incredibly important internal dogfooding group who provided feedback to help refine and battle-test ideas. Of course, it also greatly benefited from the experiences hard-won by many other languages in the field, drawing ideas from Objective-C, Rust, Haskell, Ruby, Python, C#, CLU, and far too many others to list.
  33. ^ Kuhlman, Dave. «A Python Book: Beginning Python, Advanced Python, and Python Exercises». Section 1.1. Archived from the original (PDF) on 23 June 2012.
  34. ^ «About Python». Python Software Foundation. Archived from the original on 20 April 2012. Retrieved 24 April 2012., second section «Fans of Python use the phrase «batteries included» to describe the standard library, which covers everything from asynchronous processing to zip files.»
  35. ^ «PEP 206 – Python Advanced Library». Python.org. Archived from the original on 5 May 2021. Retrieved 11 October 2021.
  36. ^ Rossum, Guido Van (20 January 2009). «The History of Python: A Brief Timeline of Python». The History of Python. Archived from the original on 5 June 2020. Retrieved 5 March 2021.
  37. ^ Peterson, Benjamin (20 April 2020). «Python Insider: Python 2.7.18, the last release of Python 2». Python Insider. Archived from the original on 26 April 2020. Retrieved 27 April 2020.
  38. ^ «Stack Overflow Developer Survey 2022». Stack Overflow. Retrieved 12 August 2022.
  39. ^ «The State of Developer Ecosystem in 2020 Infographic». JetBrains: Developer Tools for Professionals and Teams. Archived from the original on 1 March 2021. Retrieved 5 March 2021.
  40. ^ a b «TIOBE Index». TIOBE. Retrieved 3 January 2023. The TIOBE Programming Community index is an indicator of the popularity of programming languages Updated as required.
  41. ^ «PYPL PopularitY of Programming Language index». pypl.github.io. Archived from the original on 14 March 2017. Retrieved 26 March 2021.
  42. ^ a b Venners, Bill (13 January 2003). «The Making of Python». Artima Developer. Artima. Archived from the original on 1 September 2016. Retrieved 22 March 2007.
  43. ^ van Rossum, Guido (29 August 2000). «SETL (was: Lukewarm about range literals)». Python-Dev (Mailing list). Archived from the original on 14 July 2018. Retrieved 13 March 2011.
  44. ^ van Rossum, Guido (20 January 2009). «A Brief Timeline of Python». The History of Python. Archived from the original on 5 June 2020. Retrieved 20 January 2009.
  45. ^ Fairchild, Carlie (12 July 2018). «Guido van Rossum Stepping Down from Role as Python’s Benevolent Dictator For Life». Linux Journal. Archived from the original on 13 July 2018. Retrieved 13 July 2018.
  46. ^ «PEP 8100». Python Software Foundation. Archived from the original on 4 June 2020. Retrieved 4 May 2019.
  47. ^ «PEP 13 – Python Language Governance». Python.org. Archived from the original on 27 May 2021. Retrieved 25 August 2021.
  48. ^ Kuchling, A. M.; Zadka, Moshe (16 October 2000). «What’s New in Python 2.0». Python Software Foundation. Archived from the original on 23 October 2012. Retrieved 11 February 2012.
  49. ^ van Rossum, Guido (5 April 2006). «PEP 3000 – Python 3000». Python Enhancement Proposals. Python Software Foundation. Archived from the original on 3 March 2016. Retrieved 27 June 2009.
  50. ^ «2to3 – Automated Python 2 to 3 code translation». docs.python.org. Archived from the original on 4 June 2020. Retrieved 2 February 2021.
  51. ^ «PEP 373 – Python 2.7 Release Schedule». python.org. Archived from the original on 19 May 2020. Retrieved 9 January 2017.
  52. ^ «PEP 466 – Network Security Enhancements for Python 2.7.x». python.org. Archived from the original on 4 June 2020. Retrieved 9 January 2017.
  53. ^ «Sunsetting Python 2». Python.org. Archived from the original on 12 January 2020. Retrieved 22 September 2019.
  54. ^ «PEP 373 – Python 2.7 Release Schedule». Python.org. Archived from the original on 13 January 2020. Retrieved 22 September 2019.
  55. ^ Langa, Łukasz (19 February 2021). «Python Insider: Python 3.9.2 and 3.8.8 are now available». Python Insider. Archived from the original on 25 February 2021. Retrieved 26 February 2021.
  56. ^ «Red Hat Customer Portal – Access to 24×7 support and knowledge». access.redhat.com. Archived from the original on 6 March 2021. Retrieved 26 February 2021.
  57. ^ «CVE – CVE-2021-3177». cve.mitre.org. Archived from the original on 27 February 2021. Retrieved 26 February 2021.
  58. ^ «CVE – CVE-2021-23336». cve.mitre.org. Archived from the original on 24 February 2021. Retrieved 26 February 2021.
  59. ^ Langa, Łukasz (24 March 2022). «Python Insider: Python 3.10.4 and 3.9.12 are now available out of schedule». Python Insider. Retrieved 19 April 2022.
  60. ^ Langa, Łukasz (16 March 2022). «Python Insider: Python 3.10.3, 3.9.11, 3.8.13, and 3.7.13 are now available with security content». Python Insider. Retrieved 19 April 2022.
  61. ^ Langa, Łukasz (17 May 2022). «Python Insider: Python 3.9.13 is now available». Python Insider. Retrieved 21 May 2022.
  62. ^ «Python Insider: Python releases 3.10.7, 3.9.14, 3.8.14, and 3.7.14 are now available». pythoninsider.blogspot.com. 7 September 2022. Retrieved 16 September 2022.
  63. ^ «CVE — CVE-2020-10735». cve.mitre.org. Retrieved 16 September 2022.
  64. ^ corbet (24 October 2022). «Python 3.11 released [LWN.net]». lwn.net. Retrieved 15 November 2022.
  65. ^ The Cain Gang Ltd. «Python Metaclasses: Who? Why? When?» (PDF). Archived from the original (PDF) on 30 May 2009. Retrieved 27 June 2009.
  66. ^ «3.3. Special method names». The Python Language Reference. Python Software Foundation. Archived from the original on 15 December 2018. Retrieved 27 June 2009.
  67. ^ «PyDBC: method preconditions, method postconditions and class invariants for Python». Archived from the original on 23 November 2019. Retrieved 24 September 2011.
  68. ^ «Contracts for Python». Archived from the original on 15 June 2020. Retrieved 24 September 2011.
  69. ^ «PyDatalog». Archived from the original on 13 June 2020. Retrieved 22 July 2012.
  70. ^ «Extending and Embedding the Python Interpreter: Reference Counts». Docs.python.org. Archived from the original on 18 October 2012. Retrieved 5 June 2020. Since Python makes heavy use of malloc() and free(), it needs a strategy to avoid memory leaks as well as the use of freed memory. The chosen method is called reference counting.
  71. ^ a b Hettinger, Raymond (30 January 2002). «PEP 289 – Generator Expressions». Python Enhancement Proposals. Python Software Foundation. Archived from the original on 14 June 2020. Retrieved 19 February 2012.
  72. ^ «6.5 itertools – Functions creating iterators for efficient looping». Docs.python.org. Archived from the original on 14 June 2020. Retrieved 22 November 2016.
  73. ^ a b Peters, Tim (19 August 2004). «PEP 20 – The Zen of Python». Python Enhancement Proposals. Python Software Foundation. Archived from the original on 26 December 2018. Retrieved 24 November 2008.
  74. ^ Martelli, Alex; Ravenscroft, Anna; Ascher, David (2005). Python Cookbook, 2nd Edition. O’Reilly Media. p. 230. ISBN 978-0-596-00797-3. Archived from the original on 23 February 2020. Retrieved 14 November 2015.
  75. ^ «Python Culture». ebeab. 21 January 2014. Archived from the original on 30 January 2014.
  76. ^ «Why is it called Python?». General Python FAQ. Docs.python.org. Archived from the original on 24 October 2012. Retrieved 3 January 2023.
  77. ^ «15 Ways Python Is a Powerful Force on the Web». Archived from the original on 11 May 2019. Retrieved 3 July 2018.
  78. ^ «pprint — Data pretty printer — Python 3.11.0 documentation». docs.python.org. Archived from the original on 22 January 2021. Retrieved 5 November 2022. stuff = [‘spam’, ‘eggs’, ‘lumberjack’, ‘knights’, ‘ni’]
  79. ^ Clark, Robert (26 April 2019). «How to be Pythonic and why you should care». Medium. Archived from the original on 13 August 2021. Retrieved 20 January 2021.
  80. ^ «Code Style — The Hitchhiker’s Guide to Python». docs.python-guide.org. Archived from the original on 27 January 2021. Retrieved 20 January 2021.
  81. ^ «Is Python a good language for beginning programmers?». General Python FAQ. Python Software Foundation. Archived from the original on 24 October 2012. Retrieved 21 March 2007.
  82. ^ «Myths about indentation in Python». Secnetix.de. Archived from the original on 18 February 2018. Retrieved 19 April 2011.
  83. ^ Guttag, John V. (12 August 2016). Introduction to Computation and Programming Using Python: With Application to Understanding Data. MIT Press. ISBN 978-0-262-52962-4.
  84. ^ «PEP 8 – Style Guide for Python Code». Python.org. Archived from the original on 17 April 2019. Retrieved 26 March 2019.
  85. ^ «8. Errors and Exceptions — Python 3.12.0a0 documentation». docs.python.org. Retrieved 9 May 2022.
  86. ^ «Highlights: Python 2.5». Python.org. Archived from the original on 4 August 2019. Retrieved 20 March 2018.
  87. ^ van Rossum, Guido (22 April 2009). «Tail Recursion Elimination». Neopythonic.blogspot.be. Archived from the original on 19 May 2018. Retrieved 3 December 2012.
  88. ^ van Rossum, Guido (9 February 2006). «Language Design Is Not Just Solving Puzzles». Artima forums. Artima. Archived from the original on 17 January 2020. Retrieved 21 March 2007.
  89. ^ van Rossum, Guido; Eby, Phillip J. (10 May 2005). «PEP 342 – Coroutines via Enhanced Generators». Python Enhancement Proposals. Python Software Foundation. Archived from the original on 29 May 2020. Retrieved 19 February 2012.
  90. ^ «PEP 380». Python.org. Archived from the original on 4 June 2020. Retrieved 3 December 2012.
  91. ^ «division». python.org. Archived from the original on 20 July 2006. Retrieved 30 July 2014.
  92. ^ «PEP 0465 – A dedicated infix operator for matrix multiplication». python.org. Archived from the original on 4 June 2020. Retrieved 1 January 2016.
  93. ^ «Python 3.5.1 Release and Changelog». python.org. Archived from the original on 14 May 2020. Retrieved 1 January 2016.
  94. ^ «What’s New in Python 3.8». Archived from the original on 8 June 2020. Retrieved 14 October 2019.
  95. ^ van Rossum, Guido; Hettinger, Raymond (7 February 2003). «PEP 308 – Conditional Expressions». Python Enhancement Proposals. Python Software Foundation. Archived from the original on 13 March 2016. Retrieved 13 July 2011.
  96. ^ «4. Built-in Types — Python 3.6.3rc1 documentation». python.org. Archived from the original on 14 June 2020. Retrieved 1 October 2017.
  97. ^ «5.3. Tuples and Sequences — Python 3.7.1rc2 documentation». python.org. Archived from the original on 10 June 2020. Retrieved 17 October 2018.
  98. ^ a b «PEP 498 – Literal String Interpolation». python.org. Archived from the original on 15 June 2020. Retrieved 8 March 2017.
  99. ^ «Why must ‘self’ be used explicitly in method definitions and calls?». Design and History FAQ. Python Software Foundation. Archived from the original on 24 October 2012. Retrieved 19 February 2012.
  100. ^ Sweigart, Al (2020). Beyond the Basic Stuff with Python: Best Practices for Writing Clean Code. No Starch Press. p. 322. ISBN 978-1-59327-966-0. Archived from the original on 13 August 2021. Retrieved 7 July 2021.
  101. ^ «The Python Language Reference, section 3.3. New-style and classic classes, for release 2.7.1». Archived from the original on 26 October 2012. Retrieved 12 January 2011.
  102. ^ «Type hinting for Python». LWN.net. 24 December 2014. Archived from the original on 20 June 2019. Retrieved 5 May 2015.
  103. ^ «mypy – Optional Static Typing for Python». Archived from the original on 6 June 2020. Retrieved 28 January 2017.
  104. ^ «15. Floating Point Arithmetic: Issues and Limitations — Python 3.8.3 documentation». docs.python.org. Archived from the original on 6 June 2020. Retrieved 6 June 2020. Almost all machines today (November 2000) use IEEE-754 floating point arithmetic, and almost all platforms map Python floats to IEEE-754 «double precision».
  105. ^ Zadka, Moshe; van Rossum, Guido (11 March 2001). «PEP 237 – Unifying Long Integers and Integers». Python Enhancement Proposals. Python Software Foundation. Archived from the original on 28 May 2020. Retrieved 24 September 2011.
  106. ^ «Built-in Types». Archived from the original on 14 June 2020. Retrieved 3 October 2019.
  107. ^ «PEP 465 – A dedicated infix operator for matrix multiplication». python.org. Archived from the original on 29 May 2020. Retrieved 3 July 2018.
  108. ^ a b Zadka, Moshe; van Rossum, Guido (11 March 2001). «PEP 238 – Changing the Division Operator». Python Enhancement Proposals. Python Software Foundation. Archived from the original on 28 May 2020. Retrieved 23 October 2013.
  109. ^ «Why Python’s Integer Division Floors». 24 August 2010. Archived from the original on 5 June 2020. Retrieved 25 August 2010.
  110. ^ «round», The Python standard library, release 3.2, §2: Built-in functions, archived from the original on 25 October 2012, retrieved 14 August 2011
  111. ^ «round», The Python standard library, release 2.7, §2: Built-in functions, archived from the original on 27 October 2012, retrieved 14 August 2011
  112. ^ Beazley, David M. (2009). Python Essential Reference (4th ed.). p. 66. ISBN 9780672329784.
  113. ^ Kernighan, Brian W.; Ritchie, Dennis M. (1988). The C Programming Language (2nd ed.). p. 206.
  114. ^ Batista, Facundo. «PEP 0327 – Decimal Data Type». Python.org. Archived from the original on 4 June 2020. Retrieved 26 September 2015.
  115. ^ «What’s New in Python 2.6 — Python v2.6.9 documentation». docs.python.org. Archived from the original on 23 December 2019. Retrieved 26 September 2015.
  116. ^ «10 Reasons Python Rocks for Research (And a Few Reasons it Doesn’t) – Hoyt Koepke». www.stat.washington.edu. Archived from the original on 31 May 2020. Retrieved 3 February 2019.
  117. ^ Shell, Scott (17 June 2014). «An introduction to Python for scientific computing» (PDF). Archived (PDF) from the original on 4 February 2019. Retrieved 3 February 2019.
  118. ^ Piotrowski, Przemyslaw (July 2006). «Build a Rapid Web Development Environment for Python Server Pages and Oracle». Oracle Technology Network. Oracle. Archived from the original on 2 April 2019. Retrieved 12 March 2012.
  119. ^ Batista, Facundo (17 October 2003). «PEP 327 – Decimal Data Type». Python Enhancement Proposals. Python Software Foundation. Archived from the original on 4 June 2020. Retrieved 24 November 2008.
  120. ^ Eby, Phillip J. (7 December 2003). «PEP 333 – Python Web Server Gateway Interface v1.0». Python Enhancement Proposals. Python Software Foundation. Archived from the original on 14 June 2020. Retrieved 19 February 2012.
  121. ^ «Modulecounts». Modulecounts. 14 November 2022. Archived from the original on 26 June 2022.
  122. ^ Enthought, Canopy. «Canopy». www.enthought.com. Archived from the original on 15 July 2017. Retrieved 20 August 2016.
  123. ^ «PEP 7 – Style Guide for C Code | peps.python.org». peps.python.org. Retrieved 28 April 2022.
  124. ^ «Mailman 3 Why aren’t we allowing the use of C11? — Python-Dev — python.org». mail.python.org. Archived from the original on 14 April 2021. Retrieved 1 March 2021.
  125. ^ «Issue 35473: Intel compiler (icc) does not fully support C11 Features, including atomics – Python tracker». bugs.python.org. Archived from the original on 14 April 2021. Retrieved 1 March 2021.
  126. ^ «4. Building C and C++ Extensions — Python 3.9.2 documentation». docs.python.org. Archived from the original on 3 March 2021. Retrieved 1 March 2021.
  127. ^ van Rossum, Guido (5 June 2001). «PEP 7 – Style Guide for C Code». Python Enhancement Proposals. Python Software Foundation. Archived from the original on 1 June 2020. Retrieved 24 November 2008.
  128. ^ «CPython byte code». Docs.python.org. Archived from the original on 5 June 2020. Retrieved 16 February 2016.
  129. ^ «Python 2.5 internals» (PDF). Archived (PDF) from the original on 6 August 2012. Retrieved 19 April 2011.
  130. ^ «Changelog — Python 3.9.0 documentation». docs.python.org. Archived from the original on 7 February 2021. Retrieved 8 February 2021.
  131. ^ «Download Python». Python.org. Archived from the original on 8 December 2020. Retrieved 13 December 2020.
  132. ^ «history [vmspython]». www.vmspython.org. Archived from the original on 2 December 2020. Retrieved 4 December 2020.
  133. ^ «An Interview with Guido van Rossum». Oreilly.com. Archived from the original on 16 July 2014. Retrieved 24 November 2008.
  134. ^ «Download Python for Other Platforms». Python.org. Archived from the original on 27 November 2020. Retrieved 4 December 2020.
  135. ^ «PyPy compatibility». Pypy.org. Archived from the original on 6 June 2020. Retrieved 3 December 2012.
  136. ^ Team, The PyPy (28 December 2019). «Download and Install». PyPy. Retrieved 8 January 2022.
  137. ^ «speed comparison between CPython and Pypy». Speed.pypy.org. Archived from the original on 10 May 2021. Retrieved 3 December 2012.
  138. ^ «Application-level Stackless features — PyPy 2.0.2 documentation». Doc.pypy.org. Archived from the original on 4 June 2020. Retrieved 17 July 2013.
  139. ^ «Python-for-EV3». LEGO Education. Archived from the original on 7 June 2020. Retrieved 17 April 2019.
  140. ^ Yegulalp, Serdar (29 October 2020). «Pyston returns from the dead to speed Python». InfoWorld. Archived from the original on 27 January 2021. Retrieved 26 January 2021.
  141. ^ «cinder: Instagram’s performance-oriented fork of CPython». GitHub. Archived from the original on 4 May 2021. Retrieved 4 May 2021.
  142. ^ «Plans for optimizing Python». Google Project Hosting. 15 December 2009. Archived from the original on 11 April 2016. Retrieved 24 September 2011.
  143. ^ «Python on the Nokia N900». Stochastic Geometry. 29 April 2010. Archived from the original on 20 June 2019. Retrieved 9 July 2015.
  144. ^ «Brython». brython.info. Archived from the original on 3 August 2018. Retrieved 21 January 2021.
  145. ^ «Transcrypt – Python in the browser». transcrypt.org. Archived from the original on 19 August 2018. Retrieved 22 December 2020.
  146. ^ «Transcrypt: Anatomy of a Python to JavaScript Compiler». InfoQ. Archived from the original on 5 December 2020. Retrieved 20 January 2021.
  147. ^ «Nuitka Home | Nuitka Home». nuitka.net. Archived from the original on 30 May 2020. Retrieved 18 August 2017.
  148. ^ Borderies, Olivier (24 January 2019). «Pythran: Python at C++ speed !». Medium. Archived from the original on 25 March 2020. Retrieved 25 March 2020.
  149. ^ «Pythran — Pythran 0.9.5 documentation». pythran.readthedocs.io. Archived from the original on 19 February 2020. Retrieved 25 March 2020.
  150. ^ Guelton, Serge; Brunet, Pierrick; Amini, Mehdi; Merlini, Adrien; Corbillon, Xavier; Raynaud, Alan (16 March 2015). «Pythran: enabling static optimization of scientific Python programs». Computational Science & Discovery. IOP Publishing. 8 (1): 014001. Bibcode:2015CS&D….8a4001G. doi:10.1088/1749-4680/8/1/014001. ISSN 1749-4699.
  151. ^ The Python → 11l → C++ transpiler
  152. ^ «google/grumpy». 10 April 2020. Archived from the original on 15 April 2020. Retrieved 25 March 2020 – via GitHub.
  153. ^ «Projects». opensource.google. Archived from the original on 24 April 2020. Retrieved 25 March 2020.
  154. ^ Francisco, Thomas Claburn in San. «Google’s Grumpy code makes Python Go». www.theregister.com. Archived from the original on 7 March 2021. Retrieved 20 January 2021.
  155. ^ «GitHub – IronLanguages/ironpython3: Implementation of Python 3.x for .NET Framework that is built on top of the Dynamic Language Runtime». GitHub. Archived from the original on 28 September 2021.
  156. ^ «IronPython.net /». ironpython.net. Archived from the original on 17 April 2021.
  157. ^ «Jython FAQ». www.jython.org. Archived from the original on 22 April 2021. Retrieved 22 April 2021.
  158. ^ Murri, Riccardo (2013). Performance of Python runtimes on a non-numeric scientific code. European Conference on Python in Science (EuroSciPy). arXiv:1404.6388. Bibcode:2014arXiv1404.6388M.
  159. ^ «The Computer Language Benchmarks Game». Archived from the original on 14 June 2020. Retrieved 30 April 2020.
  160. ^ a b Warsaw, Barry; Hylton, Jeremy; Goodger, David (13 June 2000). «PEP 1 – PEP Purpose and Guidelines». Python Enhancement Proposals. Python Software Foundation. Archived from the original on 6 June 2020. Retrieved 19 April 2011.
  161. ^ «PEP 8 – Style Guide for Python Code». Python.org. Archived from the original on 17 April 2019. Retrieved 26 March 2019.
  162. ^ Cannon, Brett. «Guido, Some Guys, and a Mailing List: How Python is Developed». python.org. Python Software Foundation. Archived from the original on 1 June 2009. Retrieved 27 June 2009.
  163. ^ «Moving Python’s bugs to GitHub [LWN.net]».
  164. ^ «Python Developer’s Guide — Python Developer’s Guide». devguide.python.org. Archived from the original on 9 November 2020. Retrieved 17 December 2019.
  165. ^ Hughes, Owen (24 May 2021). «Programming languages: Why Python 4.0 might never arrive, according to its creator». TechRepublic. Retrieved 16 May 2022.
  166. ^ «PEP 602 – Annual Release Cycle for Python». Python.org. Archived from the original on 14 June 2020. Retrieved 6 November 2019.
  167. ^ «Changing the Python release cadence [LWN.net]». lwn.net. Archived from the original on 6 November 2019. Retrieved 6 November 2019.
  168. ^ Norwitz, Neal (8 April 2002). «[Python-Dev] Release Schedules (was Stability & change)». Archived from the original on 15 December 2018. Retrieved 27 June 2009.
  169. ^ a b Aahz; Baxter, Anthony (15 March 2001). «PEP 6 – Bug Fix Releases». Python Enhancement Proposals. Python Software Foundation. Archived from the original on 5 June 2020. Retrieved 27 June 2009.
  170. ^ «Python Buildbot». Python Developer’s Guide. Python Software Foundation. Archived from the original on 5 June 2020. Retrieved 24 September 2011.
  171. ^ «1. Extending Python with C or C++ — Python 3.9.1 documentation». docs.python.org. Archived from the original on 23 June 2020. Retrieved 14 February 2021.
  172. ^ «PEP 623 – Remove wstr from Unicode». Python.org. Archived from the original on 5 March 2021. Retrieved 14 February 2021.
  173. ^ «PEP 634 – Structural Pattern Matching: Specification». Python.org. Archived from the original on 6 May 2021. Retrieved 14 February 2021.
  174. ^ «Documentation Tools». Python.org. Archived from the original on 11 November 2020. Retrieved 22 March 2021.
  175. ^ a b «Whetting Your Appetite». The Python Tutorial. Python Software Foundation. Archived from the original on 26 October 2012. Retrieved 20 February 2012.
  176. ^ «In Python, should I use else after a return in an if block?». Stack Overflow. Stack Exchange. 17 February 2011. Archived from the original on 20 June 2019. Retrieved 6 May 2011.
  177. ^ Lutz, Mark (2009). Learning Python: Powerful Object-Oriented Programming. O’Reilly Media, Inc. p. 17. ISBN 9781449379322. Archived from the original on 17 July 2017. Retrieved 9 May 2017.
  178. ^ Fehily, Chris (2002). Python. Peachpit Press. p. xv. ISBN 9780201748840. Archived from the original on 17 July 2017. Retrieved 9 May 2017.
  179. ^ Blake, Troy (18 January 2021). «TIOBE Index for January 2021». Technology News and Information by SeniorDBA. Archived from the original on 21 March 2021. Retrieved 26 February 2021.
  180. ^ Prechelt, Lutz (14 March 2000). «An empirical comparison of C, C++, Java, Perl, Python, Rexx, and Tcl» (PDF). Archived (PDF) from the original on 3 January 2020. Retrieved 30 August 2013.
  181. ^ «Quotes about Python». Python Software Foundation. Archived from the original on 3 June 2020. Retrieved 8 January 2012.
  182. ^ «Organizations Using Python». Python Software Foundation. Archived from the original on 21 August 2018. Retrieved 15 January 2009.
  183. ^ «Python : the holy grail of programming». CERN Bulletin. CERN Publications (31/2006). 31 July 2006. Archived from the original on 15 January 2013. Retrieved 11 February 2012.
  184. ^ Shafer, Daniel G. (17 January 2003). «Python Streamlines Space Shuttle Mission Design». Python Software Foundation. Archived from the original on 5 June 2020. Retrieved 24 November 2008.
  185. ^ «Tornado: Facebook’s Real-Time Web Framework for Python – Facebook for Developers». Facebook for Developers. Archived from the original on 19 February 2019. Retrieved 19 June 2018.
  186. ^ «What Powers Instagram: Hundreds of Instances, Dozens of Technologies». Instagram Engineering. 11 December 2016. Archived from the original on 15 June 2020. Retrieved 27 May 2019.
  187. ^ «How we use Python at Spotify». Spotify Labs. 20 March 2013. Archived from the original on 10 June 2020. Retrieved 25 July 2018.
  188. ^ Fortenberry, Tim (17 January 2003). «Industrial Light & Magic Runs on Python». Python Software Foundation. Archived from the original on 6 June 2020. Retrieved 11 February 2012.
  189. ^ Taft, Darryl K. (5 March 2007). «Python Slithers into Systems». eWeek.com. Ziff Davis Holdings. Archived from the original on 13 August 2021. Retrieved 24 September 2011.
  190. ^ GitHub – reddit-archive/reddit: historical code from reddit.com., The Reddit Archives, archived from the original on 1 June 2020, retrieved 20 March 2019
  191. ^ «Usage statistics and market share of Python for websites». 2012. Archived from the original on 13 August 2021. Retrieved 18 December 2012.
  192. ^ Oliphant, Travis (2007). «Python for Scientific Computing». Computing in Science and Engineering. 9 (3): 10–20. Bibcode:2007CSE…..9c..10O. CiteSeerX 10.1.1.474.6460. doi:10.1109/MCSE.2007.58. S2CID 206457124. Archived from the original on 15 June 2020. Retrieved 10 April 2015.
  193. ^ Millman, K. Jarrod; Aivazis, Michael (2011). «Python for Scientists and Engineers». Computing in Science and Engineering. 13 (2): 9–12. Bibcode:2011CSE….13b…9M. doi:10.1109/MCSE.2011.36. Archived from the original on 19 February 2019. Retrieved 7 July 2014.
  194. ^ Science education with SageMath, Innovative Computing in Science Education, archived from the original on 15 June 2020, retrieved 22 April 2019
  195. ^ «OpenCV: OpenCV-Python Tutorials». docs.opencv.org. Archived from the original on 23 September 2020. Retrieved 14 September 2020.
  196. ^ Dean, Jeff; Monga, Rajat; et al. (9 November 2015). «TensorFlow: Large-scale machine learning on heterogeneous systems» (PDF). TensorFlow.org. Google Research. Archived (PDF) from the original on 20 November 2015. Retrieved 10 November 2015.
  197. ^ Piatetsky, Gregory. «Python eats away at R: Top Software for Analytics, Data Science, Machine Learning in 2018: Trends and Analysis». KDnuggets. KDnuggets. Archived from the original on 15 November 2019. Retrieved 30 May 2018.
  198. ^ «Who is using scikit-learn? — scikit-learn 0.20.1 documentation». scikit-learn.org. Archived from the original on 6 May 2020. Retrieved 30 November 2018.
  199. ^ Jouppi, Norm. «Google supercharges machine learning tasks with TPU custom chip». Google Cloud Platform Blog. Archived from the original on 18 May 2016. Retrieved 19 May 2016.
  200. ^ «Natural Language Toolkit — NLTK 3.5b1 documentation». www.nltk.org. Archived from the original on 13 June 2020. Retrieved 10 April 2020.
  201. ^ «Installers for GIMP for Windows – Frequently Asked Questions». 26 July 2013. Archived from the original on 17 July 2013. Retrieved 26 July 2013.
  202. ^ «jasc psp9components». Archived from the original on 19 March 2008.
  203. ^ «About getting started with writing geoprocessing scripts». ArcGIS Desktop Help 9.2. Environmental Systems Research Institute. 17 November 2006. Archived from the original on 5 June 2020. Retrieved 11 February 2012.
  204. ^ CCP porkbelly (24 August 2010). «Stackless Python 2.7». EVE Community Dev Blogs. CCP Games. Archived from the original on 11 January 2014. Retrieved 11 January 2014. As you may know, EVE has at its core the programming language known as Stackless Python.
  205. ^ Caudill, Barry (20 September 2005). «Modding Sid Meier’s Civilization IV». Sid Meier’s Civilization IV Developer Blog. Firaxis Games. Archived from the original on 2 December 2010. we created three levels of tools … The next level offers Python and XML support, letting modders with more experience manipulate the game world and everything in it.
  206. ^ «Python Language Guide (v1.0)». Google Documents List Data API v1.0. Archived from the original on 15 July 2010.
  207. ^ «Python Setup and Usage». Python Software Foundation. Archived from the original on 17 June 2020. Retrieved 10 January 2020.
  208. ^ «Immunity: Knowing You’re Secure». Archived from the original on 16 February 2009.
  209. ^ «Core Security». Core Security. Archived from the original on 9 June 2020. Retrieved 10 April 2020.
  210. ^ «What is Sugar?». Sugar Labs. Archived from the original on 9 January 2009. Retrieved 11 February 2012.
  211. ^ «4.0 New Features and Fixes». LibreOffice.org. The Document Foundation. 2013. Archived from the original on 9 February 2014. Retrieved 25 February 2013.
  212. ^ «Gotchas for Python Users». boo.codehaus.org. Codehaus Foundation. Archived from the original on 11 December 2008. Retrieved 24 November 2008.
  213. ^ Esterbrook, Charles. «Acknowledgements». cobra-language.com. Cobra Language. Archived from the original on 8 February 2008. Retrieved 7 April 2010.
  214. ^ «Proposals: iterators and generators [ES4 Wiki]». wiki.ecmascript.org. Archived from the original on 20 October 2007. Retrieved 24 November 2008.
  215. ^ «Frequently asked questions». Godot Engine documentation. Archived from the original on 28 April 2021. Retrieved 10 May 2021.
  216. ^ Kincaid, Jason (10 November 2009). «Google’s Go: A New Programming Language That’s Python Meets C++». TechCrunch. Archived from the original on 18 January 2010. Retrieved 29 January 2010.
  217. ^ Strachan, James (29 August 2003). «Groovy – the birth of a new dynamic language for the Java platform». Archived from the original on 5 April 2007. Retrieved 11 June 2007.
  218. ^ Yegulalp, Serdar (16 January 2017). «Nim language draws from best of Python, Rust, Go, and Lisp». InfoWorld. Archived from the original on 13 October 2018. Retrieved 7 June 2020. Nim’s syntax is strongly reminiscent of Python’s, as it uses indented code blocks and some of the same syntax (such as the way if/elif/then/else blocks are constructed).
  219. ^ «An Interview with the Creator of Ruby». Linuxdevcenter.com. Archived from the original on 28 April 2018. Retrieved 3 December 2012.
  220. ^ Lattner, Chris (3 June 2014). «Chris Lattner’s Homepage». Chris Lattner. Archived from the original on 22 December 2015. Retrieved 3 June 2014. I started work on the Swift Programming Language in July of 2010. I implemented much of the basic language structure, with only a few people knowing of its existence. A few other (amazing) people started contributing in earnest late in 2011, and it became a major focus for the Apple Developer Tools group in July 2013 […] drawing ideas from Objective-C, Rust, Haskell, Ruby, Python, C#, CLU, and far too many others to list.
  221. ^ Kupries, Andreas; Fellows, Donal K. (14 September 2000). «TIP #3: TIP Format». tcl.tk. Tcl Developer Xchange. Archived from the original on 13 July 2017. Retrieved 24 November 2008.
  222. ^ Gustafsson, Per; Niskanen, Raimo (29 January 2007). «EEP 1: EEP Purpose and Guidelines». erlang.org. Archived from the original on 15 June 2020. Retrieved 19 April 2011.
  223. ^ «Swift Evolution Process». Swift Programming Language Evolution repository on GitHub. 18 February 2020. Archived from the original on 27 April 2020. Retrieved 27 April 2020.

Sources

  • «Python for Artificial Intelligence». Wiki.python.org. 19 July 2012. Archived from the original on 1 November 2012. Retrieved 3 December 2012.
  • Paine, Jocelyn, ed. (August 2005). «AI in Python». AI Expert Newsletter. Amzi!. Archived from the original on 26 March 2012. Retrieved 11 February 2012.
  • «PyAIML 0.8.5 : Python Package Index». Pypi.python.org. Retrieved 17 July 2013.
  • Russell, Stuart J. & Norvig, Peter (2009). Artificial Intelligence: A Modern Approach (3rd ed.). Upper Saddle River, NJ: Prentice Hall. ISBN 978-0-13-604259-4.

Further reading

  • Downey, Allen B. (May 2012). Think Python: How to Think Like a Computer Scientist (version 1.6.6 ed.). ISBN 978-0-521-72596-5.
  • Hamilton, Naomi (5 August 2008). «The A-Z of Programming Languages: Python». Computerworld. Archived from the original on 29 December 2008. Retrieved 31 March 2010.
  • Lutz, Mark (2013). Learning Python (5th ed.). O’Reilly Media. ISBN 978-0-596-15806-4.
  • Summerfield, Mark (2009). Programming in Python 3 (2nd ed.). Addison-Wesley Professional. ISBN 978-0-321-68056-3.
  • Ramalho, Luciano (May 2022). Fluent Python (2nd ed.). O’Reilly Media. ISBN 978-1-4920-5632-4.

External links

  • Official website Edit this at Wikidata

Время на прочтение
9 мин

Количество просмотров 1.2M

Python Logo

На сайте Poromenos’ Stuff была
опубликована статья, в которой, в сжатой форме,
рассказывают об основах языка Python. Я предлагаю вам перевод этой статьи. Перевод не дословный. Я постарался подробнее объяснить некоторые моменты, которые могут быть непонятны.

Если вы собрались изучать язык Python, но не можете найти подходящего руководства, то эта
статья вам очень пригодится! За короткое время, вы сможете познакомиться с
основами языка Python. Хотя эта статья часто опирается
на то, что вы уже имеете опыт программирования, но, я надеюсь, даже новичкам
этот материал будет полезен. Внимательно прочитайте каждый параграф. В связи с
сжатостью материала, некоторые темы рассмотрены поверхностно, но содержат весь
необходимый метриал.

Основные свойства

Python не требует явного объявления переменных, является регистро-зависим (переменная var не эквивалентна переменной Var или VAR — это три разные переменные) объектно-ориентированным языком.

Синтаксис

Во первых стоит отметить интересную особенность Python. Он не содержит операторных скобок (begin..end в pascal или {..}в Си), вместо этого блоки выделяются отступами: пробелами или табуляцией, а вход в блок из операторов осуществляется двоеточием. Однострочные комментарии начинаются со знака фунта «#», многострочные — начинаются и заканчиваются тремя двойными кавычками «»»»».
Чтобы присвоить значение пременной используется знак «=», а для сравнения —
«==». Для увеличения значения переменной, или добавления к строке используется оператор «+=», а для уменьшения — «-=». Все эти операции могут взаимодействовать с большинством типов, в том числе со строками. Например

>>> myvar = 3
>>> myvar += 2
>>> myvar -= 1
«»«Это многострочный комментарий
Строки заключенные в три двойные кавычки игнорируются»»»

>>> mystring = «Hello»
>>> mystring += » world.»
>>> print mystring
Hello world.
# Следующая строка меняет
значения переменных местами. (Всего одна строка!)

>>> myvar, mystring = mystring, myvar

Структуры данных

Python содержит такие структуры данных как списки (lists), кортежи (tuples) и словари (dictionaries). Списки — похожи на одномерные массивы (но вы можете использовать Список включающий списки — многомерный массив), кортежи — неизменяемые списки, словари — тоже списки, но индексы могут быть любого типа, а не только числовыми. «Массивы» в Python могут содержать данные любого типа, то есть в одном массиве может могут находиться числовые, строковые и другие типы данных. Массивы начинаются с индекса 0, а последний элемент можно получить по индексу -1 Вы можете присваивать переменным функции и использовать их соответственно.

>>> sample = [1, [«another», «list»], («a», «tuple»)] #Список состоит из целого числа, другого списка и кортежа
>>> mylist = [«List item 1», 2, 3.14] #Этот список содержит строку, целое и дробное число
>>> mylist[0] = «List item 1 again» #Изменяем первый (нулевой) элемент листа mylist
>>> mylist[-1] = 3.14 #Изменяем последний элемент листа
>>> mydict = {«Key 1»: «Value 1», 2: 3, «pi»: 3.14} #Создаем словарь, с числовыми и целочисленным индексами
>>> mydict[«pi»] = 3.15 #Изменяем элемент словаря под индексом «pi».
>>> mytuple = (1, 2, 3) #Задаем кортеж
>>> myfunction = len #Python позволяет таким образом объявлять синонимы функции
>>> print myfunction(list)
3

Вы можете использовать часть массива, задавая первый и последний индекс через двоеточие «:». В таком случае вы получите часть массива, от первого индекса до второго не включительно. Если не указан первый элемент, то отсчет начинается с начала массива, а если не указан последний — то масив считывается до последнего элемента. Отрицательные значения определяют положение элемента с конца. Например:

>>> mylist = [«List item 1», 2, 3.14]
>>> print mylist[:] #Считываются все элементы массива
[‘List item 1’, 2, 3.1400000000000001]
>>> print mylist[0:2] #Считываются нулевой и первый элемент массива.
[‘List item 1’, 2]
>>> print mylist[-3:-1] #Считываются элементы от нулевого (-3) до второго (-1) (не включительно)
[‘List item 1’, 2]
>>> print mylist[1:] #Считываются элементы от первого, до последнего
[2, 3.14]

Строки

Строки в Python обособляются кавычками двойными «»» или одинарными «’». Внутри двойных ковычек могут присутствовать одинарные или наоборот. К примеру строка «Он сказал ‘привет’!» будет выведена на экран как «Он сказал ‘привет’!». Если нужно использовать строку из несколько строчек, то эту строку надо начинать и заканчивать тремя двойными кавычками «»»»». Вы можете подставить в шаблон строки элементы из кортежа или словаря. Знак процента «%» между строкой и кортежем, заменяет в строке символы «%s» на элемент кортежа. Словари позволяют вставлять в строку элемент под заданным индексом. Для этого надо использовать в строке конструкцию «%(индекс)s». В этом случае вместо «%(индекс)s» будет подставлено значение словаря под заданным индексом.

>>>print «Name: %snNumber: %snString: %s» % (myclass.name, 3, 3 * «-«)
Name: Poromenos
Number: 3
String: —  
strString = «»«Этот текст расположен
на нескольких строках»»»

 
>>>

print «This %(verb)s a %(noun)s.» % {«noun»: «test», «verb»: «is»}
This is a test.

Операторы

Операторы while, if, for составляют операторы перемещения. Здесь нет аналога оператора select, так что придется обходиться if. В операторе for происходит сравнение переменной и списка. Чтобы получить список цифр до числа <number> — используйте функцию range(<number>). Вот пример использования операторов

rangelist = range(10) #Получаем список из десяти цифр (от 0 до 9)
>>> print rangelist
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
for number in rangelist: #Пока переменная number (которая каждый раз увеличивается на единицу) входит в список…
# Проверяем входит ли переменная
# numbers в кортеж чисел (3, 4, 7, 9)
if number in (3, 4, 7, 9): #Если переменная number входит в кортеж (3, 4, 7, 9)…
# Операция «break» обеспечивает
# выход из цикла в любой момент
break
else:
# «continue» осуществляет «прокрутку»
# цикла. Здесь это не требуется, так как после этой операции
# в любом случае программа переходит опять к обработке цикла
continue
else:
# «else» указывать необязательно. Условие выполняется
# если цикл не был прерван при помощи «break».
pass # Ничего не делатьif rangelist[1] == 2:
print «The second item (lists are 0-based) is 2»
elif rangelist[1] == 3:
print «The second item (lists are 0-based) is 3»
else:
print «Dunno»while rangelist[1] == 1:
pass

Функции

Для объявления функции служит ключевое слово «def». Аргументы функции задаются в скобках после названия функции. Можно задавать необязательные аргументы, присваивая им значение по умолчанию. Функции могут возвращать кортежи, в таком случае надо писать возвращаемые значения через запятую. Ключевое слово «lambda» служит для объявления элементарных функций .

# arg2 и arg3 — необязательые аргументы, принимают значение объявленное по умолчни,
# если не задать им другое значение при вызове функци.
def myfunction(arg1, arg2 = 100, arg3 = «test»):
return arg3, arg2, arg1
#Функция вызывается со значением первого аргумента — «Argument 1», второго — по умолчанию, и третьего — «Named argument».
>>>ret1, ret2, ret3 = myfunction(«Argument 1», arg3 = «Named argument»)
# ret1, ret2 и ret3 принимают значения «Named argument», 100, «Argument 1» соответственно
>>> print ret1, ret2, ret3
Named argument 100 Argument 1# Следующая запись эквивалентна def f(x): return x + 1
functionvar = lambda x: x + 1
>>> print functionvar(1)
2

Классы

Язык Python ограничен в множественном наследовании в классах. Внутренние переменные и внутренние методы классов начинаются с двух знаков нижнего подчеркивания «__» (например «__myprivatevar»). Мы можем также присвоить значение переменной класса извне. Пример:

class Myclass:
common = 10
def __init__(self):
self.myvariable = 3
def myfunction(self, arg1, arg2):
return self.myvariable# Здесь мы объявили класс Myclass. Функция __init__ вызывается автоматически при инициализации классов.
>>> classinstance = Myclass() # Мы инициализировали класс и переменная myvariable приобрела значение 3 как заявлено в методе инициализации
>>> classinstance.myfunction(1, 2) #Метод myfunction класса Myclass возвращает значение переменной myvariable
3
# Переменная common объявлена во всех классах
>>> classinstance2 = Myclass()
>>> classinstance.common
10
>>> classinstance2.common
10
# Поэтому, если мы изменим ее значение в классе Myclass изменятся
# и ее значения в объектах, инициализированных классом Myclass
>>> Myclass.common = 30
>>> classinstance.common
30
>>> classinstance2.common
30
# А здесь мы не изменяем переменную класса. Вместо этого
# мы объявляем оную в объекте и присваиваем ей новое значение
>>> classinstance.common = 10
>>> classinstance.common
10
>>> classinstance2.common
30
>>> Myclass.common = 50
# Теперь изменение переменной класса не коснется
# переменных объектов этого класса
>>> classinstance.common
10
>>> classinstance2.common
50# Следующий класс является наследником класса Myclass
# наследуя его свойства и методы, ктому же класс может
# наследоваться из нескольких классов, в этом случае запись
# такая: class Otherclass(Myclass1, Myclass2, MyclassN)
class Otherclass(Myclass):
def __init__(self, arg1):
self.myvariable = 3
print arg1

 
>>> classinstance = Otherclass(

«hello»)
hello
>>> classinstance.myfunction(1, 2)
3
# Этот класс не имеет совйтсва test, но мы можем
# объявить такую переменную для объекта. Причем
# tэта переменная будет членом только classinstance.
>>> classinstance.test = 10
>>> classinstance.test
10

Исключения

Исключения в Python имеют структуру tryexcept [exceptionname]:

def somefunction():
try:
# Деление на ноль вызывает ошибку
10 / 0
except ZeroDivisionError:
# Но программа не «Выполняет недопустимую операцию»
# А обрабатывает блок исключения соответствующий ошибке «ZeroDivisionError»
print «Oops, invalid.»

 
>>> fnexcept()
Oops, invalid.

Импорт

Внешние библиотеки можно подключить процедурой «import [libname]», где [libname] — название подключаемой библиотеки. Вы так же можете использовать команду «from [libname] import [funcname]», чтобы вы могли использовать функцию [funcname] из библиотеки [libname]

import random #Импортируем библиотеку «random»
from time import clock #И заодно функцию «clock» из библиотеки «time»

 
randomint =

random.randint(1, 100)
>>> print randomint
64

Работа с файловой системой

Python имеет много встроенных библиотек. В этом примере мы попробуем сохранить в бинарном файле структуру списка, прочитать ее и сохраним строку в текстовом файле. Для преобразования структуры данных мы будем использовать стандартную библиотеку «pickle»

import pickle
mylist = [«This», «is», 4, 13327]
# Откроем файл C:binary.dat для записи. Символ «r»
# предотвращает замену специальных сиволов (таких как n, t, b и др.).
myfile = file(r«C:binary.dat», «w»)
pickle.dump(mylist, myfile)
myfile.close()

 
myfile =

file(r«C:text.txt», «w»)
myfile.write(«This is a sample string»)
myfile.close()

 
myfile =

file(r«C:text.txt»)
>>> print myfile.read()
‘This is a sample string’
myfile.close()# Открываем файл для чтения
myfile = file(r«C:binary.dat»)
loadedlist = pickle.load(myfile)
myfile.close()
>>> print loadedlist
[‘This’, ‘is’, 4, 13327]

Особенности

  • Условия могут комбинироваться. 1 < a < 3 выполняется тогда, когда а больше 1, но меньше 3.
  • Используйте операцию «del» чтобы очищать переменные или элементы массива.
  • Python предлагает большие возможности для работы со списками. Вы можете использовать операторы объявлении структуры списка. Оператор for позволяет задавать элементы списка в определенной последовательности, а if — позволяет выбирать элементы по условию.

>>> lst1 = [1, 2, 3]
>>> lst2 = [3, 4, 5]
>>> print [x * y for x in lst1 for y in lst2]
[3, 4, 5, 6, 8, 10, 9, 12, 15]
>>> print [x for x in lst1 if 4 > x > 1]
[2, 3]
# Оператор «any» возвращает true, если хотя
# бы одно из условий, входящих в него, выполняется.
>>> any(i % 3 for i in [3, 3, 4, 4, 3])
True
# Следующая процедура подсчитывает количество
# подходящих элементов в списке
>>> sum(1 for i in [3, 3, 4, 4, 3] if i == 3)
3
>>> del lst1[0]
>>> print lst1
[2, 3]
>>> del lst1

  • Глобальные переменные объявляются вне функций и могут быть прочитанны без каких либо объявлений. Но если вам необходимо изменить значение глобальной переменной из функции, то вам необходимо объявить ее в начале функции ключевым словом «global», если вы этого не сделаете, то Python объявит переменную, доступную только для этой функции.

number = 5def myfunc():
# Выводит 5
print numberdef anotherfunc():
# Это вызывает исключение, поскольку глобальная апеременная
# не была вызванна из функции. Python в этом случае создает
# одноименную переменную внутри этой функции и доступную
# только для операторов этой функции.
print number
number = 3def yetanotherfunc():
global number
# И только из этой функции значение переменной изменяется.
number = 3

Эпилог

Разумеется в этой статье не описываются все возможности Python. Я надеюсь что эта статья поможет вам, если вы захотите и в дальнейшем изучать этот язык программирования.

Преимущества Python

  • Скорость выполнения программ написанных на Python очень высока. Это связанно с тем, что основные библиотеки Python
    написаны на C++ и выполнение задач занимает меньше времени, чем на других языках высокого уровня.
  • В связи с этим вы можете писать свои собственные модули для Python на C или C++
  • В стандартныx библиотеках Python вы можете найти средства для работы с электронной почтой, протоколами
    Интернета, FTP, HTTP, базами данных, и пр.
  • Скрипты, написанные при помощи Python выполняются на большинстве современных ОС. Такая переносимость обеспечивает Python применение в самых различных областях.
  • Python подходит для любых решений в области программирования, будь то офисные программы, вэб-приложения, GUI-приложения и т.д.
  • Над разработкой Python трудились тысячи энтузиастов со всего мира. Поддержкой современных технологий в стандартных библиотеках мы можем быть обязаны именно тому, что Python был открыт для всех желающих.
Python

Python logo.svg
Класс языка:

мультипарадигмальный:
объектно-ориентированный,
кроссплатформенный,
рефлективный,
императивный,
функциональный,
аспектно-ориентированный

Тип исполнения:

интерпретируемый, компилируемый в MSIL, компилируемый в байт-код Java

Появился в:

1990

Автор(ы):

Гвидо ван Россум

Расширение файлов:

.py, .pyw, .pyc, .pyo, .pyd[1]

Релиз:

2.7.3, 3.3.0 (10 апреля 2012[2], 29 сентября 2012[3])

Типизация данных:

строгая, динамическая

Основные реализации:

CPython, Jython, IronPython, PyPy, Stackless

Испытал влияние:

ABC, Modula-3, Lisp, Tcl Smalltalk, C, Java, Icon

Повлиял на:

Ruby, Boo, Groovy, ECMAScript, CoffeeScript

Лицензия

PSFL

Сайт:

www.python.org

Логотип Python (1990—2005)

Python (англ. python — питон, произносится [ˈpaɪθ⟨ə⟩n]па́йтон; в русском языке распространено название пито́н[4])[5] — высокоуровневый язык программирования общего назначения, ориентированный на повышение производительности разработчика и читаемости кода. Синтаксис ядра Python минималистичен. В то же время стандартная библиотека включает большой объём полезных функций.

Python поддерживает несколько парадигм программирования, в том числе структурное, объектно-ориентированное, функциональное, императивное и аспектно-ориентированное. Основные архитектурные черты — динамическая типизация, автоматическое управление памятью, полная интроспекция, механизм обработки исключений, поддержка многопоточных вычислений и удобные высокоуровневые структуры данных. Код в Питоне организовывается в функции и классы, которые могут объединяться в модули (которые в свою очередь могут быть объединены в пакеты).

Эталонной реализацией Python является интерпретатор CPython, поддерживающий большинство активно используемых платформ[6]. Он распространяется под свободной лицензией Python Software Foundation License, позволяющей использовать его без ограничений в любых приложениях, включая проприетарные[7]. Есть реализации интерпретаторов для JVM (с возможностью компиляции), MSIL (с возможностью компиляции), LLVM и других. Проект PyPy предлагает реализацию Питона на самом Питоне, что уменьшает затраты на изменения языка и постановку экспериментов над новыми возможностями.

Python — активно развивающийся язык программирования, новые версии (с добавлением/изменением языковых свойств) выходят примерно раз в два с половиной года. Вследствие этого и некоторых других причин на Python отсутствуют ANSI, ISO или другие официальные стандарты, их роль выполняет CPython.

Содержание

  • 1 Философия
  • 2 История
    • 2.1 Влияние других языков на Python
  • 3 Портируемость
  • 4 Типы и структуры данных
  • 5 Синтаксис и семантика
    • 5.1 Операторы
    • 5.2 Выражения
    • 5.3 Имена
    • 5.4 Строки документации
    • 5.5 Директивы
  • 6 Возможности
    • 6.1 Интерактивный режим
    • 6.2 Объектно-ориентированное программирование
    • 6.3 Функциональное программирование
    • 6.4 Модули и пакеты
    • 6.5 Интроспекция
    • 6.6 Обработка исключений
    • 6.7 Итераторы
    • 6.8 Генераторы
    • 6.9 Управление контекстом выполнения
    • 6.10 Декораторы
    • 6.11 Другие возможности
  • 7 Библиотеки
    • 7.1 Стандартная библиотека
    • 7.2 Модули расширения и программные интерфейсы
    • 7.3 Графические библиотеки
    • 7.4 Контроль типов и перегрузка функций
  • 8 Примеры программ
  • 9 Профилирование и оптимизация кода
  • 10 Сравнение с другими языками
    • 10.1 Недостатки
      • 10.1.1 Низкое быстродействие
      • 10.1.2 Невозможность модификации встроенных классов
      • 10.1.3 Глобальная блокировка интерпретатора (GIL)
  • 11 Реализации
  • 12 Дальнейшая разработка
    • 12.1 График и совместимость
    • 12.2 Возможности
  • 13 Специализированные подмножества/расширения Python
  • 14 Применение
  • 15 См. также
  • 16 Примечания
  • 17 Литература
  • 18 Ссылки

Философия

Разработчики языка Python придерживаются определённой философии программирования, называемой «The Zen of Python» («Дзэн Питона», или «Дзэн Пайтона»)[8]. Её текст выдаётся интерпретатором Питона по команде import this (работает один раз за сессию). Автором этой философии считается Тим Пейтерс.

Текст философии:

«
  • Красивое лучше, чем уродливое.
  • Явное лучше, чем неявное.
  • Простое лучше, чем сложное.
  • Сложное лучше, чем запутанное.
  • Плоское лучше, чем вложенное.
  • Разреженное лучше, чем плотное.
  • Читаемость имеет значение.
  • Особые случаи не настолько особые, чтобы нарушать правила.
  • При этом практичность важнее безупречности.
  • Ошибки никогда не должны замалчиваться.
  • Если не замалчиваются явно.
  • Встретив двусмысленность, отбрось искушение угадать.
  • Должен существовать один — и, желательно, только один — очевидный способ сделать это.
  • Хотя он поначалу может быть и не очевиден, если вы не голландец[9].
  • Сейчас лучше, чем никогда.
  • Хотя никогда зачастую лучше, чем прямо сейчас.
  • Если реализацию сложно объяснить — идея плоха.
  • Если реализацию легко объяснить — идея, возможно, хороша.
  • Пространства имён — отличная штука! Будем делать их побольше!

Оригинальный текст  (англ.)  

  • Beautiful is better than ugly.
  • Explicit is better than implicit.
  • Simple is better than complex.
  • Complex is better than complicated.
  • Flat is better than nested.
  • Sparse is better than dense.
  • Readability counts.
  • Special cases aren’t special enough to break the rules.
  • Although practicality beats purity.
  • Errors should never pass silently.
  • Unless explicitly silenced.
  • In the face of ambiguity, refuse the temptation to guess.
  • There should be one — and preferably only one — obvious way to do it.
  • Although that way may not be obvious at first unless you’re Dutch.
  • Now is better than never.
  • Although never is often better than ‘right now’.
  • If the implementation is hard to explain, it’s a bad idea.
  • If the implementation is easy to explain, it may be a good idea.
  • Namespaces are one honking great idea — let’s do more of those!
»

История

Разработка языка Python была начата в конце 1980-х годов[10] сотрудником голландского института CWI Гвидо ван Россумом. Для распределённой ОС Amoeba требовался расширяемый скриптовый язык, и Гвидо начал писать Python на досуге, позаимствовав некоторые наработки для языка ABC (Гвидо участвовал в разработке этого языка, ориентированного на обучение программированию). В феврале 1991 года Гвидо опубликовал исходный текст в ньюсгруппе alt.sources[11]. С самого начала Python проектировался как объектно-ориентированный язык.

.py

Название языка произошло вовсе не от вида пресмыкающихся. Автор назвал язык в честь популярного британского комедийного телешоу 1970-х «Летающий цирк Монти Пайтона». Впрочем, всё равно название языка чаще ассоциируют именно со змеёй, нежели с фильмом — пиктограммы файлов в KDE или в Microsoft Windows и даже эмблема на сайте python.org (до выхода версии 2.5) изображают змеиные головы.

Наличие дружелюбного, отзывчивого сообщества пользователей считается наряду с дизайнерской интуицией Гвидо одним из факторов успеха Python. Развитие языка происходит согласно чётко регламентированному процессу создания, обсуждения, отбора и реализации документов PEP (англ. Python Enhancement Proposal) — предложений по развитию Python[12].

3 декабря 2008 года[13], после длительного тестирования, вышла первая версия Python 3000 (или Python 3.0, также используется сокращение Py3k). В Python 3000 устранены многие недостатки архитектуры с максимально возможным (но не полным) сохранением совместимости со старыми версиями Python. На сегодня поддерживаются обе ветви развития (Python 3.x и 2.x).

Влияние других языков на Python

Появившись сравнительно поздно, Python создавался под влиянием множества языков программирования:

  • ABC — отступы для группировки операторов, высокоуровневые структуры данных (map)[14][15] (Python фактически создавался как попытка исправить ошибки, допущенные при проектировании ABC);
  • Modula-3 — пакеты, модули, использование else совместно с try и except, именованные аргументы функций (на это также повлиял Common Lisp);
  • С, C++ — некоторые синтаксические конструкции (как пишет сам Гвидо ван Россум — он использовал наиболее непротиворечивые конструкции из С, чтобы не вызвать неприязнь у С-программистов к Python[14]);
  • Smalltalk — объектно-ориентированное программирование;
  • Lisp — отдельные черты функционального программирования (lambda, map, reduce, filter и другие);
  • Fortran — срезы массивов, комплексная арифметика;
  • Miranda — списочные выражения;
  • Java — модули logging, unittest, threading (часть возможностей оригинального модуля не реализована), xml.sax стандартной библиотеки, совместное использование finally и except при обработке исключений, использование @ для декораторов;
  • Icon — генераторы.

Большая часть других возможностей Python (например, байт-компиляция исходного кода) также была реализована ранее в других языках.

Портируемость

Python портирован и работает почти на всех известных платформах — от КПК до мейнфреймов. Существуют порты под Microsoft Windows, практически все варианты UNIX (включая FreeBSD и Linux), Plan 9, Mac OS и Mac OS X, iPhone OS 2.0 и выше, Palm OS, OS/2, Amiga, HaikuOS, AS/400 и даже OS/390, Windows Mobile, Symbian и Android[16].

По мере устаревания платформы её поддержка в основной ветви языка прекращается. Например, с серии 2.6 прекращена поддержка Windows 95, Windows 98 и Windows ME[17]. Однако на этих платформах можно использовать предыдущие версии Python — на данный момент сообщество активно поддерживает версии Python начиная от 2.3 (для них выходят исправления).

При этом, в отличие от многих портируемых систем, для всех основных платформ Python имеет поддержку характерных для данной платформы технологий (например, Microsoft COM/DCOM). Более того, существует специальная версия Питона для виртуальной машины Java — Jython, что позволяет интерпретатору выполняться на любой системе, поддерживающей Java, при этом классы Java могут непосредственно использоваться из Питона и даже быть написанными на Питоне. Также несколько проектов обеспечивают интеграцию с платформой Microsoft .NET, основные из которых — IronPython и Python.Net.

Типы и структуры данных

Python поддерживает динамическую типизацию, то есть тип переменной определяется только во время исполнения. Поэтому вместо «присваивания значения переменной» лучше говорить о «связывании значения с некоторым именем». В Python имеются встроенные типы: булевый, строка, Unicode-строка, целое число произвольной точности, число с плавающей запятой, комплексное число и некоторые другие. Из коллекций в Python встроены: список, кортеж (неизменяемый список), словарь, множество и другие[18]. Все значения являются объектами, в том числе функции, методы, модули, классы.

Добавить новый тип можно либо написав класс (class), либо определив новый тип в модуле расширения (например, написанном на языке C). Система классов поддерживает наследование (одиночное и множественное) и метапрограммирование. Возможно наследование от большинства встроенных типов и типов расширений.

Все объекты делятся на ссылочные и атомарные. К атомарным относятся int, long, complex и некоторые другие. При присваивании атомарных объектов копируется их значение, в то время как для ссылочных копируется только указатель на объект, таким образом, обе переменные после присваивания используют одно и то же значение. Ссылочные объекты бывают изменяемые и неизменяемые. Например, строки и кортежи являются неизменяемыми, а списки, словари и многие другие объекты — изменяемыми. Кортеж в Питоне является, по сути, неизменяемым списком. Во многих случаях кортежи работают быстрее списков[19], поэтому если вы не планируете изменять последовательность, то лучше использовать именно их.

Синтаксис и семантика

Язык обладает чётким и последовательным синтаксисом, продуманной модульностью и масштабируемостью, благодаря чему исходный код написанных на Питоне программ легко читаем.

Операторы

Набор операторов достаточно традиционен. Вот некоторые из них:

  • условный оператор if (если). Альтернативный блок после else (иначе). Если условий и альтернатив несколько, можно использовать elif (сокр. от else if).
  • операторы цикла while (пока) и for (для). Внутри цикла возможно применение break и continue для прерывания цикла и перехода сразу к следующей итерации соответственно.
  • оператор определения класса class.
  • оператор определения функции, метода или генератора def. Внутри возможно применение return (возврат) для возврата из функции или метода, а в случае генератора — yield (давать).
  • оператор обработки исключений try — except — else или try — finally (начиная с версии 2.5, можно использовать finally, except и else в одном блоке).
  • оператор pass ничего не делает. Используется для пустых блоков кода.

Одной из интересных синтаксических особенностей языка является выделение блоков кода с помощью отступов (пробелов или табуляций), поэтому в Питоне отсутствуют операторные скобки begin/end, как в языке Паскаль, или фигурные скобки, как в Си. Такой «трюк» позволяет сократить количество строк и символов в программе и приучает к «хорошему» стилю программирования. С другой стороны, поведение и даже корректность программы может зависеть от начальных пробелов в тексте. Некоторым такое поведение может показаться неинтуитивным и неудобным.

Выражения

Выражение является полноправным оператором в Питоне. Состав, синтаксис, ассоциативность и приоритет операций достаточно привычны для языков программирования и призваны минимизировать употребление скобок.

Отдельно стоит упомянуть операцию форматирования для строк (работает по аналогии с printf() из Си), которая использует тот же символ, что и взятие остатка от деления:

>>> print ("Здравствуй, %s!" % "Мир")
Здравствуй, Мир!

Python имеет удобные цепочечные сравнения. Такие условия в программах — не редкость:

1 <= a < 10 and 1 <= b < 20

Кроме того, логические операции (or и and) являются ленивыми: если для вычисления значения операции достаточно первого операнда, этот операнд и является результатом, в противном случае вычисляется второй операнд логической операции. Это основывается на свойствах алгебры логики: например, если один аргумент операции «ИЛИ» (or) является истиной, то и результат этой операции всегда является истиной. В случае, если второй операнд является сложным выражением, это позволяет сократить издержки на его вычисление. Этот факт широко использовался до версии 2.5 вместо условной конструкции:

(a < b) and "меньше" or "больше или равно"

Встроенные типы данных, как правило, имеют особый синтаксис для своих литералов (записанных в исходном коде констант):

"строка" + 'строка'  """тоже строка"""  u"Юникод-строка"
True or False            # булевы литералы
3.14                     # число с плавающей запятой
012 + 0xA                # числа в восьмеричной и шестнадцатеричной системах счисления
1 + 2j                   # комплексное число
[1, 2, "a"]              # список
(1, 2, "a")              # кортеж
{'a': 1, 'b': 'B'}       # словарь
lambda x: x**2           # анонимная функция

Для списков (и других последовательностей) Python предлагает набор операций над срезами. Особенностью является индексация, которая может показаться новичку странной, но раскрывает свою согласованность по мере использования. Индексы элементов списка начинаются с нуля. Запись среза s[N:M] означает, что в срез попадают все элементы от N включительно до M не включая. В качестве иллюстрации можно посмотреть пример работы с последовательностями.

Имена

Имя (идентификатор) может начинаться с латинской буквы любого регистра или подчёркивания, после чего в имени можно использовать и цифры. В качестве имени нельзя использовать ключевые слова (их список можно узнать по import keyword; print keyword.kwlist) и нежелательно переопределять встроенные имена. Имена, начинающиеся с символа подчёркивания, имеют специальное значение[20].

В каждой точке программы интерпретатор имеет доступ к трём пространствам имён (то есть отображениям имён в объекты): локальному, глобальному и встроенному.

Области видимости имён могут быть вложенными друг в друга (внутри определяемой функции видны имена из окружающего блока кода). На практике с областями видимости и связыванием имён связано несколько правил «хорошего тона», о которых можно подробнее узнать из документации.

Строки документации

Python предлагает механизм документирования кода pydoc. В начало каждого модуля, класса, функции вставляется строка документации — docstring (англ.). Строки документации остаются в коде на момент времени исполнения, и в язык встроен доступ к документации[21], что используется современными IDE (например, Eclipse).

В интерактивном режиме можно получить помощь, сгенерировать гипертекстовую документацию по целому модулю или даже применить doctest (англ.) для автоматического тестирования модуля.

Директивы

Начиная с Python 2.3, для использования в тексте программы символов, не входящих в ASCII, необходимо явно указывать кодировку исходного кода в начале модуля, например:

После этого можно использовать, например, кириллицу в Unicode-литералах.

Возможности

Интерактивный режим

Подобно Лиспу и Прологу в режиме отладки, интерпретатор Питона имеет интерактивный режим работы, при котором введённые с клавиатуры операторы сразу же выполняются, а результат выводится на экран (REPL). Этот режим интересен не только новичкам, но и опытным программистам, которые могут протестировать в интерактивном режиме любой участок кода, прежде чем использовать его в основной программе, или просто использовать как калькулятор с большим набором функций.

Так выглядит общение с Питоном в интерактивном режиме:

>>> 2 ** 100                           # возведение 2 в степень 100
1267650600228229401496703205376L
>>> from math import *                 # импорт математических функций
>>> sin(pi * 0.5)                      # вычисление синуса от половины пи 
1.0
>>> help(sorted)                       # помощь по функции sorted
Help on built-in function sorted in module __builtin__:
sorted(...)
   sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list

В интерактивном режиме доступен отладчик pdb и система помощи (вызывается по help()). Система помощи работает для модулей, классов и функций, только если те были снабжены строками документации.

Кроме встроенной, существуют и улучшенные интерактивные оболочки IPython[22] и bpython[23].

Объектно-ориентированное программирование

Дизайн языка Python построен вокруг объектно-ориентированной модели программирования. Реализация ООП в Питоне является элегантной, мощной и хорошо продуманной, но вместе с тем достаточно специфической по сравнению с другими объектно-ориентированными языками.

Возможности и особенности:

  1. Классы являются одновременно объектами со всеми ниже приведёнными возможностями.
  2. Наследование, в том числе множественное.
  3. Полиморфизм (все функции виртуальные).
  4. Инкапсуляция (два уровня — общедоступные и скрытые методы и поля). Особенность — скрытые члены доступны для использования и помечены как скрытые лишь особыми именами.
  5. Специальные методы, управляющие жизненным циклом объекта: конструкторы, деструкторы, распределители памяти.
  6. Перегрузка операторов (всех, кроме is, '.', '=' и символьных логических).
  7. Свойства (имитация поля с помощью функций).
  8. Управление доступом к полям (эмуляция полей и методов, частичный доступ, и т. п.).
  9. Методы для управления наиболее распространёнными операциями (истинностное значение, len(), глубокое копирование, сериализация, итерация по объекту, …)
  10. Метапрограммирование (управление созданием классов, триггеры на создание классов, и др.)
  11. Полная интроспекция.
  12. Классовые и статические методы, классовые поля.
  13. Классы, вложенные в функции и классы.

Функциональное программирование

Python поддерживает парадигму функционального программирования, в частности:

  • функция является объектом
  • функции высших порядков
  • рекурсия
  • развитая обработка списков (списковые выражения, операции над последовательностями, итераторы)
  • аналог замыканий
  • частичное применение функции
  • возможность реализации других средств на самом языке (например, карринг)

Модули и пакеты

Программное обеспечение (приложение или библиотека) на Питоне оформляется в виде модулей, которые в свою очередь могут быть собраны в пакеты. Модули могут располагаться как в каталогах, так и в ZIP-архивах. Модули могут быть двух типов по своему происхождению: модули, написанные на «чистом» Питоне, и модули расширения (extension modules), написанные на других языках программирования. Например, в стандартной библиотеке есть «чистый» модуль pickle и его аналог на Си: cPickle. Модуль оформляется в виде отдельного файла, а пакет — в виде отдельного каталога. Подключение модуля к программе осуществляется оператором import. После импорта модуль представлен отдельным объектом, дающим доступ к пространству имён модуля. В ходе выполнения программы модуль можно перезагрузить функцией reload().

Интроспекция

Python поддерживает полную интроспекцию времени исполнения. Это означает, что для любого объекта можно получить всю информацию о его внутренней структуре.

Применение интроспекции является важной частью того, что называют pythonic style, и широко применяется в библиотеках и фреймворках Python, таких как PyRO, PLY, Cherry, Django и др., значительно экономя время использующего их программиста.

Обработка исключений

Обработка исключений поддерживается в Python посредством операторов try, except, else, finally, raise, образующих блок обработки исключения. В общем случае блок выглядит следующим образом:

try:
    # Здесь код, который может вызвать исключение
    raise Exception("message")  # Exception, это один из стандартных типов исключения (всего лишь класс),
                                # может использоваться любой другой, в том числе свой
except (Тип исключения1, Тип исключения2,), Переменная:
    # Код в блоке выполняется, если тип исключения совпадает с одним из типов
    # (Тип исключения1, Тип исключения2, …) или является наследником одного
    # из этих типов.
    # Полученное исключение доступно в необязательной Переменной.
except (Тип исключения3, Тип исключения4,), Переменная:
    # Количество блоков except не ограничено
    raise  # Сгенерировать исключение "поверх" полученного; без параметров - повторно сгенерировать полученное
except:
    # Будет выполнено при любом исключении, не обработанном типизированными блоками except
else:
    # Код блока выполняется, если не было поймано исключений.
finally:
    # Будет исполнено в любом случае, возможно после соответствующего
    # блока except или else

Совместное использование else, except и finally стало возможно только начиная с Python 2.5. Информация о текущем исключении всегда доступна через sys.exc_info(). Кроме значения исключения, Python также сохраняет состояние стека вплоть до точки возбуждения исключения — так называемый traceback.

В отличие от компилируемых языков программирования, в Python использование исключения не приводит к значительным накладным расходам (а зачастую даже позволяет ускорить исполнение программ) и очень широко используется. Исключения согласуются с философией Python (10-й пункт «дзена Python» — «Ошибки никогда не должны умалчиваться») и являются одним из средств поддержки «утиной типизации».

Иногда вместо явной обработки исключений удобнее использовать блок with (доступен, начиная с Python 2.5).

Итераторы

В программах на Питоне широко используются итераторы. Цикл for может работать как с последовательностью, так и с итератором. Все коллекции, как правило, предоставляют итератор. Объекты определённого пользователем класса тоже могут быть итераторами. Подробнее об итераторах можно узнать в разделе о функциональном программировании. Модуль itertools стандартной библиотеки содержит много полезных функций для работы с итераторами.

Генераторы

Одной из интересных возможностей языка являются генераторы — функции, сохраняющие внутреннее состояние: значения локальных переменных и текущую инструкцию (см. также: сопрограммы). Генераторы могут использоваться как итераторы для структур данных и для ленивых вычислений. См. пример: генератор чисел Фибоначчи.

При вызове генератора функция немедленно возвращает объект-итератор, который хранит текущую точку исполнения и состояние локальных переменных функции. При запросе следующего значения (посредством метода next(), неявно вызываемого в for цикле) генератор продолжает исполнение функции от предыдущей точки останова до следующего оператора yield или return.

В Python 2.4 появились генераторные выражения — выражения, дающие в результате генератор. Генераторные выражения позволяют сэкономить память там, где иначе требовалось бы использовать список с промежуточными результатами:

>>> sum(i for i in xrange(1, 100) if i % 2 != 0)
2500

В этом примере суммируются все нечётные числа от 1 до 99.

Начиная с версии 2.5, Python поддерживает полноценные сопроцедуры: теперь в генератор можно передавать значения с помощью метода send() и возбуждать в его контексте исключения с помощью метода throw().

Управление контекстом выполнения

В Python 2.5 появились средства для управления контекстом выполнения блока кода — оператор with и модуль contextlib. См.: пример.

Оператор может применяться в тех случаях, когда до и после некоторых действий должны обязательно выполняться некоторые другие действия, независимо от возбуждённых в блоке исключений или операторов return: файлы должны быть закрыты, ресурсы освобождены, перенаправление стандартного ввода вывода закончено и т. п. Оператор улучшает читаемость кода, а значит, помогает предотвращать ошибки.

Декораторы

Начиная с версии 2.4, Python позволяет использовать т. н. декораторы[24] (не следует путать с одноимённым шаблоном проектирования) для поддержки существующей практики преобразования функций и методов в месте определения (декораторов может быть несколько). Для декораторов используется символ @ в строках, предшествующих определению функции или метода. Синтаксис декорирования является синтаксическим сахаром для удобочитаемости: код

@staticmethod
def myWonderfulMethod():
    return "Некоторый метод"

полностью эквивалентен

def myWonderfulMethod():
    return "Некоторый метод"
myWonderfulMethod = staticmethod(myWonderfulMethod)

Сам декоратор является функцией, получающей в качестве первого аргумента декорируемую функцию; можно передавать и дополнительные аргументы синтаксисом @декоратор(аргументы). Декораторы можно считать элементом аспектно-ориентированного программирования.

С версии 2.6 декораторы можно использовать с классами аналогично функциям.

Другие возможности

В Python есть ещё несколько возможностей, отличающих его от многих других языков высокой гибкостью и динамичностью.

Например, класс является объектом, а в операторе определения класса можно использовать выражения в списке родительских классов.

def getClass():
    return dict
class D(getClass()):
    pass
d = D()

Можно модифицировать многие объекты во время исполнения, например классы:

>>> class X(object): pass>>> y = X()
>>> y.wrongMethod() # такого метода пока нет
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'X' object has no attribute 'wrongMethod'
>>> X.wrongMethod = lambda self : 'im here' # добавим его
>>> y.wrongMethod() # так как доступ к методу приводит к поиску по __dict__ класса,
'im here' # то wrongMethod становится доступным всем экземплярам

Библиотеки

Стандартная библиотека

Богатая стандартная библиотека является одной из привлекательных сторон Питона. Здесь имеются средства для работы со многими сетевыми протоколами и форматами Интернета, например, модули для написания HTTP-серверов и клиентов, для разбора и создания почтовых сообщений, для работы с XML и т. п. Набор модулей для работы с операционной системой позволяет писать кросс-платформенные приложения. Существуют модули для работы с регулярными выражениями, текстовыми кодировками, мультимедийными форматами, криптографическими протоколами, архивами, сериализации данных, поддержка юнит-тестирования и др.

Модули расширения и программные интерфейсы

Помимо стандартной библиотеки существует множество библиотек, предоставляющих интерфейс ко всем системным вызовам на разных платформах; в частности, на платформе Win32 поддерживаются все вызовы Win32 API, а также COM в объёме не меньшем, чем у Visual Basic или Delphi. Количество прикладных библиотек для Python в самых разных областях без преувеличения огромно (веб, базы данных, обработка изображений, обработка текста, численные методы, приложения операционной системы и т. д.).

Для Python принята спецификация программного интерфейса к базам данным DB-API 2 и разработаны соответствующие этой спецификации пакеты для доступа к различным СУБД: Oracle, MySQL, PostgreSQL, Sybase, Firebird (Interbase), Informix, Microsoft SQL Server и SQLite. На платформе Windows доступ к БД возможен через ADO (ADOdb). Коммерческий пакет mxODBC для доступа к СУБД через ODBC для платформ Windows и UNIX разработан eGenix[25]. Для Питона написано много ORM (SQLObject, SQLAlchemy, Dejavu, Django), выполнены программные каркасы для разработки веб-приложений (Django, Pylons, Pyramid).

Библиотека NumPy для работы с многомерными массивами позволяет достичь производительности научных расчётов, сравнимой со специализированными пакетами. SciPy использует NumPy и предоставляет доступ к обширному спектру математических алгоритмов (матричная алгебра — BLAS уровней 1—3, LAPACK, БПФ…). Numarray[26] специально разработан для операций с большими объёмами научных данных.

WSGI[27] — интерфейс шлюза с веб-сервером (Python Web Server Gateway Interface).

Python предоставляет простой и удобный программный интерфейс C API для написания собственных модулей на языках Си и C++. Такой инструмент как SWIG позволяет почти автоматически получать привязки для использования C/C++ библиотек в коде на Питоне. Возможности этого и других инструментов варьируются от автоматической генерации (C/C++/Fortran)-Python интерфейсов по специальным файлам (SWIG, pyste[28], SIP[29], pyfort[30]), до предоставления более удобных API (boost::python[31], CXX[32] и др.). Инструмент стандартной библиотеки ctypes позволяет программам Питона напрямую обращаться к динамическим библиотекам/DLL, написанным на Си. Существуют модули, позволяющие встраивать код на С/C++ прямо в исходные файлы Python, создавая расширения «на лету» (pyinline[33], weave[34]).

Другой подход состоит во встраивании интерпретатора Python в приложения. Python легко встраивается в программы на Java, C/C++, Ocaml. Взаимодействие Python-приложений с другими системами возможно также с помощью CORBA, XML-RPC, SOAP, COM.

С помощью проекта Cython возможна трансляция программ написанных на языках Python и Pyrex (англ.) в код на языке Си, с последующей компиляцией в машинный код. Cython используется для упрощения написания Python-библиотек, при его использовании отмечается ускорение кода и уменьшение накладных расходов.

Экспериментальный проект Shedskin предполагает создание компилятора для трансформации неявно типизированных Python программ в оптимизированный С++ код. Начиная с версии 0.22 Shedskin позволяет компилировать отдельные функции в модули расширений.

Python и подавляющее большинство библиотек к нему бесплатны и поставляются в исходных кодах. Более того, в отличие от многих открытых систем, лицензия никак не ограничивает использование Python в коммерческих разработках и не налагает никаких обязательств кроме указания авторских прав.

Одним из каналов распространения и обновления пакетов для Python является PyPI (англ. Python Package Index).

Графические библиотеки

С Питоном поставляется библиотека tkinter на основе Tcl/Tk для создания кроссплатформенных программ с графическим интерфейсом.

Существуют расширения, позволяющие использовать все основные GUI библиотеки — wxPython[35], основанное на библиотеке wxWidgets, PyGTK для Gtk, PyQt и PySide для Qt и другие. Некоторые из них также предоставляют широкие возможности по работе с базами данных, графикой и сетями, используя все возможности библиотеки, на которой основаны.

Для создания игр и приложений, требующих нестандартного интерфейса, можно использовать библиотеку Pygame. Она также предоставляет обширные средства работы с мультимедиа: с её помощью можно управлять звуком и изображениями, воспроизводить видео. Предоставляемое pygame аппаратное ускорение графики OpenGL имеет более высокоуровневый интерфейс по сравнению с PyOpenGL[36], копирующей семантику С-библиотеки для OpenGL. Есть также PyOgre[37], обеспечивающая привязку к Ogre — высокоуровневой объектно-ориентированной библиотеке 3D-графики. Кроме того, существует библиотека pythonOCC[38], обеспечивающая привязку к среде 3D-моделирования и симуляции OpenCascade[39].

Для работы с растровой графикой используется библиотека Python Imaging Library.

Контроль типов и перегрузка функций

Существуют модули, позволяющие контролировать типы параметров функций на этапе исполнения, например, typecheck[40] или method signature checking decorators[41]. Необязательная декларация типов для параметров функции добавлена в Python 3, интерпретатор при этом не проверяет типы, а только добавляет соответствующую информацию к метаданным функции для последующего использования этой информации модулями расширений.[42]

Перегрузка функций реализована различными сторонними библиотеками, в том числе PEAK[43][44]. Не принятые планы по поддержке перегрузки в Python3000[45] были частично реализованы в библиотеке overloading-lib[46].

Примеры программ

В статье «Примеры программ на языке Python» собраны примеры небольших программ, демонстрирующих некоторые возможности языка Python и его стандартной библиотеки.

Профилирование и оптимизация кода

В стандартной библиотеке Python имеется профайлер (модуль profile), который можно использовать для сбора статистики о времени работы отдельных функций. Для решения вопроса о том, какой вариант кода работает быстрее, можно использовать модуль timeit. Производимые в следующей программе измерения позволяют выяснить, какой из вариантов конкатенации строк более эффективен:

from timeit import Timer
 
tmp = "Python 3.2.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32."
 
def case1():  # А. инкрементальные конкатенации в цикле
    s = ""
    for i in range(10000):
        s += tmp
 
def case2():  # Б. через промежуточный список и метод join
    s = []
    for i in range(10000):
        s.append(tmp)
    s = "".join(s)
 
def case3():  # В. списковое выражение и метод join
    return "".join([tmp for i in range(10000)])
 
def case4():  # Г. генераторное выражение и метод join
    return "".join(tmp for i in range(10000))
 
for v in range(1,5):
    print (Timer("func()","from __main__ import case%s as func" % v).timeit(200))

Как и в любом языке программирования, в Питоне имеются свои приемы оптимизации кода. Оптимизировать код можно исходя из различных (часто конкурирующих друг с другом) критериев (увеличение быстродействия, уменьшение объёма требуемой оперативной памяти, компактность исходного кода и т. д.). Чаще всего программы оптимизируют по времени исполнения.

Здесь есть несколько очевидных правил:

  • Не нужно оптимизировать программу, если скорость её выполнения достаточна.
  • Используемый алгоритм имеет определённую временную сложность, поэтому перед оптимизацией кода программы стоит сначала пересмотреть алгоритм.
  • Стоит использовать готовые и отлаженные функции и модули, даже если для этого нужно немного обработать данные. Например, в Питоне есть встроенная функция sort().
  • Профилирование поможет выяснить узкие места. Оптимизацию нужно начинать с них.

Python имеет следующие особенности и связанные с ними правила оптимизации:

  • Вызов функций является достаточно дорогостоящей операцией, поэтому внутри вложенных циклов нужно стараться избегать вызова функций или, например, переносить цикл в функции. Функция, обрабатывающая последовательность, эффективнее, чем обработка той же последовательности в цикле вызовом функции.
  • Старайтесь вынести из глубоко вложенного цикла всё, что можно вычислить во внешних циклах. Доступ к локальным переменным более быстрый, чем к глобальным, или чем доступ к полям.
  • Оптимизатор psyco может помочь ускорить работу модуля программы при условии, что модуль не использует динамических свойств языка Питон.
  • В случае, если модуль проводит массированную обработку данных и оптимизация алгоритма и кода не помогает, можно переписать критические участки, скажем, на языке Си или Pyrex.

Инструмент под названием Pychecker[47] поможет проанализировать исходный код на Питоне и выдать рекомендации по найденным проблемам (например, неиспользуемые имена, изменение сигнатуры метода при его перегрузке и т. п.). В ходе такого статического анализа исходного кода могут быть выявлены и ошибки. Pylint[48] призван решать близкие задачи, но имеет уклон в сторону проверки стиля кода.

Сравнение с другими языками

Наиболее часто Python сравнивают с Perl и Ruby. Эти языки также являются интерпретируемыми и обладают примерно одинаковой скоростью выполнения программ. Как и Perl, Python может успешно применяться для написания скриптов (сценариев). Как и Ruby, Python является хорошо продуманной системой для ООП.

Средства функционального программирования частично позаимствованы из Scheme и Icon.

В среде коммерческих приложений скорость выполнения программ на Python часто сравнивают с Java-приложениями[49].

Несмотря на то, что Python обладает достаточно самобытным синтаксисом, одним из принципов дизайна этого языка является принцип наименьшего удивления.

Недостатки

См. также список распространённых недоразумений при использовании языка Python[50].

Низкое быстродействие

Классический Питон, как и многие другие интерпретируемые языки, не применяющие, например, JIT-компиляторы, имеют общий недостаток — сравнительно невысокую скорость выполнения программ[51]. Сохранение байт-кода (файлы .pyc и .pyo) позволяет интерпретатору не тратить лишнее время на перекомпиляцию кода модулей при каждом запуске, в отличие, например, от языка Perl. Кроме того, существует специальная JIT-библиотека psyco[52], позволяющая ускорить выполнение программ (однако приводящая к увеличению потребления оперативной памяти). Эффективность psyco сильно зависит от архитектуры программы.

Существуют проекты реализаций языка Python, вводящие высокопроизводительные виртуальные машины (ВМ) в качестве компилятора заднего плана. Примерами таких реализаций может служить PyPy, базирующийся на LLVM; более ранней инициативой является проект Parrot. Ожидается, что использование ВМ типа LLVM приведёт к тем же результатам, что и использование аналогичных подходов для реализаций языка Java, где низкая вычислительная производительность в основном преодолена[53].

Множество программ/библиотек для интеграции с другими языками программирования (см. выше) предоставляют возможность использовать другой язык для написания критических участков.

В самой популярной реализации языка Python интерпретатор довольно велик и более требователен к ресурсам, чем в аналогичных популярных реализациях Tcl, Forth, LISP или Lua, что ограничивает его применение во встроенных системах. Тем не менее, Python нашёл применение в КПК и некоторых моделях мобильных телефонов[54].

Невозможность модификации встроенных классов

По сравнению с Ruby и некоторыми другими языками, в Python отсутствует возможность модифицировать встроенные классы, такие, как int, str, float, list и другие, что, однако, позволяет Python потреблять меньше оперативной памяти и быстрее работать. Ещё одной причиной введения такого ограничения является необходимость согласования с модулями расширения. Многие модули (в целях оптимизации быстродействия) преобразуют Python-объекты элементарных типов к соответствующим Си-типам вместо манипуляций с ними посредством Си-API. Также это избавляет от многих потенциальных ошибок при неконтролируемом динамическом переопределении встроенных типов.

Глобальная блокировка интерпретатора (GIL)

GIL (Global Interpreter Lock) — особенность, присущая CPython, Stackless и PyPy, но отсутствующая в Jython и IronPython. При своей работе основной интерпретатор Python постоянно использует большое количество потоко-небезопасных данных. В основном это словари, в которых хранятся атрибуты объектов, и обращения к внешнему коду (написанному на С и т. п.). Во избежание разрушения этих данных при совместной модификации из разных потоков, перед началом исполнения нескольких инструкций (по умолчанию 100) поток интерпретатора захватывает GIL, а по окончании освобождает. Вследствие этого, в каждый момент времени в одном процессе интерпретатора Python может исполняться только один поток Python кода, даже если в компьютере имеется несколько процессоров или процессорных ядер (GIL также освобождается на время выполнения блокирующих операций, таких как ввод-вывод, изменения/проверка состояния синхронизирующих примитивов и других — таким образом, если один поток блокируется, другие могут исполняться). Была предпринята попытка перехода к более гранулированным синхронизациям, однако из-за частых захватов/освобождений блокировок эта реализация оказалась слишком медленной на однопоточных приложениях[55]. В ближайшем будущем переход от GIL к другим техникам не предполагается по причине того, что, по мнению автора языка Python Гвидо Россума, однопоточных программ, ускоряемых GIL, больше, чем многопоточных, которые GIL тормозит. Однако есть python-safethread[56] — CPython без GIL и с некоторыми другими изменениями (по утверждениям его авторов, на однопоточных приложениях скорость соответствует 60-65 % от скорости оригинального CPython).

Эта проблема имеет два основных варианта решения. Первый — отказ от совместного использования изменяемых данных и вызовов внешнего кода. При этом данные дублируются в потоках и необходимость обеспечения их синхронизации (если таковая нужна) лежит на программисте[57]. Этот подход ведёт к увеличению потребления оперативной памяти (однако не настолько сильно, как при использовании процессов в Windows — так как для Unix это не критично, процессы небольшие).

Второй подход — обеспечение более гранулированной синхронизации — для отдельных структур данных. В этом случае падает производительность вследствие увеличения числа освобождений/захватов блокировок.

Если необходимо параллельное исполнение нескольких потоков Python кода, то можно воспользоваться процессами, например, модулем processing[58], который имитирует семантику стандартного модуля threading, но использует процессы вместо потоков. Начиная с версии 2.6, модуль processing добавлен в стандартную библиотеку и переименован в multiprocessing. Есть множество модулей, упрощающих написание параллельных и/или распределённых приложений на Python, таких как parallelpython[59], Pypar[60], pympi[61] и других. GIL освобождается при исполнении кода большинства расширений, например, NumPy/SciPy, позволяя на время расчётов исполняться другому Python потоку. Другим решением может быть использование IronPython или Jython, лишённых этой особенности классического Python.

В версии 3.2 будет внедрён изменённый GIL[62][63]. Основные нововведения:

  • Переключение по таймауту, а не по количеству опкодов — в предыдущей версии GIL освобождался через каждые 100 операций. Но операция может выполняться от наносекунд, до долей секунд. В новой версии блокировка будет сниматься каждые 5 миллисекунд;
  • Уменьшение накладных расходов и увеличение эффективности в случае частых переключений — в некоторых системах (в основном в MacOS X) наблюдаются проблема с эффективностью блокировки, когда GIL уже захвачен: системные вызовы становятся дорогими. В новой версии задержки будут уменьшены;
  • Уменьшение задержек при переключении потоков благодаря введению механизма принудительного переключения потока и приоритетных запросов (когда поток выполняет приоритетный запрос, то GIL освобождается как можно быстрее).

Реализации

CPython является основной, но не единственной реализацией языка программирования Python. Существуют также следующие реализации:

Jython — реализация Python, использующая JVM в качестве среды исполнения. Позволяет прозрачно использовать Java-библиотеки.[64]

PyS60[54] — реализация языка для смартфонов фирмы Nokia на платформе Series 60.

IronPython — Python для .NET Framework и Mono. Компилирует Python программы в MSIL, таким образом предоставляя полную интеграцию с .NET системой[65].

Stackless — также написанная на Си реализация Python. Это не полноценная реализация, а патчи к CPython. Предоставляет расширенные возможности многопоточного программирования и значительно большую глубину рекурсии.

Python for .NET[66] — ещё одна реализация Python для .NET. В отличие от IronPython эта реализация не компилирует Python код в MSIL, а только предоставляет интерпретатор, написанный на C#. Позволяет использовать .NET-сборки из Python кода.

PyPy — реализация Python, написанная на Python. Позволяет легко проверять новые возможности. В PyPy кроме стандартного CPython включены возможности Stackless, Psyco, модификация AST «на лету» и многое другое. В проект интегрированы возможности анализа Python кода и трансляция в другие языки и байткоды виртуальных машин (Си, LLVM, Javascript, .NET с версии 0.9.9). Начиная с 0.9.0, возможна полностью автоматическая трансляция интерпретатора на Си, в результате чего достигается скорость, приемлемая для использования (в 2—3 раза медленнее чем CPython при отключённом JIT для версии 0.9.9). JIT находится в активной доработке.

python-safethread[56] — версия CPython без GIL, что позволяет одновременно исполнять Python потоки на всех доступных процессорах. Внесены также некоторые другие изменения.

Unladen Swallow — начатый Google проект по разработке высокоэффективного, максимально совместимого с CPython JIT-компилятора на базе LLVM. Согласно планам по развитию Python[67], планировалось перенести исходный код Unladen Swallow в CPython в версии 3.3. Но PEP-3146 был отменён в связи с отсутствием интереса к Unladen Swallow со стороны Google, основного спонсора разработки.[68]

tinypy[69] — минималистическая версия Python. Часть возможностей CPython не реализована.

Дальнейшая разработка

Python Enhancement Proposal («PEP») — это документ со стандартизированным дизайном, предоставляющий общую информацию о языке Python, включая новые предложения, описания и разъяснения возможностей языка. PEP предлагаются как основной источник для предложения новых возможностей и для разъяснения выбора того или иного дизайна для всех основных элементов языка. Выдающиеся PEP рецензируются и комментируются BDFL.

График и совместимость

Серии Python 2.x и Python 3.x в течение нескольких выпусков будут существовать параллельно, при этом серия 2.x будет использоваться для совместимости и скорее всего в неё будут включены некоторые возможности серии 3.x. PEP 3000 содержит больше информации о планируемых выпусках.

Python 3.0 обратно не совместим с предыдущей серией 2.x. Код Python 2.x скорее всего будет выдавать ошибки при исполнении в Python 3.0. Динамическая типизация Python вместе с планами изменения нескольких методов словарей делает механический перевод из Python 2.x в Python 3.0 очень сложным. Однако, утилита «2to3» уже способна сделать большинство работы по переводу кода, указывая на подозрительные ей части с помощью комментариев и предупреждений. PEP 3000 рекомендует держать исходный код для серии 2.x, и делать выпуски для Python 3.x с помощью «2to3». Полученный код не следует редактировать, пока программа не будет работоспособной в Python 2.x.

Возможности

Основные изменения, внесённые в версии 3.0:[70][71]

  • Синтаксическая возможность для аннотации параметров и результата функций (например, для передачи информации о типе или документирования).
  • Полный переход на unicode для строк.
  • Введение нового типа «неизменяемые байты» и типа «изменяемый буфер». Оба необходимы для представления бинарных данных.
  • Новая подсистема ввода-вывода (модуль io), имеющая отдельные представления для бинарных и текстовых данных.
  • Абстрактные классы, абстрактные методы (доступно уже в 2.6).
  • Иерархия типов для чисел.
  • Выражения для словарей и множеств {k: v for k, v in a_dict} и {el1, el2, el3} (по аналогии со списковыми выражениями).
  • Изменения print из встроенного выражения во встроенную функцию. Это позволит модулям делать изменения, подстраиваясь под разное использование функции, а также упростит код. В Python 2.6 эта возможность активируется вводом from __future__ import print_function.
  • Перемещение reduce (но не map или filter) из встроенного пространства в модуль functools (использование reduce существенно менее читабельно по сравнению с циклом).
  • Удаление некоторых устаревших возможностей, поддерживаемых в ветке 2.x для совместимости, в частности: классы старого стиля, целочисленное деление с обрезанием результата как поведение по умолчанию, строковые исключения, неявный относительный импорт, оператор exec и т. п.
  • Реорганизация стандартной библиотеки.
  • Новый синтаксис для метаклассов.
  • Изменен синтаксис присваиваний. Стало возможным, например, присваивание (a, *rest, b) = range(5). С другой стороны, формальные параметры функций вроде def foo(a, (b, c)) более недопустимы.

Специализированные подмножества/расширения Python

На основе Python было создано несколько специализированных подмножеств языка, в основном предназначенных для статической компиляции в машинный код. Некоторые из них:

RPython[72] — созданная в рамках проекта PyPy сильно ограниченная реализация Python без динамизма времени исполнения и некоторых других возможностей. RPython код можно компилировать во множество других языков/платформ — C, JavaScript, Lisp, .NET[73], LLVM. На RPython написан интерпретатор PyPy.

Pyrex[74] — ограниченная реализация Python, но несколько меньше, чем RPython. Pyrex расширен возможностями статической типизации типами из языка С и позволяет свободно смешивать типизированный и не типизированный код. Предназначен для написания модулей расширений, компилируется в код на языке С.

Cython[75] — расширенная версия Pyrex.

Проект Shedskin — предназначен для компиляции неявно статически типизированного Python кода в оптимизированный код на языке С++.

Применение

Основная статья: Использование Python

Python — стабильный и распространённый язык. Он используется во многих проектах и в различных качествах: как основной язык программирования или для создания расширений и интеграции приложений. На Python реализовано большое количество проектов, также он активно используется для создания прототипов будущих программ. Python используется во многих крупных компаниях.[76]

Python с пакетами NumPy, SciPy и MatPlotLib начинает активно использоваться как универсальная среда для научных расчётов в качестве замены распространенным специализированным коммерческим пакетам Matlab, IDL и др.[77][78]

См. также

  • Сравнение командных оболочек

Примечания

    • .py — исходный код.
    • .pyw — исходный код для выполнения программ с графическим интерфейсом в Windows, файлы с таким расширением будут выполнены без запуска консоли.
    • .pyc — скомпилированный байт-код.
    • .pyo — оптимизированный скомпилированный байт-код.
    • .pyd — бинарный код динамических библиотек DLL (в Windows).
  1. Python 2.7.3 Release
  2. Python 3.3.0 Release
  3. Мария «Mifrill» Нефедова, Создатели языков программирования: Они такие разные, но кодинг их объединяет, Хакер № 09/08 (117)
  4. Создатель языка Гвидо ван Россум настаивает, что название происходит не от рептилии и не от мифического существа, а от телевизионного шоу «Летающий цирк Монти Пайтона». См.: http://docs.python.org/faq/general#why-is-it-called-python, однако стилизованное изображение змеи давно стало неофициальным символом языка и является элементом официального логотипа.
  5. About Python
  6. Python 2.5 license
  7. PEP 20 — The Zen of Python
  8. Шутливый намёк на национальность Гвидо
  9. The Making of Python
  10. http://svn.python.org/view/*checkout*/python/trunk/Misc/HISTORY
  11. Index of Python Enhancement Proposals (PEPs)
  12. Python 3.0 Release
  13. 1 2 Foreword for «Programming Python» (1st ed.)
  14. The Making of Python
  15. Python on Android  (англ.). www.damonkohler.com. Архивировано из первоисточника 28 января 2011. Проверено 19 декабря 2009.
  16. Port-Specific Changes: Windows  (англ.). Python v2.6.1 documentation. What’s New in Python 2.6. Python Software Foundation. Архивировано из первоисточника 28 января 2011. Проверено 11 декабря 2008.
  17. Python Documentation — Built-in Types
  18. Are tuples more efficient than lists in Python? — Stack Overflow
  19. 2.3.2. Reserved classes of identifiers. Python documentation (18 октября 2009). Архивировано из первоисточника 28 января 2011.
  20. …целостность больших проектов на Python строится на двух вещах: тесты и doc-строка
  21. http://ipython.scipy.org/
  22. bpython interpreter
  23. PEP318
  24. eGenix.com — Professional Python Software, Skills and Services
  25. http://www.stsci.edu/resources/software_hardware/numarray numarray Home Page]
  26. PEP333
  27. Pyste Documentation
  28. http://www.riverbankcomputing.co.uk/sip/
  29. http://pyfortran.sourceforge.net/
  30. Boost.Python
  31. PyCXX: Write Python Extensions in C
  32. PyInline: Mix Other Languages directly Inline with your Python
  33. Weave
  34. wxPython
  35. PyOpenGL — The Python OpenGL Binding
  36. PyOgre : Ogre Wiki
  37. pythonOCC, 3D CAD/CAE/PLM development framework for the Python programming language
  38. Open CASCADE Technology, 3D modeling & numerical simulation
  39. Typechecking module for Python
  40. Method signature checking decorators » Python recipes » ActiveState Code
  41. PEP-3107
  42. FrontPage — The PEAK Developers’ Center
  43. PEAK-Rules
  44. PEP-3124
  45. overloading-lib, Библиотека динамической перегрузки функций и методов основанной на типах аргументов для языка python
  46. PyChecker: a python source code checking tool
  47. pylint (analyzes Python source code looking for bugs and signs of poor quality.) (Logilab.org)
  48. Результаты одной из попыток сравнения
  49. zephyrfalcon.org :: labs :: 10 Python pitfalls
  50. Python / C++ GNU g++. Computer Language Benchmarks Game.  ???. Архивировано из первоисточника 28 января 2011. Проверено 1 июля 2009.
  51. Psyco (англ.) — JIT-компилятор для Python, позволяющий увеличить скорость работы программ в 3-10 раз
  52. unladen-swallow. A faster implementation of Python. code.google. — «Goals: … Produce a version of Python at least 5x faster than CPython»  Архивировано из первоисточника 28 января 2011. Проверено 22 июня 2009.
  53. 1 2 Python for S60 — OpenSource
  54. Python 3000 FAQ
  55. 1 2 python-safethread — Project Hosting on Google Code
  56. perlthrtut — perldoc.perl.org
  57. Python Package Index : processing 0.52
  58. Parallel Python — Home
  59. http://datamining.anu.edu.au/~ole/pypar/
  60. pyMPI.sourceforge.net: Putting the py in MPI
  61. What’s New In Python 3.2 — Python v3.2b2 documentation
  62. [Python-Dev] Reworking the GIL
  63. The Jython Project
  64. IronPython
  65. Python for .NET
  66. PEP 3146 — Merging Unladen Swallow into CPython
  67. http://qinsb.blogspot.com/2011/03/unladen-swallow-retrospective.html
  68. tinypy :: home
  69. What’s New In Python 3.0 — Python v3.0.1 documentation
  70. Overview — Python v3.0.1 documentation
  71. PyPy[coding-guide]
  72. PyPy[carbonpython]
  73. Pyrex
  74. Cython: C-Extensions for Python
  75. Python Success Stories
  76. Python vs Matlab Python for scientists blog
  77. IDL vs. Python AstroBetter Tips and Tricks for Professional Astronomers

Литература

На русском языке
  • Марк Лутц. Программирование на Python. — 4-е изд. — СПб.: Символ-Плюс, 2011. — Т. II. — ISBN 978-5-93286-211-7
  • Марк Лутц. Программирование на Python / Пер. с англ. — 4-е изд. — СПб.: Символ-Плюс, 2011. — Т. I. — 992 с. — ISBN 978-5-93286-210-0
  • Марк Лутц. Изучаем Python, 4-е издание. — Перевод с английского. — СПб.: Символ-Плюс, 2010. — 1280 с — ISBN 978-5-93286-159-2
  • Дэвид М. Бизли. Python. Подробный справочник, 4-е издание. — Перевод с английского. — СПб.: Символ-Плюс, 2010. — 864 с — ISBN 978-5-93286-157-8
  • Марк Саммерфилд. Программирование на Python 3. Подробное руководство. — Перевод с английского. — СПб.: Символ-Плюс, 2009. — 608 с — ISBN 978-5-93286-161-5
  • Ноа Гифт, Джереми М. Джонс. Python в системном администрировании UNIX и Linux. — Перевод с английского. — СПб.: Символ-Плюс, 2009. — 512 с — ISBN 978-5-93286-149-3
  • Бизли, Дэвид М. Язык программирования Python. Справочник. — К.: ДиаСофт, 2000. — 336 с. — ISBN 966-7393-54-2, ISBN 0-7357-0901-7
  • Сузи Р. А. Python. Наиболее полное руководство (+CD). — СПб.: БХВ-Петербург, 2002. — 768 с. — ISBN 5-94157-097-X
  • Сузи Р. А. Язык программирования Python: Учебное пособие. — М.: ИНТУИТ, БИНОМ. Лаборатория знаний, 2006. — 328 с. — ISBN 5-9556-0058-2, ISBN 5-94774-442-2
  • М. Доусон. Программируем на Python. — СПб.: Питер, 2012. — 432 с. — ISBN 978-5-459-00314-7
  • С. Шапошникова. Основы программирования на Python. Учебник. Вводный курс. — версия 2. — 2011. — 44 с.
  • И. А. Хахаев. Практикум по алгоритмизации и программированию на Python. Учебник. — М.: Альт Линукс, 2010. — 126 с. — (Библиотека ALT Linux). — ISBN 978-5-905167-02-7
  • А. Н. Чаплыгин. Учимся программировать вместе с Питоном. Учебник. — ревизия 226. — 135 с.
  • Г. Россум, Ф. Л. Дж. Дрейк, Д. С. Откидач и др. Язык программирования Python (не издано, черновик). — СПб.: АНО «Институт логики». Невский Диалект, 2001. — 454 с.
На английском языке
  • David Beazley, Guido Van Rossum. Python: Essential Reference. — New Riders Publishing, 1999.
  • Martin C. Brown. Python: The Complete Reference. McGraw-Hill Professional Publishing, 2001
  • Wesley J. Chun. Core Python Programming. Prentice Hall PTR, 2000
  • Alan Gauld. Learn to Program Using Python: A Tutorial for Hobbyists, Self-Starters, and Those Who Want to Learn the Art of Programming. Addison-Wesley Professional, 2001
  • John E. Grayson. Python and Tkinter Programming. Manning Publications Company, 1999
  • Rashi Gupta. Making use of Python. Wiley, 2002
  • Mark Hammond, Andy Robinson. Python Programming on Win32. O’Reilly, 2000
  • Christopher A. Jones, Fred L. Drake. Python & XML. O’Reilly & Associates, 2001
  • Ivan Van Laningham. Teach Yourself Python in 24 Hours. Sams, 2000
  • Amos Latteier, Michel Pelletier. The Zope Book. New Riders Publishing, 2001
  • Frederik Lundh. Python Standard Library. O’Reilly & Associates, 2001
  • A. Sweigart. Invent Your Own Computer Games with Python. — 2008—2010. — 436 с. — ISBN 978-0-9821060-1-3
  • A. Sweigart. Core Python Applications Programming. — 2012. — 888 с. — ISBN 978-0-1326782-0-9

Ссылки

П: Портал «Свободное программное обеспечение»
b: Python в Викиучебнике?
v: Python в Викиверситете?
s: Python в Викитеке?
commons: Python на Викискладе?
  • Официальный сайт (англ.)
  • Каталог ссылок на русскоязычные материалы по Python на официальном вики-сайте. (англ.)
 Просмотр этого шаблона Python
Люди

Гвидо ван Россум

Реализации

ChinesePython • CLPython • CPython • JPype • Jython • IronPython • PyPy • Python for S60 • Psyco • Stackless Python • Unladen Swallow

Фреймворки

CherryPy • Django • Flask • GAE framework • Pylons • Pyramid • Quixote • TurboGears • Twisted • Web2py • Zope

IDE

Boa Constructor • Eclipse+PyDev • Eric • Geany • IDLE • Komodo • NetBeans • PyCharm • PyScripter • SPE

Библиотеки

Beautiful Soup • NLTK • NumPy • PIL • Pygame • PyGTK • Pyparsing • PyQt • SciPy • SQLAlchemy

Другое

ActivePython • PyPI • Python Software Foundation • Лицензия Python

 Просмотр этого шаблона Основные языки программирования (сравнение • IDE • история • хронология)
Используемые
в разработке

Ада • APL • Язык ассемблера • ActionScript • ABAP/4 • AutoIt • AWK • Бейсик • Си • Кобол • C++ • C# • Cω • Clarion • Clojure • ColdFusion • Common Lisp • D • dBase • Delphi • Eiffel • Erlang • Euphoria • F# • Форт • Фортран • Gambas • Go • Groovy • HAL/S • Haskell • Icon • Java • JavaScript • Limbo • Lua • Модула-3 • Object Pascal • Objective-C • OCaml • Oz • Parser • Паскаль • Компонентный Паскаль • Perl • PHP • PowerBASIC • Python ПЛ/1 • Пролог • Ruby • Scala • Scheme • Smalltalk • SQL • PL/SQL • Tcl • Vala • Visual Basic (.NET)

Академические

Agda • Clean • Curry • Лого • ML • РЕФАЛ • Симула • Оберон

IEC 61131-3

Instruction List • ST • FBD • Ladder Diagram (LD) • SFC

Прочие

Алгол • Алгол 68 • Модула-2 • Миранда • Hope

Эзотерические

HQ9+/HQ9++ • INTERCAL • Brainfuck • Brainfork • Befunge • Malbolge • Piet • Spoon • Unlambda • Whitespace • FALSE • LOLCODE

Визуальные

G (LabVIEW) • Microsoft VPL • Sikuli • VisSim • Алиса • ДРАКОН • Скретч

 Просмотр этого шаблона Свободное и открытое программное обеспечение
Главное

Копилефт • СПО (Определение • Критерии Debian • Сообщество • Движение) • Gratis versus libre • Сравнение хостингов СПО • Открытое ПО (Определение) • Определение свободных произведений культуры • Список FOSS-пакетов • Дистрибутив Linux

История

GNU • Linux • Mozilla (Application Suite • Firefox • Thunderbird)

Организации

ASF • AOSP • Blender Foundation • Eclipse Foundation • FreeBSD Foundation • freedesktop.org • FSF • FSMI • GNOME Foundation • Проект GNU • Google Code • KDE e.V. • Linux Foundation • Mozilla Foundation • OSGF • OSI • ReactOS Foundation • Software Freedom Conservancy • SourceForge • Symbian Foundation • The Document Foundation • Xiph.Org • XMPP Standards Foundation • X.Org Foundation

Лицензии

Apache • Artistic • Beerware • BSD • GNU GPL • GNU LGPL • ISC • MIT • MPL • Ms-PL/RL • zlib • Public domain / CC0 • WTFPL • Лицензии, одобренные FSF • Пермиссивные лицензии • Разнообразие лицензий

Проблемы

Безопасность (англ.) • Блоб • Конфликт SCO — Linux • Программные патенты • DRM • Тивоизация • Trusted Computing • Графическое оборудование и СПО

Прочее

Сообщество • Форк • Microsoft Open Specification Promise • Сравнение open source и закрытых исходников • Проприетарное ПО • Собор и Базар • Ради удовольствия • Revolution OS

Эта статья входит в число избранных

Python — это высокоуровневый язык программирования, который используется в различных сферах IT, таких как машинное обучение, разработка приложений, web, парсинг и другие.

В 2019 году Python стал самым популярным языком программирования, обогнав Java на 10%. Это обусловлено многими причинами, одна из которых — высокая оплата труда квалифицированных специалистов (около 100 тысяч долларов в год).

Язык программирования Python

Различные языки программирования обычно доминируют в какой-то отрасли (или нескольких), для работы в которой они хорошо подходят. Но это не значит, что программист ограничен использовать строго определённый инструмент, поэтому любой язык общего назначения, такой как Python, может применять для создания чего-угодно.

Python смог захватить малую часть рынка веб-разработки, иногда используется для написания десктопных приложений и, конечно, тотально доминирует в сфере машинного обучения. Кроме того, на нём создаётся много прототипов, которые позволяют быстро набросать функционал и внешний вид будущего проекта.

Происхождение названия

Автор языка Python назвал его в честь британского комедийного шоу «Monty Python», которое было популярно в начале 1970-х годов.

Это телешоу позволяло автору расслабиться и отвлечься от разработки языка. Однако, несмотря на настоящее происхождение названия, для людей более очевидно связывать Python со словом «змея». Этому также способствует логотип, на котором изображена рептилия.

И хотя создатель языка не раз говорил, что название никак не связано со змеями, повлиять на мнение общества так и не удалось.

Питон или Пайтон?

Будь то название британского телешоу или английское звучание слова «змея», Python правильно произносить, как Пайтон. Однако, около 80% Российского сообщества привыкли использовать слово «Питон».

Нельзя сказать, что однозначно правильно использовать один из вариантов, многие названия адаптируются под произношения конкретного языка, а изменить сложившиеся привычки общества очень сложно. Однако, вариант названия «Питон» уместно употреблять только в разговоре с русскоязычными собеседниками, потому что на любой международной конференции значение слова «Питон» просто не поймут, ведь в английском языке его нет, есть только «Python (Пайтон)».

Логотип

На логотипе изображены две змеи, образующие квадрат с выпуклым центром, это часто вводит в заблуждение пользователей, вынуждая ассоциировать название языка с рептилией.

Логотип создал брат автора, Юст ван Россум — программист и шрифтовой дизайнер. Он разработал как дизайн логотипа (две змеи), так и шрифт текста Flux Regular.

История создания

Язык начал разрабатывать программист, Гвидо ван Россумом, в конце 1980-х. На тот момент он работал в центре математики и информатике в Нидерландах.

Гвидо ван Россум увлекался работой с «железками» ещё со школьных лет, и хотя он не находил поддержки и одобрения у своих сверстников, это не помешало ему самостоятельно разработать язык программирования.

Россум работал над Python в свободное время, в качестве основы он взял язык программирования ABC, в разработке которого когда-то участвовал.

Этапы истории языка программирования Python:

  • В феврале 1991 исходный код языка был опубликован на alt.sources. Уже тогда язык придерживался объектно-ориентированного подхода, мог работать с классами, наследованием, функциями, обработкой исключений и всеми основными структурами данных.
  • В 2000 году вышла в релиз вторая версия Python. В неё добавили много важных инструментов, включая поддержку Юникода и сборщик мусора.
  • 3 декабря 2008 в релиз вышла третья версия Python, которая является основной до сих пор. Многие особенности языка были переделаны и стали несовместимы с предыдущими версиями. И хотя функциональность третьей версии ничем не уступает второй, развитие языка разделилось на две ветки. Кто-то продолжал использовать Python 2, чтобы поддерживать старые проекты, кто-то полностью перешёл на третью версию.

Дату смерти второй версии установили на 2015 год, однако, боясь не успеть перенести весь существующий код на Python 3, время жизни Python 2 продлили жизнь до 2020 года.

Python — простой язык

Синтаксис Питона всегда выделял его на фоне других языков программирования. Он не страдает избыточностью, схожесть синтаксиса с обычным английским позволяет понять код даже обычному пользователю, кроме того, программист пишет меньше строк кода, потому что нет необходимости использовать символы: «;», «{», «}». Вложенность обозначается отступами, что повышает читаемость кода и приучает новичков к правильному оформлению.

Простота отчасти обусловлена тем, что Питон написан на основе языка ABC, который использовался для обучения программированию и повседневной работы людей, не являющихся программистами.

Python упрощает написание кода и делает разработку быстрой, всё потому что он обладает следующими особенностями:

  • Динамическая типизация. Программисту не нужно указывать тип переменных, язык присвоит его сам. Операнды разных типов, участвующие в одной операции, автоматически приводится к нужному по определённым правилам.
  • Удобный возврат нескольких значений функцией. Их можно перечислить через запятую и они автоматически преобразуются в список. Чтобы вернуть массив из функции, достаточно написать «return имя_массива«. Не нужно выделять память и передавать указатели в функцию.
  • Автоматическое выделение памяти. Программисту не нужно самостоятельно выделять память под что-либо. С одной стороны это уменьшает контроль программиста над программой, с другой, разработка значительно ускоряется.
  • Сборщик мусора. Если объект становится бесполезным (на него перестаёт что-либо ссылаться), он автоматически удаляется сборщиком мусора. Сборщик мусора позволяет оптимизировано использовать память и не удалять бесполезные объекты вручную.
  • a, b = b, a. Эта строка меняет местами значения переменных, теперь то, что было в a, находится в b и наоборот. Такое возможно, потому что Питон сначала рассматривает переменные справа от знака «=» и помещает их в список, то же он делает с элементами слева от «=», затем он связывает каждый элемент правого списка с левым. Таким способом можно обменивать значения не только двух переменных, но и трёх, пяти и так далее.
  • Привязка типа данных. Тип данных привязан к значению, а не к переменной. То есть значение — это какой-то объект с атрибутами, которые определяют его тип и другие характеристики, а переменная — просто ссылка на этот объект. Такой подход позволил обойтись без явного определения типов и значительно упростил повторное присваивание значения переменной (особенно, если тип нового значения отличен от начального).
  • Цикл for. Работать с массивами, списками и другими контейнерами в Питоне просто и удобно. Когда необходимо перебрать все его элементы, конструкция выглядит так: «for x in контейнер:» (перебор идёт от 0 до последнего элемента, его индекс можно обозначить как  -1). Если нужно, чтобы прошло определённое количество циклов, пишут так: «for x in range(1,9):» (цикл будет выполняться со значениями x от 1 до 8).
  • Интерпретируемый язык. Написанный код не нужно компилировать, достаточно запустить его и получить результат. Более того, можно работать в интерактивном режиме и получать результат буквально после каждой операции.

Python сочетает в себе и простоту и мощный инструментарий. Его можно использовать для создания прототипа практически любой программы.

Чтобы ускорить разработку, часть программы (обычно не сильно влияющую на скорость работы) пишут на Питоне.

Именно благодаря простоте этот язык программирования смог занять доминирующее место в сфере машинного обучения. Люди, так или иначе связанные с наукой, предпочитают не тратить много времени на такие вещи, как написание кода, поэтому Python отлично подошёл для реализации поставленных перед ними задач.

Пример кода:

def what_bigger(a, b):
    if a > b:
        print(a, "больше чем", b)
    else:
        print(b, "больше чем", a)
def max_arr(arr):
    max = 0
    for x in arr:
        if arr[x-1] > max:
            max = arr[x]
    return max
def arr_to_2arr(array):
   array = array * 2
   return array
print("Простая программа на языке Пайтон")
a = [1,2,3,6,1,6]
what_bigger(1,5)
r1 = max_arr(a)
r2 = arr_to_2arr(a)
print("Return функции max_arr - ", r1)
print("Return функции arr_to_2arr - ", r2)

Результаты выполнения:

Простая программа на языке Пайтон
5 больше чем 1
Return функции max_arr -  6
Return функции arr_to_2arr -  [1, 2, 3, 6, 1, 6, 1, 2, 3, 6, 1, 6]

Популярность

Несмотря на то что языку уже более 29 лет, он популярен среди программистов всего мира. Python используется почти в каждом среднем или крупном проекте, если не как основной инструмент разработки, то как инструмент для создания прототипа или написания какой-то его части.

Он собрал вокруг себя огромное сообщество разработчиков, по результатам опроса на Stackoverflow Python занял 7 место с почти 39% голосов.

Индекс TIOBE

Этот индекс показывает популярность языков программирования, информация обновляется каждый месяц. Оценка популярности основывается на количестве квалифицированных специалистов по всему миру. Для анализа также используются все популярные поисковые системы. Важно понимать, что индекс не показывает лучший язык программирования, он лишь показывает их популярность.

Согласно индексу TIOBE Python занял 3 место с 9-ю процентами популярности. Он уступил лишь языкам Java и C.

PYPL

Этот индекс основывает на количестве поисковых запросов, касающихся учебных материалов по языку.

По данным с PYPL Python занимает первое место с более чем 29% популярности и на 10% обгоняет Java.

statista.com

Сервис предоставляет различные виды статистики, среди которых — популярность языков программирования.

Согласно опросу более 85 тысяч респондентов, Python занимает 4 место, уступив таким языкам, как JS, языки разметки и SQL.

Скорость работы

Программисты часто задаются вопросом: «Не приведёт ли использование Python к снижению производительности?». Не стоит делать какие-либо выводы без детального разбирательства.

Если рассматривать только скорость выполнения кода, то становится ясно, что Python уступает другим языкам программирования, таким как C. Действительно, динамическая типизация, интерпретируемость и другие особенности, облегчающие работу программиста, приводят к ухудшению производительности.

Однако в современном IT важна не только скорость работы программ, но и скорость их разработки. Разработка, тестирование, отладка и поддержка — всё это стоит немалых денег. И если в скорости работы программ Python уступает, то в скорости разработки ему нет равных.

Для любого проекта важно выбрать правильный инструмент и лучшую реализацию. Улучшая одно, программист жертвует другим, его задача — найти идеальный баланс, ориентируясь на конкретное техническое задание.

Python позволяет писать достаточно быстрый код, однако может подводить в некоторых «узких» местах, которые и оказывают наибольшее влияние на производительность всего проекта. Чтобы не затянуть разработку и получить на выходе программу, работающую на высокой скорости, её структуру проектируют так, чтобы соотношение «быстродействие/время разработки» было максимальным.

Программисты используют приёмы, позволяющие нивелировать недостаточную скорость выполнения программ на Pyton:

  • Встраивание кода на С. С помощью такого приёма можно заметно повысить производительность, обычно на С пишут те участки кода, которые обрабатывают много запросов в единицу времени. Например, функцию, которая получает данные из одной базы данных, обрабатывает их и отсылает в другую, лучше написать на языке С, если объем проходящей информации достаточно большой.
  • Использование лучших алгоритмов и инструментов. Одну и ту же задачу можно решить по-разному. Во-первых, программист должен выбрать наиболее эффективный алгоритм, обеспечивающий лучшую производительность, например, для поиска элемента в отсортированном массиве можно перебирать его от начала до конца, в лучшем случае (элемент в начале массива) поиск выполнится быстро, в худшем (элемент в конце массива) — медленно. Эффективнее использовать методом деления пополам (двоичный поиск), который найдёт нужный элемент за минимальное количество итерация в массиве любой длины. Во-вторых, для реализации задачи нужно подбирать правильные инструменты. Например, если последовательность элементов строго определена и не изменяется, лучше использовать кортеж, а не список. Он требует меньше места, обрабатывается быстрее и защищён от случайных изменений.
  • Оптимизация интерпретатора. Скорость программ на Python сильно зависит от работы интерпретатора, одни конструкции работают быстрее, другие медленнее.
    Быстрее Медленнее
    a, b = c, d a = c; b = d
    a < b < c a < b and b < c
    not not a bool(a)
    a = 5 a = 2 + 3
    код, встроенный в цикл вызов функции с кодом в цикле
  • Модули для тестирования. Чтобы определить какие участки кода сильно снижают общую производительность, программист может использовать специальные модули для тестирования. Таким образом, можно понять, какой код нужно оптимизировать или заменить на код на языке C.
  • Готовые инструменты. Для большинства задач уже разработаны эффективные решения. Лучше использовать готовый, отлаженный код какой-либо библиотеки, чем писать своё решение с нуля, которое 100% будет не таким эффективным.

Что можно написать на Python

Питон используют во многих областях программирования, поэтому на нём можно написать что угодно.

Back-end сайта

Для разработки серверной части сайта используются фреймворки: Django и Flask. Они превращают Python в серверный язык программирования, возможности которого не уступают другим популярным инструментам.

Программист легко может работать со связями URL адресов, обращениями к базам данных и созданием HTML файлов, которые пользователь видит в браузере.

И хотя большую часть рынка серверной веб-разработки контролирует PHP, всё больше программистов отдают своё предпочтение разработке на Python.

Blockchain

Блокчейн — это последовательная цепочка блоков, где каждый блок содержит информацию и всегда связан с предыдущим. Технология может использоваться в любых сферах и особенно популярна в финансовой сфере и в сфере криптовалюты биткоин.

Блокчейн совмещает в себе защищенность и открытость информации, он позволяет получить доступ к данным из любой точки мира, в то же время его практически невозможно взломать, данные хранятся на каком-то главном компьютере, а взламывать каждый блок очень затратно и долго.

На Питоне без проблем можно написать полноценный блокчейн, если его грамотно спроектировать, то он не будет отставать по производительности от решений на других языках.

Бот

Это программа, автоматически выполняющая какие-либо действия в заданное время или в ответ на поступивший сигнал. Боты могут примитивно симулировать поведение человека, поэтому они часто используются для работы в технической поддержке (чат-боты), поиска информации в интернете (поисковые боты), имитации действий человека или другого существа в виртуальном мире (компьютерные игры).

Python позволяет быстро создавать многофункциональных и относительно умных ботов. Важно понимать, что боты — это не простая программа в 500 строк кода. Заказ на создание бота для бизнеса может стоить несколько миллионов. Цена обусловлена тем, что спроектировать бота, которого будет сложно отличить от человека, очень сложно. Необходимо предусмотреть множество вариантов диалогов, проанализировать поведенческие факторы человека и внедрить их в программу. Проще говоря, из машины, понимающей только нули и единицы, нужно сделать примитивный «мозг».

База данных

База данных — это информация, систематизированная по общим признакам и специальным правилам. В любом большом проекте используются базы данных, в них хранится информацию о пользователях, изменениях в программе и т. д.

Систему управления базами данных можно написать на Python.

Дополненная реальность

Дополненная реальность дополняет физический мир с помощью виртуальных технологий. То есть виртуальные объекты проецируются на реальное окружение, и имитируют признаки и поведение обычных физических объектов.

Дополненную реальность можно наблюдать в фильмах, таких как Железный Человек. В реальном мире она используется, например, в боевых истребителях (система прицеливания).

Работа дополненной реальности основана на взаимодействии с метками. Электронное устройство получает информацию и анализирует окружающее пространство, с помощью компьютерного зрения он «понимает», что человек видит перед собой. Затем устройство накладывает на реальный мир «виртуальный слой».

Профессиональные приложения дополненной реальности стоят около полумиллиона рублей, проектировать и писать их не просто, в процесс разработки привлекаются различные специалисты, от 3D-дизайнеров до программистов.

Python является отличным инструментом для создания проектов дополненной реальности.

BitTorrent клиент

BitTorrent — уникальная технология, позволяющая быстро обмениваться большими объёмами данных через интернет.

До 6 версии клиент BitTorrent был полностью написан на Python. И хотя позже он был полностью переписан на C++, это показывает, что Pyton можно использовать для реализации задач такого рода.

Нейронная сеть

Понятие «нейронная сеть» пришло в программирование из биологии. В биологии нейронная сеть — это последовательность нейронов, соединённых между собой. Программно созданные нейронные сети способны не только анализировать и запоминать информацию, но и воспроизводить её из памяти.

Они используются для решения сложных задач, где необходимы вычисления, которые совершаются человеческим мозгом.. Обычно нейронные сети используются для классификации чего-то по признакам, прогнозирования, распознавания, например, человека по фото или видео.

Python — явный лидер в сфере разработки нейронных сетей. Помимо стандартных инструментов он обзавёлся огромным количеством библиотек для машинного обучения.  Благодаря этому на Питоне можно относительно быстро написать даже большой и сложный проект.

Парсер

Это ПО для сбора и обработки информации. Можно парсить такую информацию, как курс доллара, а можно следить и анализировать изменения акций различных компаний.

Парсер можно написать на многих языках, Python — не единственный хороший инструмент для этого, однако его возможностей вполне достаточно, чтобы написать приложение, собирающее информацию быстро и эффективно.

Калькулятор

Это задание выполнял, пожалуй, каждый студент факультета информатики. Калькулятор можно написать на любом языке программирования, и Python — не исключение.

Важно понимать, что от калькулятора требуется 100% точность расчёта. Поэтому все ошибки, связанные с округлением и двоичным представлением чисел могут быть критичными. Однако для Python написаны библиотеки, полностью решающие данную проблему.

Игра

На Питоне не создаются большие игры, он либо используется для разработки прототипа, либо для реализации какой-то части (например, серверной логики игры или системы моддинга).

Для написания небольшого проекта можно воспользоваться библиотекой Pygame, которая даёт все необходимые инструменты для создания небольшой 2D игры.

Текстовый редактор

Он может использоваться для написания и редактирования не только текста, но и кода. Многие текстовые редакторы способны определять используемый язык программирования и подсвечивать его синтаксис. Некоторые из них и вовсе напоминают полноценную IDE.

Написать небольшой текстовый редактор не сложно, однако для создания крупного проекта понадобиться много знаний и сил. Несмотря на быстроту разработки на Python, создание текстового редактора с достаточным по современным меркам функционалам — это работа для целой команды программистов.

Язык программирования

Компьютер — это всегда многоуровневое устройство. Используя самый сложный и неудобный инструмент, программист создаёт более простой, а из него ещё более простой. Хотя это понижает производительность (если бы всё было написано на ассемблере, программы работали бы в десятки или даже сотни раз быстрее), но также и значительно уменьшает время разработки, её удобство и сложность.

Python достаточно высокоуровневый язык, поэтому писать на его основе ещё один язык программирования нецелесообразно, хотя и можно. Полезнее будет разработать интерпретатор для самого Python или другого языка программирования. Также можно создать компилятор (программа, конвертирующая код языка программирования в машинный).

Подобные проекты не подойдут для коммерческих целей, но создание своего компилятора, интерпретатора или языка даст много бесценного опыта.

Содержание:развернуть

  • О языке
  • История создания

  • Какие задачи удобно решать на Python

  • Типизация

  • Производительность

  • GIL

  • Плюсы и минусы Python
  • Синтаксис
  • Пример кода

Python — высокоуровневый язык программирования общего назначения. Он имеет минималистичный синтаксис и направлен на повышение читаемости кода (и в целом на повышение производительности разработчика).

В статье рассмотрим основные особенности языка, его плюсы и минусы, базовый синтаксис + разберём простой пример кода.

О языке

По-русски Python произносится как — «пайтон», но более распространенная версия произношения — «питон». Язык поддерживает несколько парадигм программирования: объектно-ориентированное, функциональное, структурное, императивное и аспектно-ориентированное.

Основная реализация языка Python — CPython. Написана на C.

История создания

Разработку Python начал Гвидо ван Россум в декабре 1989 года. Для ОС Amoeba требовался расширяемый скриптовый язык. На досуге, Гвидо начал писать Python, позаимствовав некоторые наработки из языка ABC.

Версия Python 2.0 была выпущена 16 октября 2000 г., а первая обратно-несовместимая версия Python 3.0 — 3 декабря 2008 г.

Историю релизов Python можно посмотреть тут.

Какие задачи удобно решать на Python

Основной упор в Python делается на скорости написания кода (а не на скорости выполнения кода, как например в языках С и C++). Поэтому в первую очередь Python удобно использовать там, где нужно быстро написать что-то работающее.

Все чаще Python используется для анализа данных, как в науке, так и коммерческой сфере. Этому способствует простота языка и большое разнообразие открытых библиотек.

Другая область применения, для которой хорош Питон — системное администрирование и DevOps. На это есть как минимум 3 причины:

  • благодаря своей простоте, системному администратору не так сложно выучить этот язык и начать им пользоваться;
  • огромный выбор библиотек;
  • python входит в состав большинства дистрибутивов Linux.

О других сферах применения Python читайте тут:

Типизация

Python является языком с полной динамической типизацией и автоматическим управлением памятью. Динамическая типизация означает, что тип переменной определяется только во время исполнения.

С одной стороны, динамическая типизация упрощает написание программ. Но с другой, имеет ряд недостатков — повышается риск ошибиться с типами и снижается производительность программы.

В «Питоне» реализованы встроенные типы, например:

  • булевый тип;
  • строка;
  • целое число произвольной точности;
  • число с плавающей запятой;
  • комплексное число.

Также есть и готовые коллекции:

  • списки;
  • кортежи (неизменяемые списки);
  • словари;
  • множества.

Добавить новый тип можно написав свой класс или определив новый тип в модуле расширения.

Подробнее о типах данных в Python:

Производительность

По производительности Python относительно медленный язык (по сравнению с C, Go, Java). Его скорость выполнения схожа с другими интерпретируемыми языками (PHP, Ruby). Однако возможность компиляции python-кода в байт-код позволяет добиться большей производительности.

Основные причины, из-за которых Python «медленный»:

  • GIL (глобальная блокировка интерпретатора).
  • Динамическая типизация.
  • Python это интерпретируемый, а не компилируемый язык.

Несмотря на это, в большинстве задач гораздо важнее быстро получить результат, нежели ускорить выполнение программы. Особенно это важно для бизнеса или стартапа, где критически важно быстро выпустить продукт в production и начать зарабатывать.

Если для задачи критична производительность, используйте последнюю версию Python. Или присмотритесь к PyPy.

GIL

Global Interpreter Lock — это глобальная блокировка интерпретатора Python. GIL накладывает ограничение на потоки — нельзя использовать несколько процессоров одновременно. Тем самым GIL помогает избежать конфликтов при одновременном обращении разных потоков к одним и тем же участкам памяти.

Многие разработчики против GIL в Python-е, однако создатель проекта Гвидо ван Россум заявляет, что GIL не так уж и плох, и убирать его из CPython`а он не планирует.

Плюсы и минусы Python

👍 Плюсы:

  • низкий порог вхождения;
  • язык широкого применения;
  • минималистичный синтаксис;
  • кроссплатформенность;
  • открытый исходный код интерпретатора CPython;
  • наличие дружелюбного, отзывчивого сообщества;
  • поддержка многих IDE;
  • огромное количество библиотек;
  • входит в поставку большинства дистрибутивов Linux.

👎 Минусы:

  • низкая производительность;
  • отсутствие статической типизации.

Синтаксис

Программный код на Python организовывается в функции и классы. Они объединяются в модули, а модули могут быть объединены в пакеты.

Синтаксис Python прост и лаконичен, что делает его удобным для изучения.

Отличительная черта языка — использование отступов для выделения блоков кода и управляющих структур

В отличие от других языков программирования, отступы в Python напрямую влияют на вложенность выражений. Именно эта особенность положительно влияет на читаемость Python-кода.

Пример кода

Простой пример кода — классический «Hello, World!»:

print("Hello, World!")

Попробуем разобрать более сложный код. Дано: 10 рандомных чисел. Необходимо отсортировать их в порядке возрастания.

from random import randint

def get_numbers(count):
numbers = []
for i in range(count):
numbers.append(randint(1, 99))
return numbers

my_numbers = get_numbers(10)
my_numbers.sort()

print(my_numbers)

Разберем код:

  • В первой строке мы импортируем функцию randint из модуля random. Эта функция нужна нам для генерации случайных целых чисел (модуль random входит в стандартную библиотеку Python, отдельно его устанавливать не нужно).
  • get_numbers — это функция. Об этом говорит инструкция def В круглых скобках находится аргумент этой функции — count.
  • Инструкцией get_numbers(10) мы вызываем функцию. Аргумент count теперь равен 10. Count в нашем случае это количество чисел, которое мы хотим сгенерировать.
  • Инструкция for i in range(count) — это цикл (перебор). В нашем случае от 0 до 9.
  • randint(1, 99) вернет рандомное (случайное) число от 1 до 99.
  • Метод append добавит рандомное число в список numbers.
  • И так 10 раз.
  • Когда цикл закончится, функция вернет список из 10-ти рандомных чисел. Этот список мы присвоим переменной my_numbers.
  • Далее вызовем метод sort который отсортирует список по возрастанию.
  • А функция print выведет наш отсортированный список на экран (в консоль).

Результат выполнения данного скрипта выглядит следующим образом:

[20, 27, 29, 36, 53, 74, 75, 81, 87, 93]


В данной статье мы рассмотрели лишь верхушку айсберга под названием Python. Изучив этот язык вы удивитесь, насколько просто и лаконично может выглядеть код и как просто его писать.

Сегодня поговорим о том, что такое Python, чем же он хорош и почему его сломя голову бросаются учить тысячи начинающих и опытных IT-специалистов.

Что такое Python?

Python (произносится как «пайтон», но многие говорят «питон») – это язык программирования общего назначения, который широко применяется в различных областях: от создания банальных веб-страниц до систем управления роверами на других планетах.

Язык скриптовый, он универсален и является самым популярным языком программирования в мире (по данным издания Tiobe, составляющего топы наиболее востребованных языков). 

Комьюнити теперь в Телеграм

Подпишитесь и будьте в курсе последних IT-новостей

Подписаться

Что пишут на Python?

Что вздумается. Любой программный продукт, независимо от сложности и специфики, можно создать на Python и одном из сотен фреймворков, разработанных для него. 

Веб-разработка

Для создания веб-приложений и сайтов используются сторонние библиотеки в духе Pyromid, Flask, Django и десятков других, помогающих заменить PHP и JavaScript.

На Python даже полноценные системы управления данными пишут, которые впоследствии становятся аналогами мастодонтов наподобие WordPress и Drupal. Также на Python создают вспомогательные инструменты для работы с вебом, например скрапперы, собирающие информацию с чужих веб-страниц. 

Десктопная разработка

На Python создавались мощные приложения и инфраструктуры, например редактор изображений GIMP, магазин приложений в операционной системе Ubuntu, редакторы 3D-графики, bittorrent-сети и т.п. Список можно продолжать долго.

Также Python нередко становится составной частью подобных приложений. Например, Sublime Text написан на С++, а расширения и плагины для него написаны на Python. 

Так что Python можно нередко встретить в совершенное неожиданных местах. 

Мобильная разработка

Приложения для iOS и Android создаются на сотнях различных языков, и Python в их числе. Чаще, конечно, это касается их серверной составляющей, потому что за интерфейс отвечают более распространенные фреймворки либо какие-то узкоспециализированные технологии. Тем не менее за бэкенд (то есть внутреннюю логику программы) часто отвечает именно Python. 

Видеоигры

Python используется в разработке игр как раз из-за возможности создавать с помощью языка надежные и продуманные скрипты. Они отвечают за движение персонажей, выполнение каких-либо действий, переход от одного события в игре к другому и так далее. 

Постер World Of Tanks

Поэтому Пайтон можно встретить под капотом множества хитовых игр, во многие из которых вы наверняка успели поиграть (тот же крайне популярный World of Tanks).

Но при желании язык можно задействовать и для создания графических интерфейсов. 

ОС 

Конечно, Windows или Linux на Python не написаны (хотя язык во многие из этих ОС встроен по умолчанию), но подсистемы для банкоматов или мини-компьютеров по типу Raspberry Pi часто создаются именно при помощи Пайтона. То же касается станков, автоматизированых механизмов для управления температурой и т.п. 

Можете вспомнить об этом, когда в следующий раз будете снимать деньги в банкомате Сбербанка.

Где еще применяется Python? 

У Пайтона много лиц, и часть из них окучила всю науку. Существуют инструменты в духе NumPy и Matplotlib, которые всерьез используются в научной сфере. Специалисты из NASA и других крупных корпораций задействуют скрипты Python для серьезных вычислений. 

Математики и физики любят Python всей душой, и для них это один из наиболее часто используемых языков. Специалисты пишут при помощи Пайтона полнофункциональные нейросети, программируют поведение роботов, создают мощнейшие системы анализа данных в интернете, способные обрабатывать колоссальные объемы текста и цифр. 

Ровер на Марсе

Очень много «серьезной» работы выполняется при помощи Python. Что уж говорить, если этот язык помогает нам не только на Земле, но и вовсю оккупирует нашего соседа. 

Почему Python так хорош?

Python – это скриптовый язык с довольно простым синтаксисом. Новичкам он дается легче, чем другие языки, и специалисты уже успели адаптировать его под огромнейший спектр задач. Все остались довольны, ведь структура и логика в Python удовлетворяет потребностям всех категорий разработчиков, независимо от их навыков и сферы деятельности.

При разработке на Питоне в большинстве случаев требуется писать куда меньше кода, чем при работе с его конкурентами. Сам синтаксис визуально чище и предельно логичен. 

Другие преимущества:

  • Язык работает на всех платформах, поэтому с помощью него можно разрабатывать программы на чем угодно и под что угодно. 
  • У языка колоссальная поддержка и действительно внушительная коллекция дополнений от сторонних разработчиков.
  • У него динамическая типизация (можно передавать в функции любой тип данных, предварительно его не указывая).
  • Он интерпретируемый, что позволяет раньше находить ошибки в ПО (до его полной сборки в полноценное приложение). 

Также Пайтон славится своей системой оповещения об ошибках. Язык очень ясно дает понять, где и почему возникла ошибка. В отличие от того же C++.

Принцип оповещения об ошибках в Python и C++

Основные недостатки Python

  1. Python медлительный. Он способен на многое, но это многое он делает медленнее конкурентов.

  2. Python не особо адекватно распоряжается памятью и часто «съедает» больше ресурсов, чем для решения тех же задач использовали бы JavaScript или C.

  3. Python строго привязан к системным библиотеками. Отсюда возникают сложности при попытке использовать язык на новых программных платформах. 

Какие приложения написаны на Python?

Python лег в основу десятков крупнейших программных продуктов на планете. В их числе Instagram – серверная часть приложения, Google, Spotify, Netflix, Uber, Dropbox, Pinterest, Reddit и т.п. 

Как видите, ваши любимые сайты и приложения используют этот язык, что недвусмысленно намекает на ваши безграничные возможности при владении Пайтоном.

Вакансии и зарплаты 

Питон – востребованный язык программирования, и найти работу, зная его, не так сложно. Вакансий море: от простейших должностей на стажировке (делать базовые скрипты) до работы в крупнейших корпорациях планеты (создавать сложнейшие инфраструктуры).

Зарплата варьируется в зависимости от предстоящей работы. Новички получают от 40 тысяч рублей. Но есть и совершенно впечатляющие ставки – от 1 000 000 рублей в месяц. Работы много как в России, так и за ее пределами. 

Где учиться?

Пайтону учат почти все школы в духе Skillbox или Нетологии. Хорошие преподаватели и достойная учебная программа доступна на Hexlet.io. Сотни занятий проводятся в Coursera и Udemy. Если нет желания платить, то бескорыстные индусы с YouTube вам в помощь. На площадке тысячи обучающих роликов, многие из которых получше лекций от профессоров. 

К тому же у языка есть полноценная документация, которая лежит на официальном сайте и доступна всем желающим. Информации по языку там в избытке. 

Вместо заключения

Python – это универсальный, перспективный и относительно несложный в изучении язык. Идеальный выбор для тех, кто хочет попробовать IT-разработку, но еще не знает, какого рода продукты хочет создавать.

Понравилась статья? Поделить с друзьями:
  • Ягами лайт на английском как пишется
  • Язык пламени костра как пишется
  • Явятся как пишется
  • Язык на турецком как пишется слово
  • Явственный сон как пишется