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

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; 31 years ago[2]
Stable release

3.11.1[3] Edit this on Wikidata
/ 6 December 2022; 33 days ago

Preview release

3.12.0a3[3] Edit this on Wikidata
/ 6 December 2022; 33 days ago

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

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.[33][34]

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.[35] Python 2.0 was released in 2000 and introduced new features such as list comprehensions, cycle-detecting garbage collection, reference counting, and Unicode support. 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.[36]

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

History

Python was conceived in the late 1980s[41] 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,[42] capable of exception handling (from the start plus new capabilities in Python 3.11) and interfacing with the Amoeba operating system.[12] Its implementation began in December 1989.[43] 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.[44] In January 2019, active Python core developers elected a five-member Steering Council to lead the project.[45][46]

Python 2.0 was released on 16 October 2000, with many major new features.[47] Python 3.0, released on 3 December 2008, with many of its major features backported to Python 2.6.x[48] and 2.7.x. Releases of Python 3 include the 2to3 utility, which automates the translation of Python 2 code to Python 3.[49]

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.[50][51] No further security patches or other improvements will be released for it.[52][53] Currently only 3.7 and later are supported. In 2021, Python 3.9.2 and 3.8.8 were expedited[54] as all versions of Python (including 2.7[55]) had security issues leading to possible remote code execution[56] and web cache poisoning.[57]

In 2022, Python 3.10.4 and 3.9.12 were expedited[58] and 3.8.13, and 3.7.13, because of many security issues.[59] 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) will only receive security fixes going forward.[60] 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.[61][62]

As of November 2022, Python 3.11.0 is the current stable release and among the notable changes from 3.10 are that it is 10–60% faster and significantly improved error reporting.[63]

Python 3.12 (alpha 2) has improved error messages.

Removals from Python

The deprecated smtpd module has been removed from Python 3.12 (alpha). And a number of other old, broken and deprecated functions (e.g. from unittest module), classes and methods have been removed. The deprecated wstr and wstr_ length members of the C implementation of Unicode objects were removed,[64] to make UTF-8 the default in later Python versions.

Historically, Python 3 also made changes from Python 2, e.g. changed the division operator.

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

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]

Python users and admirers, especially those considered knowledgeable or experienced, are often referred to as Pythonistas.[81][82]

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

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.[84] Thus, the program’s visual structure accurately represents its semantic structure.[85] 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.[86]

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[87]); 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[88]
  • 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 statement, 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.[89][90] However, better support for coroutine-like functionality is provided by extending Python’s generators.[91] 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.[92]

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.[93] 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.[94][95]
  • The syntax :=, called the «walrus operator», was introduced in Python 3.8. It assigns values to variables as part of a larger expression.[96]
  • 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[97] (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.[98]
  • 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.[99]
  • 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}'.[100]
  • 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».[100]
    • 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).[101] 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.[102]

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,[103] current Python versions only support the semantics new style.

The long-term plan is to support gradual typing.[104] 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.[105]

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

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[107] 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[108] 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 @ .[109] 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:[110]

  • 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.[110]

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

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

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.[114] 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.[115]

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

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.[118][119]

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[120] 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,[121] 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[122]—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[123] 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.[124]

Implementations

Reference implementation

CPython is the reference implementation of Python. It is written in C, meeting the C89 standard (Python 3.11 uses C11[125]) with several select C99 features (With later C versions out, it is considered outdated.[126][127] 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++.[128][129]) It compiles Python programs into an intermediate bytecode[130] which is then executed by its virtual machine.[131] 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;[132][133] 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.[134] Platform portability was one of its earliest priorities.[135] (During Python 1 and 2 development, even OS/2 and Solaris were supported,[136] but support has since been dropped for many platforms.)

Other implementations

  • PyPy is a fast, compliant interpreter of Python 2.7 and 3.8.[137][138] Its just-in-time compiler often brings a significant speed improvement over CPython but some libraries written in C cannot be used with it.[139]
  • 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.[140]
  • MicroPython and CircuitPython are Python 3 variants optimized for microcontrollers, including Lego Mindstorms EV3.[141]
  • Pyston is a variant of the Python runtime that uses just-in-time compilation to speed up the execution of Python programs.[142]
  • 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.[143]

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,[144] 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.[145]

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,[146] Transcrypt[147][148] and Pyjs (latest release in 2012) compile Python to JavaScript.
  • Cython compiles (a superset of) Python 2.7 to C (while the resulting code is also usable with Python 3 and also e.g. C++).
  • Nuitka compiles Python into C.[149]
  • Numba uses LLVM to compile a subset of Python to machine code.
  • Pythran compiles a subset of Python 3 to C++ (C++11).[150][151][152]
  • RPython can be compiled to C, and is used to build the PyPy interpreter of Python.
  • The Python → 11l → C++ transpiler[153] 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.[154][155][156]
  • 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»[157]) on the .NET Common Language Runtime.[158]
  • Jython compiles Python 2.7 to Java bytecode, allowing the use of the Java libraries from a Python program.[159]
  • 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.[160] Python’s performance compared to other programming languages is also benchmarked by The Computer Language Benchmarks Game.[161]

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

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.[164] In 2022, all issues and discussions were migrated to GitHub.[165] Development originally took place on a self-hosted source-code repository running Mercurial, until Python moved to GitHub in January 2017.[166]

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.[167]
  • 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.[168][169] Each major version is supported by bug fixes for several years after its release.[170]
  • Bugfix releases,[171] 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.[171]

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

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[173] need to be modified by then),[174] and added pattern matching to the language.[175]

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

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;[177] for example, the metasyntactic variables often used in Python literature are spam and eggs instead of the traditional foo and bar.[177][178] The official Python documentation also contains various references to Monty Python routines.[179][180]

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).[39] 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[181]).

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++».[182]

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

Uses

Python can serve as a scripting language for web applications, e.g., via mod_wsgi for the Apache webserver.[193] 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,[194][195] 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.[196] OpenCV has Python bindings with a rich set of features for computer vision and image processing.[197]

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

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,[203] Inkscape, Scribus and Paint Shop Pro,[204] 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.[205] It has also been used in several video games,[206][207] and has been adopted as first of the three available programming languages in Google App Engine, the other two being Java and Go.[208]

Many operating systems include Python as a standard component. It ships with most Linux distributions,[209] 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.[210][211]

Most of the Sugar software for the One Laptop per Child XO, developed at Sugar Labs since 2008, is written in Python.[212] 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[213] 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.[214]
  • Cobra uses indentation and a similar syntax, and its Acknowledgements document lists Python first among languages that influenced it.[215]
  • CoffeeScript, a programming language that cross-compiles to JavaScript, has Python-inspired syntax.
  • ECMAScript/JavaScript borrowed iterators and generators from Python.[216]
  • GDScript, a scripting language very similar to Python, built-in to the Godot game engine.[217]
  • Go is designed for the «speed of working in a dynamic language like Python»[218] and shares the same syntax for slicing arrays.
  • Groovy was motivated by the desire to bring the Python design philosophy to Java.[219]
  • Julia was designed to be «as usable for general programming as Python».[28]
  • Nim uses indentation and similar syntax.[220]
  • 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.»[221]
  • Swift, a programming language developed by Apple, has some Python-inspired syntax.[222]

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,[223] Erlang,[224] and Swift.[225]

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. ^ a b «Python 3.11.1, 3.10.9, 3.9.16, 3.8.16, 3.7.16, and 3.12.0 alpha 3 are now available». 6 December 2022. Retrieved 7 December 2022.
  4. ^ «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.
  5. ^ «PEP 483 – The Theory of Type Hints». Python.org. Archived from the original on 14 June 2020. Retrieved 14 June 2018.
  6. ^ «test — Regression tests package for Python — Python 3.7.13 documentation». docs.python.org. Retrieved 17 May 2022.
  7. ^ «platform — Access to underlying platform’s identifying data — Python 3.10.4 documentation». docs.python.org. Retrieved 17 May 2022.
  8. ^ «Download Python». Python.org. Archived from the original on 8 August 2018. Retrieved 24 May 2021.
  9. ^ Holth, Moore (30 March 2014). «PEP 0441 – Improving Python ZIP Application Support». Archived from the original on 26 December 2018. Retrieved 12 November 2015.
  10. ^ File extension .pyo was removed in Python 3.5. See PEP 0488 Archived 1 June 2020 at the Wayback Machine
  11. ^ «Starlark Language». Archived from the original on 15 June 2020. Retrieved 25 May 2019.
  12. ^ 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).
  13. ^ «Ada 83 Reference Manual (raise statement)». Archived from the original on 22 October 2019. Retrieved 7 January 2020.
  14. ^ 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.
  15. ^ 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.
  16. ^ 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.
  17. ^ 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
  18. ^ 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.
  19. ^ 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
  20. ^ 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.
  21. ^ 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.
  22. ^ «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.
  23. ^ «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.
  24. ^ «CoffeeScript». coffeescript.org. Archived from the original on 12 June 2020. Retrieved 3 July 2018.
  25. ^ «The Genie Programming Language Tutorial». Archived from the original on 1 June 2020. Retrieved 28 February 2020.
  26. ^ «Perl and Python influences in JavaScript». www.2ality.com. 24 February 2013. Archived from the original on 26 December 2018. Retrieved 15 May 2015.
  27. ^ 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.
  28. ^ 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 […]
  29. ^ 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.
  30. ^ 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.
  31. ^ 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.
  32. ^ Kuhlman, Dave. «A Python Book: Beginning Python, Advanced Python, and Python Exercises». Section 1.1. Archived from the original (PDF) on 23 June 2012.
  33. ^ «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.»
  34. ^ «PEP 206 – Python Advanced Library». Python.org. Archived from the original on 5 May 2021. Retrieved 11 October 2021.
  35. ^ 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.
  36. ^ 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.
  37. ^ «Stack Overflow Developer Survey 2022». Stack Overflow. Retrieved 12 August 2022.
  38. ^ «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.
  39. ^ 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.
  40. ^ «PYPL PopularitY of Programming Language index». pypl.github.io. Archived from the original on 14 March 2017. Retrieved 26 March 2021.
  41. ^ 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.
  42. ^ 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.
  43. ^ 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.
  44. ^ 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.
  45. ^ «PEP 8100». Python Software Foundation. Archived from the original on 4 June 2020. Retrieved 4 May 2019.
  46. ^ «PEP 13 – Python Language Governance». Python.org. Archived from the original on 27 May 2021. Retrieved 25 August 2021.
  47. ^ 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.
  48. ^ 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.
  49. ^ «2to3 – Automated Python 2 to 3 code translation». docs.python.org. Archived from the original on 4 June 2020. Retrieved 2 February 2021.
  50. ^ «PEP 373 – Python 2.7 Release Schedule». python.org. Archived from the original on 19 May 2020. Retrieved 9 January 2017.
  51. ^ «PEP 466 – Network Security Enhancements for Python 2.7.x». python.org. Archived from the original on 4 June 2020. Retrieved 9 January 2017.
  52. ^ «Sunsetting Python 2». Python.org. Archived from the original on 12 January 2020. Retrieved 22 September 2019.
  53. ^ «PEP 373 – Python 2.7 Release Schedule». Python.org. Archived from the original on 13 January 2020. Retrieved 22 September 2019.
  54. ^ 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.
  55. ^ «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.
  56. ^ «CVE – CVE-2021-3177». cve.mitre.org. Archived from the original on 27 February 2021. Retrieved 26 February 2021.
  57. ^ «CVE – CVE-2021-23336». cve.mitre.org. Archived from the original on 24 February 2021. Retrieved 26 February 2021.
  58. ^ 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.
  59. ^ 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.
  60. ^ Langa, Łukasz (17 May 2022). «Python Insider: Python 3.9.13 is now available». Python Insider. Retrieved 21 May 2022.
  61. ^ «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.
  62. ^ «CVE — CVE-2020-10735». cve.mitre.org. Retrieved 16 September 2022.
  63. ^ corbet (24 October 2022). «Python 3.11 released [LWN.net]». lwn.net. Retrieved 15 November 2022.
  64. ^ «Python Insider: Python 3.12.0 alpha 1 released». Retrieved 31 October 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. ^ Goodger, David (2008). «Code Like a Pythonista: Idiomatic Python». Archived from the original on 27 May 2014.
  82. ^ «How to think like a Pythonista». python.net. April 2002 [Thread captured 26 October 2015]. Archived from the original on 23 March 2018 – via GitHub.
  83. ^ «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.
  84. ^ «Myths about indentation in Python». Secnetix.de. Archived from the original on 18 February 2018. Retrieved 19 April 2011.
  85. ^ 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.
  86. ^ «PEP 8 – Style Guide for Python Code». Python.org. Archived from the original on 17 April 2019. Retrieved 26 March 2019.
  87. ^ «8. Errors and Exceptions — Python 3.12.0a0 documentation». docs.python.org. Retrieved 9 May 2022.
  88. ^ «Highlights: Python 2.5». Python.org. Archived from the original on 4 August 2019. Retrieved 20 March 2018.
  89. ^ van Rossum, Guido (22 April 2009). «Tail Recursion Elimination». Neopythonic.blogspot.be. Archived from the original on 19 May 2018. Retrieved 3 December 2012.
  90. ^ 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.
  91. ^ 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.
  92. ^ «PEP 380». Python.org. Archived from the original on 4 June 2020. Retrieved 3 December 2012.
  93. ^ «division». python.org. Archived from the original on 20 July 2006. Retrieved 30 July 2014.
  94. ^ «PEP 0465 – A dedicated infix operator for matrix multiplication». python.org. Archived from the original on 4 June 2020. Retrieved 1 January 2016.
  95. ^ «Python 3.5.1 Release and Changelog». python.org. Archived from the original on 14 May 2020. Retrieved 1 January 2016.
  96. ^ «What’s New in Python 3.8». Archived from the original on 8 June 2020. Retrieved 14 October 2019.
  97. ^ 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.
  98. ^ «4. Built-in Types — Python 3.6.3rc1 documentation». python.org. Archived from the original on 14 June 2020. Retrieved 1 October 2017.
  99. ^ «5.3. Tuples and Sequences — Python 3.7.1rc2 documentation». python.org. Archived from the original on 10 June 2020. Retrieved 17 October 2018.
  100. ^ a b «PEP 498 – Literal String Interpolation». python.org. Archived from the original on 15 June 2020. Retrieved 8 March 2017.
  101. ^ «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.
  102. ^ 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.
  103. ^ «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.
  104. ^ «Type hinting for Python». LWN.net. 24 December 2014. Archived from the original on 20 June 2019. Retrieved 5 May 2015.
  105. ^ «mypy – Optional Static Typing for Python». Archived from the original on 6 June 2020. Retrieved 28 January 2017.
  106. ^ «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».
  107. ^ 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.
  108. ^ «Built-in Types». Archived from the original on 14 June 2020. Retrieved 3 October 2019.
  109. ^ «PEP 465 – A dedicated infix operator for matrix multiplication». python.org. Archived from the original on 29 May 2020. Retrieved 3 July 2018.
  110. ^ 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.
  111. ^ «Why Python’s Integer Division Floors». 24 August 2010. Archived from the original on 5 June 2020. Retrieved 25 August 2010.
  112. ^ «round», The Python standard library, release 3.2, §2: Built-in functions, archived from the original on 25 October 2012, retrieved 14 August 2011
  113. ^ «round», The Python standard library, release 2.7, §2: Built-in functions, archived from the original on 27 October 2012, retrieved 14 August 2011
  114. ^ Beazley, David M. (2009). Python Essential Reference (4th ed.). p. 66. ISBN 9780672329784.
  115. ^ Kernighan, Brian W.; Ritchie, Dennis M. (1988). The C Programming Language (2nd ed.). p. 206.
  116. ^ Batista, Facundo. «PEP 0327 – Decimal Data Type». Python.org. Archived from the original on 4 June 2020. Retrieved 26 September 2015.
  117. ^ «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.
  118. ^ «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.
  119. ^ 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.
  120. ^ 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.
  121. ^ 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.
  122. ^ 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.
  123. ^ «Modulecounts». Modulecounts. 14 November 2022. Archived from the original on 26 June 2022.
  124. ^ Enthought, Canopy. «Canopy». www.enthought.com. Archived from the original on 15 July 2017. Retrieved 20 August 2016.
  125. ^ «PEP 7 – Style Guide for C Code | peps.python.org». peps.python.org. Retrieved 28 April 2022.
  126. ^ «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.
  127. ^ «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.
  128. ^ «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.
  129. ^ 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.
  130. ^ «CPython byte code». Docs.python.org. Archived from the original on 5 June 2020. Retrieved 16 February 2016.
  131. ^ «Python 2.5 internals» (PDF). Archived (PDF) from the original on 6 August 2012. Retrieved 19 April 2011.
  132. ^ «Changelog — Python 3.9.0 documentation». docs.python.org. Archived from the original on 7 February 2021. Retrieved 8 February 2021.
  133. ^ «Download Python». Python.org. Archived from the original on 8 December 2020. Retrieved 13 December 2020.
  134. ^ «history [vmspython]». www.vmspython.org. Archived from the original on 2 December 2020. Retrieved 4 December 2020.
  135. ^ «An Interview with Guido van Rossum». Oreilly.com. Archived from the original on 16 July 2014. Retrieved 24 November 2008.
  136. ^ «Download Python for Other Platforms». Python.org. Archived from the original on 27 November 2020. Retrieved 4 December 2020.
  137. ^ «PyPy compatibility». Pypy.org. Archived from the original on 6 June 2020. Retrieved 3 December 2012.
  138. ^ Team, The PyPy (28 December 2019). «Download and Install». PyPy. Retrieved 8 January 2022.
  139. ^ «speed comparison between CPython and Pypy». Speed.pypy.org. Archived from the original on 10 May 2021. Retrieved 3 December 2012.
  140. ^ «Application-level Stackless features — PyPy 2.0.2 documentation». Doc.pypy.org. Archived from the original on 4 June 2020. Retrieved 17 July 2013.
  141. ^ «Python-for-EV3». LEGO Education. Archived from the original on 7 June 2020. Retrieved 17 April 2019.
  142. ^ 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.
  143. ^ «cinder: Instagram’s performance-oriented fork of CPython». GitHub. Archived from the original on 4 May 2021. Retrieved 4 May 2021.
  144. ^ «Plans for optimizing Python». Google Project Hosting. 15 December 2009. Archived from the original on 11 April 2016. Retrieved 24 September 2011.
  145. ^ «Python on the Nokia N900». Stochastic Geometry. 29 April 2010. Archived from the original on 20 June 2019. Retrieved 9 July 2015.
  146. ^ «Brython». brython.info. Archived from the original on 3 August 2018. Retrieved 21 January 2021.
  147. ^ «Transcrypt – Python in the browser». transcrypt.org. Archived from the original on 19 August 2018. Retrieved 22 December 2020.
  148. ^ «Transcrypt: Anatomy of a Python to JavaScript Compiler». InfoQ. Archived from the original on 5 December 2020. Retrieved 20 January 2021.
  149. ^ «Nuitka Home | Nuitka Home». nuitka.net. Archived from the original on 30 May 2020. Retrieved 18 August 2017.
  150. ^ Borderies, Olivier (24 January 2019). «Pythran: Python at C++ speed !». Medium. Archived from the original on 25 March 2020. Retrieved 25 March 2020.
  151. ^ «Pythran — Pythran 0.9.5 documentation». pythran.readthedocs.io. Archived from the original on 19 February 2020. Retrieved 25 March 2020.
  152. ^ 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. doi:10.1088/1749-4680/8/1/014001. ISSN 1749-4699.
  153. ^ The Python → 11l → C++ transpiler
  154. ^ «google/grumpy». 10 April 2020. Archived from the original on 15 April 2020. Retrieved 25 March 2020 – via GitHub.
  155. ^ «Projects». opensource.google. Archived from the original on 24 April 2020. Retrieved 25 March 2020.
  156. ^ 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.
  157. ^ «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.
  158. ^ «IronPython.net /». ironpython.net. Archived from the original on 17 April 2021.
  159. ^ «Jython FAQ». www.jython.org. Archived from the original on 22 April 2021. Retrieved 22 April 2021.
  160. ^ 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.
  161. ^ «The Computer Language Benchmarks Game». Archived from the original on 14 June 2020. Retrieved 30 April 2020.
  162. ^ 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.
  163. ^ «PEP 8 – Style Guide for Python Code». Python.org. Archived from the original on 17 April 2019. Retrieved 26 March 2019.
  164. ^ 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.
  165. ^ «Moving Python’s bugs to GitHub [LWN.net]».
  166. ^ «Python Developer’s Guide — Python Developer’s Guide». devguide.python.org. Archived from the original on 9 November 2020. Retrieved 17 December 2019.
  167. ^ Hughes, Owen (24 May 2021). «Programming languages: Why Python 4.0 might never arrive, according to its creator». TechRepublic. Retrieved 16 May 2022.
  168. ^ «PEP 602 – Annual Release Cycle for Python». Python.org. Archived from the original on 14 June 2020. Retrieved 6 November 2019.
  169. ^ «Changing the Python release cadence [LWN.net]». lwn.net. Archived from the original on 6 November 2019. Retrieved 6 November 2019.
  170. ^ Norwitz, Neal (8 April 2002). «[Python-Dev] Release Schedules (was Stability & change)». Archived from the original on 15 December 2018. Retrieved 27 June 2009.
  171. ^ 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.
  172. ^ «Python Buildbot». Python Developer’s Guide. Python Software Foundation. Archived from the original on 5 June 2020. Retrieved 24 September 2011.
  173. ^ «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.
  174. ^ «PEP 623 – Remove wstr from Unicode». Python.org. Archived from the original on 5 March 2021. Retrieved 14 February 2021.
  175. ^ «PEP 634 – Structural Pattern Matching: Specification». Python.org. Archived from the original on 6 May 2021. Retrieved 14 February 2021.
  176. ^ «Documentation Tools». Python.org. Archived from the original on 11 November 2020. Retrieved 22 March 2021.
  177. ^ a b «Whetting Your Appetite». The Python Tutorial. Python Software Foundation. Archived from the original on 26 October 2012. Retrieved 20 February 2012.
  178. ^ «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.
  179. ^ 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.
  180. ^ Fehily, Chris (2002). Python. Peachpit Press. p. xv. ISBN 9780201748840. Archived from the original on 17 July 2017. Retrieved 9 May 2017.
  181. ^ 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.
  182. ^ 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.
  183. ^ «Quotes about Python». Python Software Foundation. Archived from the original on 3 June 2020. Retrieved 8 January 2012.
  184. ^ «Organizations Using Python». Python Software Foundation. Archived from the original on 21 August 2018. Retrieved 15 January 2009.
  185. ^ «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.
  186. ^ 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.
  187. ^ «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.
  188. ^ «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.
  189. ^ «How we use Python at Spotify». Spotify Labs. 20 March 2013. Archived from the original on 10 June 2020. Retrieved 25 July 2018.
  190. ^ 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.
  191. ^ 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.
  192. ^ GitHub – reddit-archive/reddit: historical code from reddit.com., The Reddit Archives, archived from the original on 1 June 2020, retrieved 20 March 2019
  193. ^ «Usage statistics and market share of Python for websites». 2012. Archived from the original on 13 August 2021. Retrieved 18 December 2012.
  194. ^ 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.
  195. ^ 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.
  196. ^ Science education with SageMath, Innovative Computing in Science Education, archived from the original on 15 June 2020, retrieved 22 April 2019
  197. ^ «OpenCV: OpenCV-Python Tutorials». docs.opencv.org. Archived from the original on 23 September 2020. Retrieved 14 September 2020.
  198. ^ 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.
  199. ^ 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.
  200. ^ «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.
  201. ^ 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.
  202. ^ «Natural Language Toolkit — NLTK 3.5b1 documentation». www.nltk.org. Archived from the original on 13 June 2020. Retrieved 10 April 2020.
  203. ^ «Installers for GIMP for Windows – Frequently Asked Questions». 26 July 2013. Archived from the original on 17 July 2013. Retrieved 26 July 2013.
  204. ^ «jasc psp9components». Archived from the original on 19 March 2008.
  205. ^ «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.
  206. ^ 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.
  207. ^ 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.
  208. ^ «Python Language Guide (v1.0)». Google Documents List Data API v1.0. Archived from the original on 15 July 2010.
  209. ^ «Python Setup and Usage». Python Software Foundation. Archived from the original on 17 June 2020. Retrieved 10 January 2020.
  210. ^ «Immunity: Knowing You’re Secure». Archived from the original on 16 February 2009.
  211. ^ «Core Security». Core Security. Archived from the original on 9 June 2020. Retrieved 10 April 2020.
  212. ^ «What is Sugar?». Sugar Labs. Archived from the original on 9 January 2009. Retrieved 11 February 2012.
  213. ^ «4.0 New Features and Fixes». LibreOffice.org. The Document Foundation. 2013. Archived from the original on 9 February 2014. Retrieved 25 February 2013.
  214. ^ «Gotchas for Python Users». boo.codehaus.org. Codehaus Foundation. Archived from the original on 11 December 2008. Retrieved 24 November 2008.
  215. ^ Esterbrook, Charles. «Acknowledgements». cobra-language.com. Cobra Language. Archived from the original on 8 February 2008. Retrieved 7 April 2010.
  216. ^ «Proposals: iterators and generators [ES4 Wiki]». wiki.ecmascript.org. Archived from the original on 20 October 2007. Retrieved 24 November 2008.
  217. ^ «Frequently asked questions». Godot Engine documentation. Archived from the original on 28 April 2021. Retrieved 10 May 2021.
  218. ^ 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.
  219. ^ 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.
  220. ^ 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).
  221. ^ «An Interview with the Creator of Ruby». Linuxdevcenter.com. Archived from the original on 28 April 2018. Retrieved 3 December 2012.
  222. ^ 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.
  223. ^ 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.
  224. ^ 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.
  225. ^ «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.
  • Pilgrim, Mark (2004). Dive into Python. Apress. ISBN 978-1-59059-356-1.
  • Pilgrim, Mark (2009). Dive into Python 3. Apress. ISBN 978-1-4302-2415-0.
  • 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; 31 years ago[2]
Stable release

3.11.1[3] Edit this on Wikidata
/ 6 December 2022; 33 days ago

Preview release

3.12.0a3[3] Edit this on Wikidata
/ 6 December 2022; 33 days ago

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

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.[33][34]

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.[35] Python 2.0 was released in 2000 and introduced new features such as list comprehensions, cycle-detecting garbage collection, reference counting, and Unicode support. 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.[36]

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

History

Python was conceived in the late 1980s[41] 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,[42] capable of exception handling (from the start plus new capabilities in Python 3.11) and interfacing with the Amoeba operating system.[12] Its implementation began in December 1989.[43] 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.[44] In January 2019, active Python core developers elected a five-member Steering Council to lead the project.[45][46]

Python 2.0 was released on 16 October 2000, with many major new features.[47] Python 3.0, released on 3 December 2008, with many of its major features backported to Python 2.6.x[48] and 2.7.x. Releases of Python 3 include the 2to3 utility, which automates the translation of Python 2 code to Python 3.[49]

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.[50][51] No further security patches or other improvements will be released for it.[52][53] Currently only 3.7 and later are supported. In 2021, Python 3.9.2 and 3.8.8 were expedited[54] as all versions of Python (including 2.7[55]) had security issues leading to possible remote code execution[56] and web cache poisoning.[57]

In 2022, Python 3.10.4 and 3.9.12 were expedited[58] and 3.8.13, and 3.7.13, because of many security issues.[59] 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) will only receive security fixes going forward.[60] 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.[61][62]

As of November 2022, Python 3.11.0 is the current stable release and among the notable changes from 3.10 are that it is 10–60% faster and significantly improved error reporting.[63]

Python 3.12 (alpha 2) has improved error messages.

Removals from Python

The deprecated smtpd module has been removed from Python 3.12 (alpha). And a number of other old, broken and deprecated functions (e.g. from unittest module), classes and methods have been removed. The deprecated wstr and wstr_ length members of the C implementation of Unicode objects were removed,[64] to make UTF-8 the default in later Python versions.

Historically, Python 3 also made changes from Python 2, e.g. changed the division operator.

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

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]

Python users and admirers, especially those considered knowledgeable or experienced, are often referred to as Pythonistas.[81][82]

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

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.[84] Thus, the program’s visual structure accurately represents its semantic structure.[85] 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.[86]

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[87]); 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[88]
  • 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 statement, 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.[89][90] However, better support for coroutine-like functionality is provided by extending Python’s generators.[91] 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.[92]

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.[93] 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.[94][95]
  • The syntax :=, called the «walrus operator», was introduced in Python 3.8. It assigns values to variables as part of a larger expression.[96]
  • 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[97] (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.[98]
  • 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.[99]
  • 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}'.[100]
  • 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».[100]
    • 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).[101] 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.[102]

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,[103] current Python versions only support the semantics new style.

The long-term plan is to support gradual typing.[104] 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.[105]

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

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[107] 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[108] 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 @ .[109] 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:[110]

  • 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.[110]

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

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

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.[114] 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.[115]

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

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.[118][119]

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[120] 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,[121] 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[122]—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[123] 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.[124]

Implementations

Reference implementation

CPython is the reference implementation of Python. It is written in C, meeting the C89 standard (Python 3.11 uses C11[125]) with several select C99 features (With later C versions out, it is considered outdated.[126][127] 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++.[128][129]) It compiles Python programs into an intermediate bytecode[130] which is then executed by its virtual machine.[131] 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;[132][133] 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.[134] Platform portability was one of its earliest priorities.[135] (During Python 1 and 2 development, even OS/2 and Solaris were supported,[136] but support has since been dropped for many platforms.)

Other implementations

  • PyPy is a fast, compliant interpreter of Python 2.7 and 3.8.[137][138] Its just-in-time compiler often brings a significant speed improvement over CPython but some libraries written in C cannot be used with it.[139]
  • 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.[140]
  • MicroPython and CircuitPython are Python 3 variants optimized for microcontrollers, including Lego Mindstorms EV3.[141]
  • Pyston is a variant of the Python runtime that uses just-in-time compilation to speed up the execution of Python programs.[142]
  • 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.[143]

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,[144] 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.[145]

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,[146] Transcrypt[147][148] and Pyjs (latest release in 2012) compile Python to JavaScript.
  • Cython compiles (a superset of) Python 2.7 to C (while the resulting code is also usable with Python 3 and also e.g. C++).
  • Nuitka compiles Python into C.[149]
  • Numba uses LLVM to compile a subset of Python to machine code.
  • Pythran compiles a subset of Python 3 to C++ (C++11).[150][151][152]
  • RPython can be compiled to C, and is used to build the PyPy interpreter of Python.
  • The Python → 11l → C++ transpiler[153] 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.[154][155][156]
  • 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»[157]) on the .NET Common Language Runtime.[158]
  • Jython compiles Python 2.7 to Java bytecode, allowing the use of the Java libraries from a Python program.[159]
  • 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.[160] Python’s performance compared to other programming languages is also benchmarked by The Computer Language Benchmarks Game.[161]

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

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.[164] In 2022, all issues and discussions were migrated to GitHub.[165] Development originally took place on a self-hosted source-code repository running Mercurial, until Python moved to GitHub in January 2017.[166]

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.[167]
  • 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.[168][169] Each major version is supported by bug fixes for several years after its release.[170]
  • Bugfix releases,[171] 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.[171]

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

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[173] need to be modified by then),[174] and added pattern matching to the language.[175]

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

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;[177] for example, the metasyntactic variables often used in Python literature are spam and eggs instead of the traditional foo and bar.[177][178] The official Python documentation also contains various references to Monty Python routines.[179][180]

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).[39] 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[181]).

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++».[182]

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

Uses

Python can serve as a scripting language for web applications, e.g., via mod_wsgi for the Apache webserver.[193] 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,[194][195] 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.[196] OpenCV has Python bindings with a rich set of features for computer vision and image processing.[197]

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

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,[203] Inkscape, Scribus and Paint Shop Pro,[204] 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.[205] It has also been used in several video games,[206][207] and has been adopted as first of the three available programming languages in Google App Engine, the other two being Java and Go.[208]

Many operating systems include Python as a standard component. It ships with most Linux distributions,[209] 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.[210][211]

Most of the Sugar software for the One Laptop per Child XO, developed at Sugar Labs since 2008, is written in Python.[212] 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[213] 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.[214]
  • Cobra uses indentation and a similar syntax, and its Acknowledgements document lists Python first among languages that influenced it.[215]
  • CoffeeScript, a programming language that cross-compiles to JavaScript, has Python-inspired syntax.
  • ECMAScript/JavaScript borrowed iterators and generators from Python.[216]
  • GDScript, a scripting language very similar to Python, built-in to the Godot game engine.[217]
  • Go is designed for the «speed of working in a dynamic language like Python»[218] and shares the same syntax for slicing arrays.
  • Groovy was motivated by the desire to bring the Python design philosophy to Java.[219]
  • Julia was designed to be «as usable for general programming as Python».[28]
  • Nim uses indentation and similar syntax.[220]
  • 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.»[221]
  • Swift, a programming language developed by Apple, has some Python-inspired syntax.[222]

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,[223] Erlang,[224] and Swift.[225]

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. ^ a b «Python 3.11.1, 3.10.9, 3.9.16, 3.8.16, 3.7.16, and 3.12.0 alpha 3 are now available». 6 December 2022. Retrieved 7 December 2022.
  4. ^ «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.
  5. ^ «PEP 483 – The Theory of Type Hints». Python.org. Archived from the original on 14 June 2020. Retrieved 14 June 2018.
  6. ^ «test — Regression tests package for Python — Python 3.7.13 documentation». docs.python.org. Retrieved 17 May 2022.
  7. ^ «platform — Access to underlying platform’s identifying data — Python 3.10.4 documentation». docs.python.org. Retrieved 17 May 2022.
  8. ^ «Download Python». Python.org. Archived from the original on 8 August 2018. Retrieved 24 May 2021.
  9. ^ Holth, Moore (30 March 2014). «PEP 0441 – Improving Python ZIP Application Support». Archived from the original on 26 December 2018. Retrieved 12 November 2015.
  10. ^ File extension .pyo was removed in Python 3.5. See PEP 0488 Archived 1 June 2020 at the Wayback Machine
  11. ^ «Starlark Language». Archived from the original on 15 June 2020. Retrieved 25 May 2019.
  12. ^ 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).
  13. ^ «Ada 83 Reference Manual (raise statement)». Archived from the original on 22 October 2019. Retrieved 7 January 2020.
  14. ^ 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.
  15. ^ 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.
  16. ^ 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.
  17. ^ 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
  18. ^ 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.
  19. ^ 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
  20. ^ 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.
  21. ^ 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.
  22. ^ «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.
  23. ^ «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.
  24. ^ «CoffeeScript». coffeescript.org. Archived from the original on 12 June 2020. Retrieved 3 July 2018.
  25. ^ «The Genie Programming Language Tutorial». Archived from the original on 1 June 2020. Retrieved 28 February 2020.
  26. ^ «Perl and Python influences in JavaScript». www.2ality.com. 24 February 2013. Archived from the original on 26 December 2018. Retrieved 15 May 2015.
  27. ^ 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.
  28. ^ 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 […]
  29. ^ 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.
  30. ^ 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.
  31. ^ 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.
  32. ^ Kuhlman, Dave. «A Python Book: Beginning Python, Advanced Python, and Python Exercises». Section 1.1. Archived from the original (PDF) on 23 June 2012.
  33. ^ «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.»
  34. ^ «PEP 206 – Python Advanced Library». Python.org. Archived from the original on 5 May 2021. Retrieved 11 October 2021.
  35. ^ 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.
  36. ^ 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.
  37. ^ «Stack Overflow Developer Survey 2022». Stack Overflow. Retrieved 12 August 2022.
  38. ^ «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.
  39. ^ 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.
  40. ^ «PYPL PopularitY of Programming Language index». pypl.github.io. Archived from the original on 14 March 2017. Retrieved 26 March 2021.
  41. ^ 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.
  42. ^ 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.
  43. ^ 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.
  44. ^ 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.
  45. ^ «PEP 8100». Python Software Foundation. Archived from the original on 4 June 2020. Retrieved 4 May 2019.
  46. ^ «PEP 13 – Python Language Governance». Python.org. Archived from the original on 27 May 2021. Retrieved 25 August 2021.
  47. ^ 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.
  48. ^ 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.
  49. ^ «2to3 – Automated Python 2 to 3 code translation». docs.python.org. Archived from the original on 4 June 2020. Retrieved 2 February 2021.
  50. ^ «PEP 373 – Python 2.7 Release Schedule». python.org. Archived from the original on 19 May 2020. Retrieved 9 January 2017.
  51. ^ «PEP 466 – Network Security Enhancements for Python 2.7.x». python.org. Archived from the original on 4 June 2020. Retrieved 9 January 2017.
  52. ^ «Sunsetting Python 2». Python.org. Archived from the original on 12 January 2020. Retrieved 22 September 2019.
  53. ^ «PEP 373 – Python 2.7 Release Schedule». Python.org. Archived from the original on 13 January 2020. Retrieved 22 September 2019.
  54. ^ 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.
  55. ^ «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.
  56. ^ «CVE – CVE-2021-3177». cve.mitre.org. Archived from the original on 27 February 2021. Retrieved 26 February 2021.
  57. ^ «CVE – CVE-2021-23336». cve.mitre.org. Archived from the original on 24 February 2021. Retrieved 26 February 2021.
  58. ^ 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.
  59. ^ 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.
  60. ^ Langa, Łukasz (17 May 2022). «Python Insider: Python 3.9.13 is now available». Python Insider. Retrieved 21 May 2022.
  61. ^ «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.
  62. ^ «CVE — CVE-2020-10735». cve.mitre.org. Retrieved 16 September 2022.
  63. ^ corbet (24 October 2022). «Python 3.11 released [LWN.net]». lwn.net. Retrieved 15 November 2022.
  64. ^ «Python Insider: Python 3.12.0 alpha 1 released». Retrieved 31 October 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. ^ Goodger, David (2008). «Code Like a Pythonista: Idiomatic Python». Archived from the original on 27 May 2014.
  82. ^ «How to think like a Pythonista». python.net. April 2002 [Thread captured 26 October 2015]. Archived from the original on 23 March 2018 – via GitHub.
  83. ^ «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.
  84. ^ «Myths about indentation in Python». Secnetix.de. Archived from the original on 18 February 2018. Retrieved 19 April 2011.
  85. ^ 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.
  86. ^ «PEP 8 – Style Guide for Python Code». Python.org. Archived from the original on 17 April 2019. Retrieved 26 March 2019.
  87. ^ «8. Errors and Exceptions — Python 3.12.0a0 documentation». docs.python.org. Retrieved 9 May 2022.
  88. ^ «Highlights: Python 2.5». Python.org. Archived from the original on 4 August 2019. Retrieved 20 March 2018.
  89. ^ van Rossum, Guido (22 April 2009). «Tail Recursion Elimination». Neopythonic.blogspot.be. Archived from the original on 19 May 2018. Retrieved 3 December 2012.
  90. ^ 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.
  91. ^ 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.
  92. ^ «PEP 380». Python.org. Archived from the original on 4 June 2020. Retrieved 3 December 2012.
  93. ^ «division». python.org. Archived from the original on 20 July 2006. Retrieved 30 July 2014.
  94. ^ «PEP 0465 – A dedicated infix operator for matrix multiplication». python.org. Archived from the original on 4 June 2020. Retrieved 1 January 2016.
  95. ^ «Python 3.5.1 Release and Changelog». python.org. Archived from the original on 14 May 2020. Retrieved 1 January 2016.
  96. ^ «What’s New in Python 3.8». Archived from the original on 8 June 2020. Retrieved 14 October 2019.
  97. ^ 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.
  98. ^ «4. Built-in Types — Python 3.6.3rc1 documentation». python.org. Archived from the original on 14 June 2020. Retrieved 1 October 2017.
  99. ^ «5.3. Tuples and Sequences — Python 3.7.1rc2 documentation». python.org. Archived from the original on 10 June 2020. Retrieved 17 October 2018.
  100. ^ a b «PEP 498 – Literal String Interpolation». python.org. Archived from the original on 15 June 2020. Retrieved 8 March 2017.
  101. ^ «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.
  102. ^ 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.
  103. ^ «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.
  104. ^ «Type hinting for Python». LWN.net. 24 December 2014. Archived from the original on 20 June 2019. Retrieved 5 May 2015.
  105. ^ «mypy – Optional Static Typing for Python». Archived from the original on 6 June 2020. Retrieved 28 January 2017.
  106. ^ «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».
  107. ^ 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.
  108. ^ «Built-in Types». Archived from the original on 14 June 2020. Retrieved 3 October 2019.
  109. ^ «PEP 465 – A dedicated infix operator for matrix multiplication». python.org. Archived from the original on 29 May 2020. Retrieved 3 July 2018.
  110. ^ 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.
  111. ^ «Why Python’s Integer Division Floors». 24 August 2010. Archived from the original on 5 June 2020. Retrieved 25 August 2010.
  112. ^ «round», The Python standard library, release 3.2, §2: Built-in functions, archived from the original on 25 October 2012, retrieved 14 August 2011
  113. ^ «round», The Python standard library, release 2.7, §2: Built-in functions, archived from the original on 27 October 2012, retrieved 14 August 2011
  114. ^ Beazley, David M. (2009). Python Essential Reference (4th ed.). p. 66. ISBN 9780672329784.
  115. ^ Kernighan, Brian W.; Ritchie, Dennis M. (1988). The C Programming Language (2nd ed.). p. 206.
  116. ^ Batista, Facundo. «PEP 0327 – Decimal Data Type». Python.org. Archived from the original on 4 June 2020. Retrieved 26 September 2015.
  117. ^ «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.
  118. ^ «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.
  119. ^ 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.
  120. ^ 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.
  121. ^ 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.
  122. ^ 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.
  123. ^ «Modulecounts». Modulecounts. 14 November 2022. Archived from the original on 26 June 2022.
  124. ^ Enthought, Canopy. «Canopy». www.enthought.com. Archived from the original on 15 July 2017. Retrieved 20 August 2016.
  125. ^ «PEP 7 – Style Guide for C Code | peps.python.org». peps.python.org. Retrieved 28 April 2022.
  126. ^ «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.
  127. ^ «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.
  128. ^ «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.
  129. ^ 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.
  130. ^ «CPython byte code». Docs.python.org. Archived from the original on 5 June 2020. Retrieved 16 February 2016.
  131. ^ «Python 2.5 internals» (PDF). Archived (PDF) from the original on 6 August 2012. Retrieved 19 April 2011.
  132. ^ «Changelog — Python 3.9.0 documentation». docs.python.org. Archived from the original on 7 February 2021. Retrieved 8 February 2021.
  133. ^ «Download Python». Python.org. Archived from the original on 8 December 2020. Retrieved 13 December 2020.
  134. ^ «history [vmspython]». www.vmspython.org. Archived from the original on 2 December 2020. Retrieved 4 December 2020.
  135. ^ «An Interview with Guido van Rossum». Oreilly.com. Archived from the original on 16 July 2014. Retrieved 24 November 2008.
  136. ^ «Download Python for Other Platforms». Python.org. Archived from the original on 27 November 2020. Retrieved 4 December 2020.
  137. ^ «PyPy compatibility». Pypy.org. Archived from the original on 6 June 2020. Retrieved 3 December 2012.
  138. ^ Team, The PyPy (28 December 2019). «Download and Install». PyPy. Retrieved 8 January 2022.
  139. ^ «speed comparison between CPython and Pypy». Speed.pypy.org. Archived from the original on 10 May 2021. Retrieved 3 December 2012.
  140. ^ «Application-level Stackless features — PyPy 2.0.2 documentation». Doc.pypy.org. Archived from the original on 4 June 2020. Retrieved 17 July 2013.
  141. ^ «Python-for-EV3». LEGO Education. Archived from the original on 7 June 2020. Retrieved 17 April 2019.
  142. ^ 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.
  143. ^ «cinder: Instagram’s performance-oriented fork of CPython». GitHub. Archived from the original on 4 May 2021. Retrieved 4 May 2021.
  144. ^ «Plans for optimizing Python». Google Project Hosting. 15 December 2009. Archived from the original on 11 April 2016. Retrieved 24 September 2011.
  145. ^ «Python on the Nokia N900». Stochastic Geometry. 29 April 2010. Archived from the original on 20 June 2019. Retrieved 9 July 2015.
  146. ^ «Brython». brython.info. Archived from the original on 3 August 2018. Retrieved 21 January 2021.
  147. ^ «Transcrypt – Python in the browser». transcrypt.org. Archived from the original on 19 August 2018. Retrieved 22 December 2020.
  148. ^ «Transcrypt: Anatomy of a Python to JavaScript Compiler». InfoQ. Archived from the original on 5 December 2020. Retrieved 20 January 2021.
  149. ^ «Nuitka Home | Nuitka Home». nuitka.net. Archived from the original on 30 May 2020. Retrieved 18 August 2017.
  150. ^ Borderies, Olivier (24 January 2019). «Pythran: Python at C++ speed !». Medium. Archived from the original on 25 March 2020. Retrieved 25 March 2020.
  151. ^ «Pythran — Pythran 0.9.5 documentation». pythran.readthedocs.io. Archived from the original on 19 February 2020. Retrieved 25 March 2020.
  152. ^ 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. doi:10.1088/1749-4680/8/1/014001. ISSN 1749-4699.
  153. ^ The Python → 11l → C++ transpiler
  154. ^ «google/grumpy». 10 April 2020. Archived from the original on 15 April 2020. Retrieved 25 March 2020 – via GitHub.
  155. ^ «Projects». opensource.google. Archived from the original on 24 April 2020. Retrieved 25 March 2020.
  156. ^ 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.
  157. ^ «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.
  158. ^ «IronPython.net /». ironpython.net. Archived from the original on 17 April 2021.
  159. ^ «Jython FAQ». www.jython.org. Archived from the original on 22 April 2021. Retrieved 22 April 2021.
  160. ^ 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.
  161. ^ «The Computer Language Benchmarks Game». Archived from the original on 14 June 2020. Retrieved 30 April 2020.
  162. ^ 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.
  163. ^ «PEP 8 – Style Guide for Python Code». Python.org. Archived from the original on 17 April 2019. Retrieved 26 March 2019.
  164. ^ 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.
  165. ^ «Moving Python’s bugs to GitHub [LWN.net]».
  166. ^ «Python Developer’s Guide — Python Developer’s Guide». devguide.python.org. Archived from the original on 9 November 2020. Retrieved 17 December 2019.
  167. ^ Hughes, Owen (24 May 2021). «Programming languages: Why Python 4.0 might never arrive, according to its creator». TechRepublic. Retrieved 16 May 2022.
  168. ^ «PEP 602 – Annual Release Cycle for Python». Python.org. Archived from the original on 14 June 2020. Retrieved 6 November 2019.
  169. ^ «Changing the Python release cadence [LWN.net]». lwn.net. Archived from the original on 6 November 2019. Retrieved 6 November 2019.
  170. ^ Norwitz, Neal (8 April 2002). «[Python-Dev] Release Schedules (was Stability & change)». Archived from the original on 15 December 2018. Retrieved 27 June 2009.
  171. ^ 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.
  172. ^ «Python Buildbot». Python Developer’s Guide. Python Software Foundation. Archived from the original on 5 June 2020. Retrieved 24 September 2011.
  173. ^ «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.
  174. ^ «PEP 623 – Remove wstr from Unicode». Python.org. Archived from the original on 5 March 2021. Retrieved 14 February 2021.
  175. ^ «PEP 634 – Structural Pattern Matching: Specification». Python.org. Archived from the original on 6 May 2021. Retrieved 14 February 2021.
  176. ^ «Documentation Tools». Python.org. Archived from the original on 11 November 2020. Retrieved 22 March 2021.
  177. ^ a b «Whetting Your Appetite». The Python Tutorial. Python Software Foundation. Archived from the original on 26 October 2012. Retrieved 20 February 2012.
  178. ^ «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.
  179. ^ 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.
  180. ^ Fehily, Chris (2002). Python. Peachpit Press. p. xv. ISBN 9780201748840. Archived from the original on 17 July 2017. Retrieved 9 May 2017.
  181. ^ 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.
  182. ^ 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.
  183. ^ «Quotes about Python». Python Software Foundation. Archived from the original on 3 June 2020. Retrieved 8 January 2012.
  184. ^ «Organizations Using Python». Python Software Foundation. Archived from the original on 21 August 2018. Retrieved 15 January 2009.
  185. ^ «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.
  186. ^ 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.
  187. ^ «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.
  188. ^ «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.
  189. ^ «How we use Python at Spotify». Spotify Labs. 20 March 2013. Archived from the original on 10 June 2020. Retrieved 25 July 2018.
  190. ^ 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.
  191. ^ 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.
  192. ^ GitHub – reddit-archive/reddit: historical code from reddit.com., The Reddit Archives, archived from the original on 1 June 2020, retrieved 20 March 2019
  193. ^ «Usage statistics and market share of Python for websites». 2012. Archived from the original on 13 August 2021. Retrieved 18 December 2012.
  194. ^ 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.
  195. ^ 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.
  196. ^ Science education with SageMath, Innovative Computing in Science Education, archived from the original on 15 June 2020, retrieved 22 April 2019
  197. ^ «OpenCV: OpenCV-Python Tutorials». docs.opencv.org. Archived from the original on 23 September 2020. Retrieved 14 September 2020.
  198. ^ 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.
  199. ^ 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.
  200. ^ «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.
  201. ^ 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.
  202. ^ «Natural Language Toolkit — NLTK 3.5b1 documentation». www.nltk.org. Archived from the original on 13 June 2020. Retrieved 10 April 2020.
  203. ^ «Installers for GIMP for Windows – Frequently Asked Questions». 26 July 2013. Archived from the original on 17 July 2013. Retrieved 26 July 2013.
  204. ^ «jasc psp9components». Archived from the original on 19 March 2008.
  205. ^ «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.
  206. ^ 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.
  207. ^ 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.
  208. ^ «Python Language Guide (v1.0)». Google Documents List Data API v1.0. Archived from the original on 15 July 2010.
  209. ^ «Python Setup and Usage». Python Software Foundation. Archived from the original on 17 June 2020. Retrieved 10 January 2020.
  210. ^ «Immunity: Knowing You’re Secure». Archived from the original on 16 February 2009.
  211. ^ «Core Security». Core Security. Archived from the original on 9 June 2020. Retrieved 10 April 2020.
  212. ^ «What is Sugar?». Sugar Labs. Archived from the original on 9 January 2009. Retrieved 11 February 2012.
  213. ^ «4.0 New Features and Fixes». LibreOffice.org. The Document Foundation. 2013. Archived from the original on 9 February 2014. Retrieved 25 February 2013.
  214. ^ «Gotchas for Python Users». boo.codehaus.org. Codehaus Foundation. Archived from the original on 11 December 2008. Retrieved 24 November 2008.
  215. ^ Esterbrook, Charles. «Acknowledgements». cobra-language.com. Cobra Language. Archived from the original on 8 February 2008. Retrieved 7 April 2010.
  216. ^ «Proposals: iterators and generators [ES4 Wiki]». wiki.ecmascript.org. Archived from the original on 20 October 2007. Retrieved 24 November 2008.
  217. ^ «Frequently asked questions». Godot Engine documentation. Archived from the original on 28 April 2021. Retrieved 10 May 2021.
  218. ^ 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.
  219. ^ 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.
  220. ^ 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).
  221. ^ «An Interview with the Creator of Ruby». Linuxdevcenter.com. Archived from the original on 28 April 2018. Retrieved 3 December 2012.
  222. ^ 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.
  223. ^ 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.
  224. ^ 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.
  225. ^ «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.
  • Pilgrim, Mark (2004). Dive into Python. Apress. ISBN 978-1-59059-356-1.
  • Pilgrim, Mark (2009). Dive into Python 3. Apress. ISBN 978-1-4302-2415-0.
  • 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 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-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; 31 years ago[2]
Stable release

3.11.1[3] Edit this on Wikidata
/ 6 December 2022; 33 days ago

Preview release

3.12.0a3[3] Edit this on Wikidata
/ 6 December 2022; 33 days ago

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

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.[33][34]

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.[35] Python 2.0 was released in 2000 and introduced new features such as list comprehensions, cycle-detecting garbage collection, reference counting, and Unicode support. 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.[36]

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

History

Python was conceived in the late 1980s[41] 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,[42] capable of exception handling (from the start plus new capabilities in Python 3.11) and interfacing with the Amoeba operating system.[12] Its implementation began in December 1989.[43] 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.[44] In January 2019, active Python core developers elected a five-member Steering Council to lead the project.[45][46]

Python 2.0 was released on 16 October 2000, with many major new features.[47] Python 3.0, released on 3 December 2008, with many of its major features backported to Python 2.6.x[48] and 2.7.x. Releases of Python 3 include the 2to3 utility, which automates the translation of Python 2 code to Python 3.[49]

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.[50][51] No further security patches or other improvements will be released for it.[52][53] Currently only 3.7 and later are supported. In 2021, Python 3.9.2 and 3.8.8 were expedited[54] as all versions of Python (including 2.7[55]) had security issues leading to possible remote code execution[56] and web cache poisoning.[57]

In 2022, Python 3.10.4 and 3.9.12 were expedited[58] and 3.8.13, and 3.7.13, because of many security issues.[59] 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) will only receive security fixes going forward.[60] 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.[61][62]

As of November 2022, Python 3.11.0 is the current stable release and among the notable changes from 3.10 are that it is 10–60% faster and significantly improved error reporting.[63]

Python 3.12 (alpha 2) has improved error messages.

Removals from Python

The deprecated smtpd module has been removed from Python 3.12 (alpha). And a number of other old, broken and deprecated functions (e.g. from unittest module), classes and methods have been removed. The deprecated wstr and wstr_ length members of the C implementation of Unicode objects were removed,[64] to make UTF-8 the default in later Python versions.

Historically, Python 3 also made changes from Python 2, e.g. changed the division operator.

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

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]

Python users and admirers, especially those considered knowledgeable or experienced, are often referred to as Pythonistas.[81][82]

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

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.[84] Thus, the program’s visual structure accurately represents its semantic structure.[85] 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.[86]

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[87]); 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[88]
  • 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 statement, 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.[89][90] However, better support for coroutine-like functionality is provided by extending Python’s generators.[91] 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.[92]

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.[93] 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.[94][95]
  • The syntax :=, called the «walrus operator», was introduced in Python 3.8. It assigns values to variables as part of a larger expression.[96]
  • 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[97] (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.[98]
  • 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.[99]
  • 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}'.[100]
  • 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».[100]
    • 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).[101] 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.[102]

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,[103] current Python versions only support the semantics new style.

The long-term plan is to support gradual typing.[104] 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.[105]

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

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[107] 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[108] 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 @ .[109] 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:[110]

  • 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.[110]

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

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

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.[114] 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.[115]

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

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.[118][119]

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[120] 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,[121] 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[122]—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[123] 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.[124]

Implementations

Reference implementation

CPython is the reference implementation of Python. It is written in C, meeting the C89 standard (Python 3.11 uses C11[125]) with several select C99 features (With later C versions out, it is considered outdated.[126][127] 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++.[128][129]) It compiles Python programs into an intermediate bytecode[130] which is then executed by its virtual machine.[131] 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;[132][133] 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.[134] Platform portability was one of its earliest priorities.[135] (During Python 1 and 2 development, even OS/2 and Solaris were supported,[136] but support has since been dropped for many platforms.)

Other implementations

  • PyPy is a fast, compliant interpreter of Python 2.7 and 3.8.[137][138] Its just-in-time compiler often brings a significant speed improvement over CPython but some libraries written in C cannot be used with it.[139]
  • 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.[140]
  • MicroPython and CircuitPython are Python 3 variants optimized for microcontrollers, including Lego Mindstorms EV3.[141]
  • Pyston is a variant of the Python runtime that uses just-in-time compilation to speed up the execution of Python programs.[142]
  • 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.[143]

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,[144] 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.[145]

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,[146] Transcrypt[147][148] and Pyjs (latest release in 2012) compile Python to JavaScript.
  • Cython compiles (a superset of) Python 2.7 to C (while the resulting code is also usable with Python 3 and also e.g. C++).
  • Nuitka compiles Python into C.[149]
  • Numba uses LLVM to compile a subset of Python to machine code.
  • Pythran compiles a subset of Python 3 to C++ (C++11).[150][151][152]
  • RPython can be compiled to C, and is used to build the PyPy interpreter of Python.
  • The Python → 11l → C++ transpiler[153] 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.[154][155][156]
  • 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»[157]) on the .NET Common Language Runtime.[158]
  • Jython compiles Python 2.7 to Java bytecode, allowing the use of the Java libraries from a Python program.[159]
  • 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.[160] Python’s performance compared to other programming languages is also benchmarked by The Computer Language Benchmarks Game.[161]

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

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.[164] In 2022, all issues and discussions were migrated to GitHub.[165] Development originally took place on a self-hosted source-code repository running Mercurial, until Python moved to GitHub in January 2017.[166]

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.[167]
  • 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.[168][169] Each major version is supported by bug fixes for several years after its release.[170]
  • Bugfix releases,[171] 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.[171]

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

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[173] need to be modified by then),[174] and added pattern matching to the language.[175]

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

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;[177] for example, the metasyntactic variables often used in Python literature are spam and eggs instead of the traditional foo and bar.[177][178] The official Python documentation also contains various references to Monty Python routines.[179][180]

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).[39] 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[181]).

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++».[182]

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

Uses

Python can serve as a scripting language for web applications, e.g., via mod_wsgi for the Apache webserver.[193] 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,[194][195] 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.[196] OpenCV has Python bindings with a rich set of features for computer vision and image processing.[197]

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

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,[203] Inkscape, Scribus and Paint Shop Pro,[204] 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.[205] It has also been used in several video games,[206][207] and has been adopted as first of the three available programming languages in Google App Engine, the other two being Java and Go.[208]

Many operating systems include Python as a standard component. It ships with most Linux distributions,[209] 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.[210][211]

Most of the Sugar software for the One Laptop per Child XO, developed at Sugar Labs since 2008, is written in Python.[212] 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[213] 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.[214]
  • Cobra uses indentation and a similar syntax, and its Acknowledgements document lists Python first among languages that influenced it.[215]
  • CoffeeScript, a programming language that cross-compiles to JavaScript, has Python-inspired syntax.
  • ECMAScript/JavaScript borrowed iterators and generators from Python.[216]
  • GDScript, a scripting language very similar to Python, built-in to the Godot game engine.[217]
  • Go is designed for the «speed of working in a dynamic language like Python»[218] and shares the same syntax for slicing arrays.
  • Groovy was motivated by the desire to bring the Python design philosophy to Java.[219]
  • Julia was designed to be «as usable for general programming as Python».[28]
  • Nim uses indentation and similar syntax.[220]
  • 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.»[221]
  • Swift, a programming language developed by Apple, has some Python-inspired syntax.[222]

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,[223] Erlang,[224] and Swift.[225]

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. ^ a b «Python 3.11.1, 3.10.9, 3.9.16, 3.8.16, 3.7.16, and 3.12.0 alpha 3 are now available». 6 December 2022. Retrieved 7 December 2022.
  4. ^ «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.
  5. ^ «PEP 483 – The Theory of Type Hints». Python.org. Archived from the original on 14 June 2020. Retrieved 14 June 2018.
  6. ^ «test — Regression tests package for Python — Python 3.7.13 documentation». docs.python.org. Retrieved 17 May 2022.
  7. ^ «platform — Access to underlying platform’s identifying data — Python 3.10.4 documentation». docs.python.org. Retrieved 17 May 2022.
  8. ^ «Download Python». Python.org. Archived from the original on 8 August 2018. Retrieved 24 May 2021.
  9. ^ Holth, Moore (30 March 2014). «PEP 0441 – Improving Python ZIP Application Support». Archived from the original on 26 December 2018. Retrieved 12 November 2015.
  10. ^ File extension .pyo was removed in Python 3.5. See PEP 0488 Archived 1 June 2020 at the Wayback Machine
  11. ^ «Starlark Language». Archived from the original on 15 June 2020. Retrieved 25 May 2019.
  12. ^ 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).
  13. ^ «Ada 83 Reference Manual (raise statement)». Archived from the original on 22 October 2019. Retrieved 7 January 2020.
  14. ^ 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.
  15. ^ 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.
  16. ^ 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.
  17. ^ 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
  18. ^ 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.
  19. ^ 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
  20. ^ 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.
  21. ^ 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.
  22. ^ «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.
  23. ^ «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.
  24. ^ «CoffeeScript». coffeescript.org. Archived from the original on 12 June 2020. Retrieved 3 July 2018.
  25. ^ «The Genie Programming Language Tutorial». Archived from the original on 1 June 2020. Retrieved 28 February 2020.
  26. ^ «Perl and Python influences in JavaScript». www.2ality.com. 24 February 2013. Archived from the original on 26 December 2018. Retrieved 15 May 2015.
  27. ^ 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.
  28. ^ 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 […]
  29. ^ 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.
  30. ^ 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.
  31. ^ 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.
  32. ^ Kuhlman, Dave. «A Python Book: Beginning Python, Advanced Python, and Python Exercises». Section 1.1. Archived from the original (PDF) on 23 June 2012.
  33. ^ «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.»
  34. ^ «PEP 206 – Python Advanced Library». Python.org. Archived from the original on 5 May 2021. Retrieved 11 October 2021.
  35. ^ 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.
  36. ^ 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.
  37. ^ «Stack Overflow Developer Survey 2022». Stack Overflow. Retrieved 12 August 2022.
  38. ^ «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.
  39. ^ 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.
  40. ^ «PYPL PopularitY of Programming Language index». pypl.github.io. Archived from the original on 14 March 2017. Retrieved 26 March 2021.
  41. ^ 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.
  42. ^ 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.
  43. ^ 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.
  44. ^ 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.
  45. ^ «PEP 8100». Python Software Foundation. Archived from the original on 4 June 2020. Retrieved 4 May 2019.
  46. ^ «PEP 13 – Python Language Governance». Python.org. Archived from the original on 27 May 2021. Retrieved 25 August 2021.
  47. ^ 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.
  48. ^ 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.
  49. ^ «2to3 – Automated Python 2 to 3 code translation». docs.python.org. Archived from the original on 4 June 2020. Retrieved 2 February 2021.
  50. ^ «PEP 373 – Python 2.7 Release Schedule». python.org. Archived from the original on 19 May 2020. Retrieved 9 January 2017.
  51. ^ «PEP 466 – Network Security Enhancements for Python 2.7.x». python.org. Archived from the original on 4 June 2020. Retrieved 9 January 2017.
  52. ^ «Sunsetting Python 2». Python.org. Archived from the original on 12 January 2020. Retrieved 22 September 2019.
  53. ^ «PEP 373 – Python 2.7 Release Schedule». Python.org. Archived from the original on 13 January 2020. Retrieved 22 September 2019.
  54. ^ 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.
  55. ^ «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.
  56. ^ «CVE – CVE-2021-3177». cve.mitre.org. Archived from the original on 27 February 2021. Retrieved 26 February 2021.
  57. ^ «CVE – CVE-2021-23336». cve.mitre.org. Archived from the original on 24 February 2021. Retrieved 26 February 2021.
  58. ^ 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.
  59. ^ 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.
  60. ^ Langa, Łukasz (17 May 2022). «Python Insider: Python 3.9.13 is now available». Python Insider. Retrieved 21 May 2022.
  61. ^ «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.
  62. ^ «CVE — CVE-2020-10735». cve.mitre.org. Retrieved 16 September 2022.
  63. ^ corbet (24 October 2022). «Python 3.11 released [LWN.net]». lwn.net. Retrieved 15 November 2022.
  64. ^ «Python Insider: Python 3.12.0 alpha 1 released». Retrieved 31 October 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. ^ Goodger, David (2008). «Code Like a Pythonista: Idiomatic Python». Archived from the original on 27 May 2014.
  82. ^ «How to think like a Pythonista». python.net. April 2002 [Thread captured 26 October 2015]. Archived from the original on 23 March 2018 – via GitHub.
  83. ^ «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.
  84. ^ «Myths about indentation in Python». Secnetix.de. Archived from the original on 18 February 2018. Retrieved 19 April 2011.
  85. ^ 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.
  86. ^ «PEP 8 – Style Guide for Python Code». Python.org. Archived from the original on 17 April 2019. Retrieved 26 March 2019.
  87. ^ «8. Errors and Exceptions — Python 3.12.0a0 documentation». docs.python.org. Retrieved 9 May 2022.
  88. ^ «Highlights: Python 2.5». Python.org. Archived from the original on 4 August 2019. Retrieved 20 March 2018.
  89. ^ van Rossum, Guido (22 April 2009). «Tail Recursion Elimination». Neopythonic.blogspot.be. Archived from the original on 19 May 2018. Retrieved 3 December 2012.
  90. ^ 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.
  91. ^ 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.
  92. ^ «PEP 380». Python.org. Archived from the original on 4 June 2020. Retrieved 3 December 2012.
  93. ^ «division». python.org. Archived from the original on 20 July 2006. Retrieved 30 July 2014.
  94. ^ «PEP 0465 – A dedicated infix operator for matrix multiplication». python.org. Archived from the original on 4 June 2020. Retrieved 1 January 2016.
  95. ^ «Python 3.5.1 Release and Changelog». python.org. Archived from the original on 14 May 2020. Retrieved 1 January 2016.
  96. ^ «What’s New in Python 3.8». Archived from the original on 8 June 2020. Retrieved 14 October 2019.
  97. ^ 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.
  98. ^ «4. Built-in Types — Python 3.6.3rc1 documentation». python.org. Archived from the original on 14 June 2020. Retrieved 1 October 2017.
  99. ^ «5.3. Tuples and Sequences — Python 3.7.1rc2 documentation». python.org. Archived from the original on 10 June 2020. Retrieved 17 October 2018.
  100. ^ a b «PEP 498 – Literal String Interpolation». python.org. Archived from the original on 15 June 2020. Retrieved 8 March 2017.
  101. ^ «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.
  102. ^ 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.
  103. ^ «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.
  104. ^ «Type hinting for Python». LWN.net. 24 December 2014. Archived from the original on 20 June 2019. Retrieved 5 May 2015.
  105. ^ «mypy – Optional Static Typing for Python». Archived from the original on 6 June 2020. Retrieved 28 January 2017.
  106. ^ «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».
  107. ^ 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.
  108. ^ «Built-in Types». Archived from the original on 14 June 2020. Retrieved 3 October 2019.
  109. ^ «PEP 465 – A dedicated infix operator for matrix multiplication». python.org. Archived from the original on 29 May 2020. Retrieved 3 July 2018.
  110. ^ 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.
  111. ^ «Why Python’s Integer Division Floors». 24 August 2010. Archived from the original on 5 June 2020. Retrieved 25 August 2010.
  112. ^ «round», The Python standard library, release 3.2, §2: Built-in functions, archived from the original on 25 October 2012, retrieved 14 August 2011
  113. ^ «round», The Python standard library, release 2.7, §2: Built-in functions, archived from the original on 27 October 2012, retrieved 14 August 2011
  114. ^ Beazley, David M. (2009). Python Essential Reference (4th ed.). p. 66. ISBN 9780672329784.
  115. ^ Kernighan, Brian W.; Ritchie, Dennis M. (1988). The C Programming Language (2nd ed.). p. 206.
  116. ^ Batista, Facundo. «PEP 0327 – Decimal Data Type». Python.org. Archived from the original on 4 June 2020. Retrieved 26 September 2015.
  117. ^ «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.
  118. ^ «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.
  119. ^ 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.
  120. ^ 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.
  121. ^ 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.
  122. ^ 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.
  123. ^ «Modulecounts». Modulecounts. 14 November 2022. Archived from the original on 26 June 2022.
  124. ^ Enthought, Canopy. «Canopy». www.enthought.com. Archived from the original on 15 July 2017. Retrieved 20 August 2016.
  125. ^ «PEP 7 – Style Guide for C Code | peps.python.org». peps.python.org. Retrieved 28 April 2022.
  126. ^ «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.
  127. ^ «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.
  128. ^ «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.
  129. ^ 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.
  130. ^ «CPython byte code». Docs.python.org. Archived from the original on 5 June 2020. Retrieved 16 February 2016.
  131. ^ «Python 2.5 internals» (PDF). Archived (PDF) from the original on 6 August 2012. Retrieved 19 April 2011.
  132. ^ «Changelog — Python 3.9.0 documentation». docs.python.org. Archived from the original on 7 February 2021. Retrieved 8 February 2021.
  133. ^ «Download Python». Python.org. Archived from the original on 8 December 2020. Retrieved 13 December 2020.
  134. ^ «history [vmspython]». www.vmspython.org. Archived from the original on 2 December 2020. Retrieved 4 December 2020.
  135. ^ «An Interview with Guido van Rossum». Oreilly.com. Archived from the original on 16 July 2014. Retrieved 24 November 2008.
  136. ^ «Download Python for Other Platforms». Python.org. Archived from the original on 27 November 2020. Retrieved 4 December 2020.
  137. ^ «PyPy compatibility». Pypy.org. Archived from the original on 6 June 2020. Retrieved 3 December 2012.
  138. ^ Team, The PyPy (28 December 2019). «Download and Install». PyPy. Retrieved 8 January 2022.
  139. ^ «speed comparison between CPython and Pypy». Speed.pypy.org. Archived from the original on 10 May 2021. Retrieved 3 December 2012.
  140. ^ «Application-level Stackless features — PyPy 2.0.2 documentation». Doc.pypy.org. Archived from the original on 4 June 2020. Retrieved 17 July 2013.
  141. ^ «Python-for-EV3». LEGO Education. Archived from the original on 7 June 2020. Retrieved 17 April 2019.
  142. ^ 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.
  143. ^ «cinder: Instagram’s performance-oriented fork of CPython». GitHub. Archived from the original on 4 May 2021. Retrieved 4 May 2021.
  144. ^ «Plans for optimizing Python». Google Project Hosting. 15 December 2009. Archived from the original on 11 April 2016. Retrieved 24 September 2011.
  145. ^ «Python on the Nokia N900». Stochastic Geometry. 29 April 2010. Archived from the original on 20 June 2019. Retrieved 9 July 2015.
  146. ^ «Brython». brython.info. Archived from the original on 3 August 2018. Retrieved 21 January 2021.
  147. ^ «Transcrypt – Python in the browser». transcrypt.org. Archived from the original on 19 August 2018. Retrieved 22 December 2020.
  148. ^ «Transcrypt: Anatomy of a Python to JavaScript Compiler». InfoQ. Archived from the original on 5 December 2020. Retrieved 20 January 2021.
  149. ^ «Nuitka Home | Nuitka Home». nuitka.net. Archived from the original on 30 May 2020. Retrieved 18 August 2017.
  150. ^ Borderies, Olivier (24 January 2019). «Pythran: Python at C++ speed !». Medium. Archived from the original on 25 March 2020. Retrieved 25 March 2020.
  151. ^ «Pythran — Pythran 0.9.5 documentation». pythran.readthedocs.io. Archived from the original on 19 February 2020. Retrieved 25 March 2020.
  152. ^ 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. doi:10.1088/1749-4680/8/1/014001. ISSN 1749-4699.
  153. ^ The Python → 11l → C++ transpiler
  154. ^ «google/grumpy». 10 April 2020. Archived from the original on 15 April 2020. Retrieved 25 March 2020 – via GitHub.
  155. ^ «Projects». opensource.google. Archived from the original on 24 April 2020. Retrieved 25 March 2020.
  156. ^ 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.
  157. ^ «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.
  158. ^ «IronPython.net /». ironpython.net. Archived from the original on 17 April 2021.
  159. ^ «Jython FAQ». www.jython.org. Archived from the original on 22 April 2021. Retrieved 22 April 2021.
  160. ^ 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.
  161. ^ «The Computer Language Benchmarks Game». Archived from the original on 14 June 2020. Retrieved 30 April 2020.
  162. ^ 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.
  163. ^ «PEP 8 – Style Guide for Python Code». Python.org. Archived from the original on 17 April 2019. Retrieved 26 March 2019.
  164. ^ 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.
  165. ^ «Moving Python’s bugs to GitHub [LWN.net]».
  166. ^ «Python Developer’s Guide — Python Developer’s Guide». devguide.python.org. Archived from the original on 9 November 2020. Retrieved 17 December 2019.
  167. ^ Hughes, Owen (24 May 2021). «Programming languages: Why Python 4.0 might never arrive, according to its creator». TechRepublic. Retrieved 16 May 2022.
  168. ^ «PEP 602 – Annual Release Cycle for Python». Python.org. Archived from the original on 14 June 2020. Retrieved 6 November 2019.
  169. ^ «Changing the Python release cadence [LWN.net]». lwn.net. Archived from the original on 6 November 2019. Retrieved 6 November 2019.
  170. ^ Norwitz, Neal (8 April 2002). «[Python-Dev] Release Schedules (was Stability & change)». Archived from the original on 15 December 2018. Retrieved 27 June 2009.
  171. ^ 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.
  172. ^ «Python Buildbot». Python Developer’s Guide. Python Software Foundation. Archived from the original on 5 June 2020. Retrieved 24 September 2011.
  173. ^ «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.
  174. ^ «PEP 623 – Remove wstr from Unicode». Python.org. Archived from the original on 5 March 2021. Retrieved 14 February 2021.
  175. ^ «PEP 634 – Structural Pattern Matching: Specification». Python.org. Archived from the original on 6 May 2021. Retrieved 14 February 2021.
  176. ^ «Documentation Tools». Python.org. Archived from the original on 11 November 2020. Retrieved 22 March 2021.
  177. ^ a b «Whetting Your Appetite». The Python Tutorial. Python Software Foundation. Archived from the original on 26 October 2012. Retrieved 20 February 2012.
  178. ^ «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.
  179. ^ 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.
  180. ^ Fehily, Chris (2002). Python. Peachpit Press. p. xv. ISBN 9780201748840. Archived from the original on 17 July 2017. Retrieved 9 May 2017.
  181. ^ 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.
  182. ^ 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.
  183. ^ «Quotes about Python». Python Software Foundation. Archived from the original on 3 June 2020. Retrieved 8 January 2012.
  184. ^ «Organizations Using Python». Python Software Foundation. Archived from the original on 21 August 2018. Retrieved 15 January 2009.
  185. ^ «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.
  186. ^ 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.
  187. ^ «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.
  188. ^ «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.
  189. ^ «How we use Python at Spotify». Spotify Labs. 20 March 2013. Archived from the original on 10 June 2020. Retrieved 25 July 2018.
  190. ^ 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.
  191. ^ 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.
  192. ^ GitHub – reddit-archive/reddit: historical code from reddit.com., The Reddit Archives, archived from the original on 1 June 2020, retrieved 20 March 2019
  193. ^ «Usage statistics and market share of Python for websites». 2012. Archived from the original on 13 August 2021. Retrieved 18 December 2012.
  194. ^ 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.
  195. ^ 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.
  196. ^ Science education with SageMath, Innovative Computing in Science Education, archived from the original on 15 June 2020, retrieved 22 April 2019
  197. ^ «OpenCV: OpenCV-Python Tutorials». docs.opencv.org. Archived from the original on 23 September 2020. Retrieved 14 September 2020.
  198. ^ 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.
  199. ^ 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.
  200. ^ «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.
  201. ^ 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.
  202. ^ «Natural Language Toolkit — NLTK 3.5b1 documentation». www.nltk.org. Archived from the original on 13 June 2020. Retrieved 10 April 2020.
  203. ^ «Installers for GIMP for Windows – Frequently Asked Questions». 26 July 2013. Archived from the original on 17 July 2013. Retrieved 26 July 2013.
  204. ^ «jasc psp9components». Archived from the original on 19 March 2008.
  205. ^ «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.
  206. ^ 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.
  207. ^ 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.
  208. ^ «Python Language Guide (v1.0)». Google Documents List Data API v1.0. Archived from the original on 15 July 2010.
  209. ^ «Python Setup and Usage». Python Software Foundation. Archived from the original on 17 June 2020. Retrieved 10 January 2020.
  210. ^ «Immunity: Knowing You’re Secure». Archived from the original on 16 February 2009.
  211. ^ «Core Security». Core Security. Archived from the original on 9 June 2020. Retrieved 10 April 2020.
  212. ^ «What is Sugar?». Sugar Labs. Archived from the original on 9 January 2009. Retrieved 11 February 2012.
  213. ^ «4.0 New Features and Fixes». LibreOffice.org. The Document Foundation. 2013. Archived from the original on 9 February 2014. Retrieved 25 February 2013.
  214. ^ «Gotchas for Python Users». boo.codehaus.org. Codehaus Foundation. Archived from the original on 11 December 2008. Retrieved 24 November 2008.
  215. ^ Esterbrook, Charles. «Acknowledgements». cobra-language.com. Cobra Language. Archived from the original on 8 February 2008. Retrieved 7 April 2010.
  216. ^ «Proposals: iterators and generators [ES4 Wiki]». wiki.ecmascript.org. Archived from the original on 20 October 2007. Retrieved 24 November 2008.
  217. ^ «Frequently asked questions». Godot Engine documentation. Archived from the original on 28 April 2021. Retrieved 10 May 2021.
  218. ^ 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.
  219. ^ 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.
  220. ^ 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).
  221. ^ «An Interview with the Creator of Ruby». Linuxdevcenter.com. Archived from the original on 28 April 2018. Retrieved 3 December 2012.
  222. ^ 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.
  223. ^ 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.
  224. ^ 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.
  225. ^ «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.
  • Pilgrim, Mark (2004). Dive into Python. Apress. ISBN 978-1-59059-356-1.
  • Pilgrim, Mark (2009). Dive into Python 3. Apress. ISBN 978-1-4302-2415-0.
  • 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.

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

В настоящее время существует множество языков программирования. Может возникнуть вопрос: неужели нет какого-то одного универсального языка? Универсальный язык, который напрямую «понимает» компьютер, — язык машинных команд.

Однако человеку писать на таком языке очень сложно. Например, программа, которая выводит на экран строку «Hello, world!», на языке машинных команд будет выглядеть так: BB 11 01 B9 0D 00 B4 0E 8A 07 43 CD 10 E2 F9 CD 20 48 65 6C 6C 6F 2C 20 77 6F 72 6C 64 21.

Поэтому были разработаны языки программирования, правила и команды которых понятны для человека, а сами языки похожи на «естественные». Та же самая программа, выводящая фразу «Hello, world!», на языке Python выглядит следующим образом: print(“Hello, world!”).

У разных языков программирования есть свои достоинства и недостатки. В среде программистов считается, что одним из самых простых языков для новичков является именно Python (правильно его читать как «пайтон», с ударением на первый слог).

Первая версия Python была разработана в 1991 году программистом из Нидерландов Гвидо ван Россумом. В настоящее время выходят новые версии языка, которые расширяют его возможности, а сам он занимает верхние строчки рейтингов языков программирования. Python применяется во многих сферах: веб-разработка, анализ данных и машинное обучение и др.

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

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

Если у вас уже установлен интерпретатор и настроена среда разработки, вы можете смело переходить к следующей главе. А если нет — скачать интерпретатор для нужной операционной системы можно на сайте. Рекомендуемая версия — 3.10.

Далее необходимо сохранить файл-установщик и затем его запустить. Обратите внимание, что интерпретатор лучше установить в папку, в пути к которой будут только символы английского алфавита (это позволит в будущем избежать проблем с некоторыми библиотеками). Также не забудьте установить флажок «Add to PATH» для добавления путей до интерпретатора и вспомогательных программ в переменные окружения (это действие позволит обращаться к интерпретатору и установщику библиотек из любой папки системы).

После установки можно сразу приступить к созданию и запуску программ. Возникает вопрос: а где писать программы? Ответить можно так: где угодно, даже в «Блокноте». Главное, чтобы файл с программой сохранялся как текст, а у файла было расширение .py (английскими буквами, читается как «пай»). Затем эти программы можно запустить из командной строки следующим образом:

python program_1.py

Эту запись можно расшифровать так: «Операционная система, запусти интерпретатор — пусть он прочитает файл с нашей программой».

Однако писать программы в «Блокноте» не очень удобно — он даже не покажет опечатки и синтаксические ошибки. Поэтому для создания программ обычно используют специальные интегрированные среды разработки (IDE — Integrated Development Environment).

Для начала изучения Python вполне хватит среды разработки Visual Studio Code (также можно использовать Pycharm, однако он чуть более сложен в настройке). Необходимо скачать дистрибутив (установщик программы) для вашей операционной системы с сайта. После сохранения файла-инсталлятора его необходимо запустить, и начнётся процесс установки.

Параметры установки можно оставить по умолчанию. Как только она завершится, среду разработки можно запускать. Дополнительно стоит установить расширение для работы с Python (хотя часто оно устанавливается автоматически).

Запустив среду разработки, нажмите на иконку, как показано на рисунке ниже.

0_1.png

Слева откроется панель расширений. В поисковой строке наберите «Python» и установите это расширение, нажав на кнопку «Установить» (или убедитесь, что оно установлено автоматически, в таком случае не будет кнопки «Установить»).

0_2.png

Создайте папку с проектом, в котором будете создавать программы. Для этого выберите в стартовом окне пункт «Открыть папку», а затем создайте новую папку с проектом.

В панели проводника появится проект с заданным вами именем. Справа от названия выберите иконку создания нового файла.

0_3.png

Дайте имя файлу, например example_1.py.

0_4.png

Выберите внизу, в строке состояния, пункт «Выбор интерпретатора», а затем один из установленных интерпретаторов вашей системы.

0_5.png

Чтобы проверить правильность первоначальной настройки, скопируйте следующий код и запустите его, нажав на кнопку с треугольником справа вверху:

print("Привет, мир!")

Проверьте, что после запуска программы в нижней части окна среды разработки появилась вкладка «Терминал» и в ней напечатана фраза «Привет, мир!».

0_6.png

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

Введение в написание программ

Программа на языке Python состоит из набора инструкций. Каждая инструкция помещается на новую строку. Например:

print(2+3)
print(«Hello»)

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

print(2+3)
print(«Hello»)

Поэтому стоит помещать новые инструкции сначала строки. В этом одно из важных отличий пайтона от других языков программирования, как C# или Java.

Однако стоит учитывать, что некоторые конструкции языка могут состоять из нескольких строк. Например, условная конструкция if:

if 1< 2:
print(«Hello»)

В данном случае если 1 меньше 2, то выводится строка «Hello». И здесь уже должен быть отступ, так как инструкция print(«Hello») используется не сама по себе, а как часть условной конструкции if. Причем отступ, согласно руководству по оформлению кода, желательно делать из такого количество пробелов, которое кратно 4 (то есть 4, 8, 16 и т.д.) Хотя если отступов будет не 4, а 5, то программа также будет работать.

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

Регистрозависимость

Python — регистрозависимый язык, поэтому выражения print и Print или PRINT представляют разные выражения. И если вместо метода print для вывода на консоль мы попробуем использовать метод Print:

Print(«Hello World»)

то у нас ничего не получится.

Комментарии

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

Комментарии в Python бывают блочные и строчные. Все они предваряются знаком решетки (#).

Блочные комментарии ставятся в начале строки.

Строчные комментарии располагаются на той же строке, что и инструкции языка:

print(«Hello World») # Вывод сообщения на консоль

Основные функции

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

Основной функцией для вывода информации на консоль является функция print(). В качестве аргумента в эту функцию передается строка, которую мы хотим вывести:

print(«Hello Python»)

Если же нам необходимо вывести несколько значений на консоль, то мы можем передать их в функцию print через запятую:

print(«Full name:», «Tom», «Smith»)

В итоге все переданные значения склеятся через пробелы в одну строку:

Full name: Tom Smith

Если функция print отвечает за вывод, то функция input отвечает за ввод информации. В качестве необязательного параметра эта функция принимает приглашение к вводу и возвращает введенную строку, которую мы можем сохранить в переменную:

name = input(«Введите имя: «)
print(«Привет», name)

Консольный вывод:

Введите имя: Евгений

Привет Евгений

Переменные и типы данных

Переменная хранит определенные данные. Название переменной в Python должно начинаться с алфавитного символа или со знака подчеркивания и может содержать алфавитно-цифровые символы и знак подчеркивания. И кроме того, название переменной не должно совпадать с названием ключевых слов языка Python. Ключевых слов не так много, их легко запомнить: and, as, assert, break, class, continue, def, del, elif, else, except, False, finally, for, from, global, if, import, in, is, lambda, None, nonlocal, not, or, pass, raise, return, True, try, while, with, yield.

Например, создадим переменную:

name = «Tom»

Здесь определена переменная name, которая хранит строку «Tom».

В пайтоне применяется два типа наименования переменных: camel case и underscore notation.

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

userName = «Tom»

Underscore notation подразумевает, что подслова в наименовании переменной разделяются знаком подчеркивания. Например:

user_name = «Tom»

И также надо учитывать регистрозависимость, поэтому переменные name и Name будут представлять разные объекты.

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

  • boolean — логическое значение True или False
  • int — представляет целое число, например, 1, 4, 8, 50.
  • float — представляет число с плавающей точкой, например, 1.2 или 34.76
  • complex — комплексные числа
  • str — строки, например «hello». В Python 3.x строки представляют набор символов в кодировке Unicode
  • bytes — последовательность чисел в диапазоне 0-255
  • byte array — массив байтов, аналогичен bytes с тем отличием, что может изменяться
  • list — список
  • tuple — кортеж
  • set — неупорядоченная коллекция уникальных объектов
  • frozen set — то же самое, что и set, только не может изменяться (immutable)
  • dict — словарь, где каждый элемент имеет ключ и значение

Python является языком с динамической типизацией. Он определяет тип данных переменной исходя из значения, которое ей присвоено. Так, при присвоении строки в двойных или одинарных кавычках переменная имеет тип str. При присвоении целого числа Python автоматически определяет тип переменной как int. Чтобы определить переменную как объект float, ей присваивается дробное число, в котором разделителем целой и дробной части является точка. Число с плавающей точкой можно определять в экспоненциальной записи:

x =3.9e3
print(x) # 3900.0

x =3.9e-3
print(x) # 0.0039

Число float может иметь только 18 значимых симолов. Так, в данном случае используются только два символа — 3.9. И если число слишком велико или слишком мало, то мы можем записывать число в подобной нотации, используя экспоненту. Число после экспоненты указывает степень числа 10, на которое надо умножить основное число — 3.9.

При этом в процессе работы программы мы можем изменить тип переменной, присвоив ей значение другого типа:

user_id = «12tomsmith438» # тип str
print(user_id)

user_id = 234 # тип int
print(user_id)

С помощью функции type() динамически можно узнать текущий тип переменной:

user_id =»12tomsmith438″
print(type(user_id)) # user_id =234 # <class ‘str’>
print(type(user_id)) # <class ‘int’>

Операции с числами

Арифметические операции

Python поддерживает все распространенные арифметические операции:

  • +

Сложение двух чисел:

​print(6 + 2) # 8

Вычитание двух чисел:

​print(6 — 2) # 4

  • *

Умножение двух чисел:

​print(6 * 2) # 12

  • /

Деление двух чисел:

​print(6 / 2) # 3.0

  • //

Целочисленное деление двух чисел:

print(7 / 2) # 3.5
print(7 // 2) # 3​

Данная операция возвращает целочисленный результат деления, отбрасывая дробную часть

  • **

Возведение в степень:

print(6 ** 2) # Возводим число 6 в степень 2. Результат — 36

  • %

Получение остатка от деления:

print(7 % 2) # Получение остатка от деления числа 7 на 2. Результат — 1

В данном случае ближайшее число к 7, которое делится на 2 без остатка, это 6. Поэтому остаток от деления равен 7 — 6 = 1

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

Операции

Направление

**

Справо налево

* / // %

Слева направо

+ —

Слева направо

Пусть у нас выполняется следующее выражение:

number = 3 + 4 * 5 ** 2 + 7
print(number) # 110

Здесь начале выполняется возведение в степень (5 ** 2) как операция с большим приоритетом, далее результат умножается на 4 (25 * 4), затем происходит сложение (3 + 100) и далее опять идет сложение (103 + 7).

Чтобы переопределить порядок операций, можно использовать скобки:

number = (3 + 4) * (5 ** 2 + 7)
print(number) # 224

Следует отметить, что в арифметических операциях могут принимать участие как целые, так и дробные числа. Если в одной операции участвует целое число (int) и число с плавающей точкой (float), то целое число приводится к типу float.

Арифметические операции с присвоением

Ряд специальных операций позволяют использовать присвоить результат операции первому операнду:

  • +=

Присвоение результата сложения

  • -=

Присвоение результата вычитания

  • *=

Присвоение результата умножения

  • /=

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

  • //=

Присвоение результата целочисленного деления

  • **=

Присвоение степени числа

  • %=

Присвоение остатка от деления

Примеры операций:

number = 10
number += 5
print(number) # 15

number -= 3
print(number) # 12

number *= 4
print(number) # 48

Функции преобразования чисел

Ряд встроенных функций в Python позволяют работать с числами. В частности, функции int() и float() позволяют привести значение к типу int и float соответственно.

Например, пусть у нас будет следующий код:

first_number = «2»
second_number = 3
third_number = first_number + second_number

Мы ожидаем, что «2» + 3 будет равно 5. Однако этот код сгенерирует исключение, так как первое число на самом деле представляет строку. И чтобы все заработало как надо, необходимо привести строку к числу с помощью функции int():

first_number = «2»
second_number = 3
third_number = int(first_number) + second_number
print(third_number) # 5

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

first_number = 2.0001
second_number = 5
third_number = first_number / second_number
print(third_number) # 0.40002000000000004

В данном случае мы ожидаем получить число 0.40002, однако в конце через ряд нулей появляется еще какая-то четверка. Или еще одно выражение:

print(2.0001 + 0.1) # 2.1001000000000003

В этот случае для округления результата мы можем использовать функцию round():

first_number = 2.0001
second_number = 0.1
third_number = first_number + second_number
print(round(third_number, 4)) # 2.1001

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

Представление числа

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

Для определения числа в двоичной системе перед его значением ставится 0 и префикс b:

x = 0b101 # 101 в двоичной системе равно 5

Для определения числа в восьмеричной системе перед его значением ставится 0 и префикс o:

a = 0o11 # 11 в восьмеричной системе равно 9

Для определения числа в шестнадцатеричной системе перед его значением ставится 0 и префикс x:

y = 0x0a # a в шестнадцатеричной системе равно 10

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

x = 0b101 # 5
y = 0x0a # 10
z = x + y # 15
print(«{0} in binary {0:08b} in hex {0:02x} in octal {0:02o}».format(z))

Для вывода числа в различных системах исчисления используются функция format, которая вызывается у строки. В эту строку передаются различные форматы. Для двоичной системы «{0:08b}», где число 8 указывает, сколько знаков должно быть в записи числа. Если знаков указано больше, чем требуется для числа, то ненужные позиции заполняются нулями. Для шестнадцатеричной системы применяется формат «{0:02x}». И здесь все аналогично — запись числа состоит из двух знаков, если один знак не нужен, то вместо него вставляется ноль. А для записи в восьмеричной системе испольуется формат «{0:02o}».

Результат работы скрипта:

15 in binary 00001111 in hex 0f in octal 17

Условные выражения

Ряд операций представляют условные выражения. Все эти операции принимают два операнда и возвращают логическое значение, которое в Python представляет тип boolean. Существует только два логических значения — True (выражение истинно) и False (выражение ложно).

Операции сравнения

Простейшие условные выражения представляют операции сравнения, которые сравнивают два значения. Python поддерживает следующие операции сравнения:

  • ==

Возвращает True, если оба операнда равны. Иначе возвращает False.

  • !=

Возвращает True, если оба операнда НЕ равны. Иначе возвращает False.

  • > (больше чем)

Возвращает True, если первый операнд больше второго.

  • < (меньше чем)

Возвращает True, если первый операнд меньше второго.

  • >= (больше и равно)

Возвращает True, если первый операнд больше или равен второму.

  • <= (меньше и равно)

Возвращает True, если первый операнд меньше или равен второму.

Примеры операций сравнения:

a = 5
b = 6
result = 5 == 6 # сохраняем результат операции в переменную
print(result) # False — 5 не равно 6
print(a != b) # True
print(a > b) # False — 5 меньше 6
print(a < b) # True

bool1 = True
bool2 = False
print(bool1 == bool2) # False — bool1 не равно bool2

Операции сравнения могут сравнивать различные объекты — строки, числа, логические значения, однако оба операнда операции должны представлять один и тот же тип.

Логические операции

Для создания составных условных выражений применяются логические операции. В Python имеются следующие логические операторы:

  • and (логическое умножение)

Возвращает True, если оба выражения равны True

age = 22
weight = 58
result = age > 21 and weight == 58
print(result) # True

В данном случае оператор and сравнивает результаты двух выражений: age > 21 weight == 58. И если оба этих выражений возвращают True, то оператор and также возвращает True. Причем в качестве одно из выражений необязательно выступает операция сравнения: это может быть другая логическая операция или просто переменная типа boolean, которая хранит True или False.

age = 22
weight = 58
isMarried = False
result = age > 21 and weight == 58 and isMarried
print(result) # False, так как isMarried = False

  • or (логическое сложение)

Возвращает True, если хотя бы одно из выражений равно True

age = 22
isMarried = False
result = age > 21 or isMarried
print(result) # True, так как выражение age > 21 равно True

  • not (логическое отрицание)

Возвращает True, если выражение равно False

age = 22
isMarried = False
print(not age > 21) # False
print(not isMarried) # True

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

Аналогично если один из операндов оператора or возвращает True, то второй операнд не оценивается, так как оператор в любом случае возвратит True.

Операции со строками

Строка представляет последовательность символов в кодировке Unicode, заключенных в кавычки. Причем в Python мы можем использовать как одинарные, так и двойные кавычки:

name = «Tom»
surname = ‘Smith’
print(name, surname) # Tom Smith

Одной из самых распространенных операций со строками является их объединение или конкатенация. Для объединения строк применяется знак плюса:

name = «Tom»
surname = ‘Smith’
fullname = name + » » + surname
print(fullname) # Tom Smith

С объединением двух строк все просто, но что, если нам надо сложить строку и число? В этом случае необходимо привести число к строке с помощью функции str():

name = «Tom»
age = 33
info = «Name: » + name + » Age: » + str(age)
print(info) # Name: Tom Age: 33

Эскейп-последовательности

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

print(«Время пришло в гости отправитсяnЖдет меня старинный друг»)

На консоль выведет две строки:

Время пришло в гости отправится

Ждет меня старинный друг

Тоже самое касается и последовательности t, которая добавляет табляцию.

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

print(«Кафе «Central Perk»»)

Сравнение строк

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

str1 = «1a»
str2 = «aa»
str3 = «Aa»
print(str1 > str2) # False, так как первый символ в str1 — цифра
print(str2 > str3) # True, так как первый символ в str2 — в нижнем регистре

Поэтому строка «1a» условно меньше, чем строка «aa». Вначале сравнение идет по первому символу. Если начальные символы обоих строк представляют цифры, то меньшей считается меньшая цифра, например, «1a» меньше, чем «2a».

Если начальные символы представляют алфавитные символы в одном и том же регистре, то смотрят по алфавиту. Так, «aa» меньше, чем «ba», а «ba» меньше, чем «ca».

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

Зависимость от регистра не всегда желательна, так как по сути мы имеем дело с одинаковыми строками. В этом случае перед сравнением мы можем привести обе строки к одному из регистров.

Функция lower() приводит строку к нижнему регистру, а функция upper() — к верхнему.

str1 = «Tom»
str2 = «tom»
print(str1 == str2) # False — строки не равны

print(str1.lower() == str2.lower()) # True

Условная конструкция if

Условные конструкции используют условные выражения и в зависимости от их значения направляют выполнение программы по одному из путей. Одна из таких конструкций — это конструкция if. Она имеет следующее формальное определение:

if логическое_выражение:
инструкции
[elif логическое выражение:
инструкции]
[else:
инструкции]

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

age = 22
if age > 21:
print(«Доступ разрешен»)
print(«Завершение работы»)

Поскольку в данном случае значение переменной age больше 21, то будет выполняться блок if, а консоль выведет следующие строки:

Доступ разрешен

Завершение работы

Отступ желательно делать в 4 пробела или то количество пробелов, которое кратно 4.

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

Но если бы мы поставили бы отступы, то она также принадлежала бы к конструкции if:

age = 22
if age > 21:
print(«Доступ разрешен»)
print(«Завершение работы»)

Если вдруг нам надо определить альтернативное решение на тот случай, если условное выражение возвратит False, то мы можем использовать блок else:

age = 18
if age > 21:
print(«Доступ разрешен»)
else:
print(«Доступ запрещен»)

Если выражение age > 21 возвращает True, то выполняется блок if, иначе выполняется блок else.

Если необходимо ввести несколько альтернативных условий, то можно использовать дополнительные блоки elif, после которого идет блок инструкций.

age = 18
if age >= 21:
print(«Доступ разрешен»)
elif age >= 18:
print(«Доступ частично разрешен»)
else:
print(«Доступ запрещен»)

Вложенные конструкции if

Конструкция if в свою очередь сама может иметь вложенные конструкции if:

age = 18
if age >= 18:
print(«Больше 17»)
if age > 21:
print(«Больше 21»)
else:
print(«От 18 до 21»)

Стоит учитывать, что вложенные выражения if также должны начинаться с отступов, а инструкции во вложенных конструкциях также должны иметь отступы. Отступы, расставленные не должным образом, могут изменить логику программы. Так, предыдущий пример НЕ аналогичен следующему:

age = 18
if age >= 18:
print(«Больше 17»)
if age > 21:
print(«Больше 21»)
else:
print(«От 18 до 21»)

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

# Программа Обменный пункт

usd = 57
euro = 60

money = int(input(«Введите сумму, которую вы хотите обменять: «))
currency = int(input(«Укажите код валюты (доллары — 400, евро — 401): «))

if currency == 400:
cash = round(money / usd, 2)
print(«Валюта: доллары США»)
elif currency == 401:
cash = round(money / euro, 2)
print(«Валюта: евро»)
else:
cash = 0
print(«Неизвестная валюта»)

print(«К получению:», cash)

С помощью функции input() получаем вводимые пользователем данные на консоль. Причем данная функция возвращает данные в виде строки, поэтому нам надо ее еще привести к целому числу с помощью функции int(), чтобы введенные данные можно было использовать в арифметических операциях.

Программа подразумевает, что пользователь вводит количество средств, которые надо обменять, и код валюты, на которую надо произвести обмен. Коды валюты достаточно условны: 400 для долларов и 401 для евро.

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

В завершении на консоль выводится полученное значение. Например, запустим программу и введем какие-нибудь данные:

Введите сумму, которую вы хотите обменять: 20000

Укажите код валюты (доллары — 400, евро — 401): 401

Валюта: евро

К получению: 333.33

Циклы

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

Цикл while

Первый цикл, который мы рассмотрим, это цикл while. Он имеет следующее формальное определение:

while условное_выражение:
инструкции

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

Все инструкции, которые относятся к циклу while, располагаются на последующих строках и должны иметь отступ от начала строки.

choice = «y»

while choice.lower() == «y»:
print(«Привет»)
choice = input(«Для продолжения нажмите Y, а для выхода любую другую клавишу: «)
print(«Работа программы завешена»)

В данном случае цикл while будет продолжаться, пока переменная choice содержит латинскую букву «Y» или «y».

Сам блок цикла состоит из двух инструкций. Сначала выводится сообщение «Привет», а потом вводится новое значение для переменной choice. И если пользователь нажмет какую-то другую клавишу, отличную от Y, произойдет выход из цикла, так как условие choice.lower() == «y» вернет значение False. Каждый такой проход цикла называется итерацией.

Также обратите внимание, что последняя инструкция print(«Работа программы завешена») не имеет отступов от начала строки, поэтому она не входит в цикл while.

Дугой пример — вычисление факториала:

#! Программа по вычислению факториала

number = int(input(«Введите число: «))
i = 1
factorial = 1
while i <= number:
factorial *= i
i += 1
print(«Факториал числа», number, «равен», factorial)

Здесь вводит с консоли некоторое число, и пока число-счетчик i не будет больше введенного числа, будет выполняться цикл, в котором происходит умножения числа factorial.

Консольный вывод:

Введите число: 6

Факториал числа 6 равен 720

Цикл «for»

Другой тип циклов представляет конструкция for. Цикл for вызывается для каждого числа в некоторой коллекции чисел. Коллекция чисел создается с помощью функции range(). Формальное определение цикла for:

for int_var in функция_range:
инструкции

После ключевого слова for идет переменная int_var, которая хранит целые числа (название переменной может быть любое), затем ключевое слово in, вызов функции range() и двоеточие.

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

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

Рассмотрим на примере вычисления факториала:

#! Программа по вычислению факториала

number = int(input(«Введите число: «))
factorial = 1
for i in range(1, number+1):
factorial *= i
print(«Факториал числа», number, «равен», factorial)

Вначале вводим с консоли число. В цикле определяем переменную i, в которую сохраняются числа из коллекции, создаваемой функцией range.

Функция range здесь принимает два аргумента — начальное число коллекции (здесь число 1) и число, до которого надо добавлять числа (то есть number +1).

Допустим, с консоли вводится число 6, то вызов функции range приобретает следующую форму:

range(1, 6+1):

Эта функция будет создавать коллекцию, которая будет начинаться с 1 и будет последовательно наполняться целыми числами вплоть до 7. То есть это будет коллекция [1, 2, 3, 4, 5, 6].

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

Консольный вывод программы:

Введите число: 6

Факториал числа 6 равен 720

Функция «range»

Функция range имеет следующие формы:

  • range(stop): возвращает все целые числа от 0 до stop

  • range(start, stop): возвращает все целые числа в промежутке от start (включая) до stop (не включая). Выше в программе факториала использована именно эта форма.
  • range(start, stop, step): возвращает целые числа в промежутке от start (включая) до stop (не включая), которые увеличиваются на значение step

Примеры вызовов функции range:

range(5) # 0, 1, 2, 3, 4
range(1, 5) # 1, 2, 3, 4
range(2, 10, 2) # 2, 4, 6, 8
range(5, 0, -1) # 5, 4, 3, 2, 1

Например, выведем последовательно все числа от 0 до 4:

for i in range(5):
print(i, end=» «)

Вложенные циклы

Одни циклы внутри себя могут содержать другие циклы. Рассмотрим на примере вывода таблицы умножения:

for i in range(1, 10):
for j in range(1, 10):
print(i * j, end=»t»)
print(«n»)

Внешний цикл for i in range(1, 10) срабатывает 9 раз, так как в коллекции, возвращаемой функцией range, 9 чисел. Внутренний цикл for j in range(1, 10) срабатывает 9 раз для одной итерации внешнего цикла, и соответственно 81 раз для всех итераций внешнего цикла.

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

1 2 3 4 5 6 7 8 9

2 4 6 8 10 12 14 16 18

3 6 9 12 15 18 21 24 27

4 8 12 16 20 24 28 32 36

5 10 15 20 25 30 35 40 45

6 12 18 24 30 36 42 48 54

7 14 21 28 35 42 49 56 63

8 16 24 32 40 48 56 64 72

9 18 27 36 45 54 63 72 81

Выход из цикла. break и continue

Для управления циклом мы можем использовать специальные операторы break и continue. Оператор break осуществляет выход из цикла. А оператор continue выполняет переход к следующей итерации цикла.

Оператор break может использоваться, если в цикле образуются условия, которые несовместимы с его дальнейшим выполнением. Рассмотрим следующий пример:

#! Программа Обменный пункт

print(«Для выхода нажмите Y»)

while True:
data = input(«Введите сумму для обмена: «)
if data.lower() == «y»:
break # выход из цикла
money = int(data)
cache = round(money / 56, 2)
print(«К выдаче», cache, «долларов»)

print(«Работа обменного пункта завершена»)

Здесь мы имеем дело с бесконечным циклом, так как условие while True всегда истинно и всегда будет выполняться. Это популярный прием для создания программ, которые должны выполняться неопределенно долго.

В самом цикле получаем ввод с консоли. Мы предполагаем, что пользователь будет вводить число — условную сумму денег для обмена. Если пользователь вводит букву «Y» или «y», то с помощью оператора break выходим из цикла и прекращаем работу программы. Иначе делим введенную сумму на обменный курс, с помощью функции round округляем результат и выводим его на консоль. И так до бесконечности, пока пользователь не захочет выйти из программы, нажав на клавишу Y.

Консольный вывод программы:

Для выхода нажмите Y

Введите сумму для обмена: 20000

К выдаче 357.14 долларов

Введите сумму для обмена: Y

Работа обменного пункта завершена

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

#! Программа Обменный пункт

print(«Для выхода нажмите Y»)

while True:
data = input(«Введите сумму для обмена: «)
if data.lower() == «y»:
break # выход из цикла
money = int(data)
if money < 0:
print(«Сумма должна быть положительной!»)
continue
cache = round(money / 56, 2)
print(«К выдаче», cache, «долларов»)

print(«Работа обменного пункта завершена»)

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

И в этом случае мы уже не сможем получить результат для отрицательной суммы:

Для выхода нажмите Y

Введите сумму для обмена: -20000

Сумма должна быть положительной!

Введите сумму для обмена: 20000

К выдаче 357.14 долларов

Введите сумму для обмена: y

Работа обменного пункта завершена

Функции

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

def имя_функции ([параметры]):
инструкции

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

Например, определение простейшей функции:

def say_hello():
print(«Hello»)

Функция называется say_hello. Она не имеет параметров и содержит одну единственную инструкцию, которая выводит на консоль строку «Hello».

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

def say_hello():
print(«Hello»)

say_hello()
say_hello()
say_hello()

Здесь три раза подряд вызывается функция say_hello. В итоге мы получим следующий консольный вывод:

Hello

Hello

Hello

Теперь определим и используем функцию с параметрами:

def say_hello(name):
print(«Hello,»,name)

say_hello(«Tom»)
say_hello(«Bob»)
say_hello(«Alice»)

Функция принимает параметр name, и при вызове функции мы можем передать вместо параметра какой-либо значение:

Hello, Tom

Hello, Bob

Hello, Alice

Значения по умолчанию

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

def say_hello(name=»Tom»):
print(«Hello,», name)

say_hello()
say_hello(«Bob»)

Здесь параметр name является необязательным. И если мы не передаем при вызове функции для него значение, то применяется значение по умолчанию, то есть строка «Tom».

Именованные параметры

При передаче значений функция сопоставляет их с параметрами в том порядке, в котором они передаются. Например, пусть есть следующая функция:

def display_info(name, age):
print(«Name:», name, «t», «Age:», age)

display_info(«Tom», 22)

При вызове функции первое значение «Tom» передается первому параметру — параметру name, второе значение — число 22 передается второму параметру — age. И так далее по порядку. Использование именованных параметров позволяет переопределить порядок передачи:

def display_info(name, age):
print(«Name:», name, «t», «Age:», age)

display_info(age=22, name=»Tom»)

Именованные параметры предполагают указание имени параметра с присвоением ему значения при вызове функции.

Неопределенное количество параметров

С помощью символа звездочки можно определить неопределенное количество параметров:

def sum(*params):
result = 0
for n in params:
result += n
return result

sumOfNumbers1 = sum(1, 2, 3, 4, 5) # 15
sumOfNumbers2 = sum(3, 4, 5, 6) # 18
print(sumOfNumbers1)
print(sumOfNumbers2)

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

Возвращение результата

Функция может возвращать результат. Для этого в функции используется оператор return, после которого указывается возвращаемое значение:

def exchange(usd_rate, money):
result = round(money/usd_rate, 2)
return result

result1 = exchange(60, 30000)
print(result1)
result2 = exchange(56, 30000)
print(result2)
result3 = exchange(65, 30000)
print(result3)

Поскольку функция возвращает значение, то мы можем присвоить это значение какой-либо переменной и затем использовать ее: result2 = exchange(56, 30000).

В Python функция может возвращать сразу несколько значений:

def create_default_user():
name = «Tom»
age = 33
return name, age

user_name, user_age = create_default_user()
print(«Name:», user_name, «t Age:», user_age)

Здесь функция create_default_user возвращает два значения: name и age. При вызове функции эти значения по порядку присваиваются переменным user_name и user_age, и мы их можем использовать.

Функция «main»

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

def main():
say_hello(«Tom»)
usd_rate = 56
money = 30000
result = exchange(usd_rate, money)
print(«К выдаче», result, «долларов»)

def say_hello(name):
print(«Hello,», name)

def exchange(usd_rate, money):
result = round(money/usd_rate, 2)
return result

# Вызов функции main
main()

Область видимости переменных

Область видимости или scope определяет контекст переменной, в рамках которого ее можно использовать. В Python есть два типа контекста: глобальный и локальный.

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

name = «Tom»

def say_hi():
print(«Hello», name)

def say_bye():
print(«Good bye», name)

say_hi()
say_bye()

Здесь переменная name является глобальной и имеет глобальную область видимости. И обе определенные здесь функции могут свободно ее использовать.

В отличие от глобальных переменных локальная переменная определяется внутри функции и доступна только из этой функции, то есть имеет локальную область видимости:

def say_hi():
name = «Sam»
surname = «Johnson»
print(«Hello», name, surname)

def say_bye():
name = «Tom»
print(«Good bye», name)

say_hi()
say_bye()

В данном случае в каждой из двух функций определяется локальная переменная name. И хотя эти переменные называются одинаково, но тем не менее это дву разных переменных, каждая из которых доступна только в рамках своей функции. Также в функции say_hi определена переменная surname, которая также является локальной, поэтому в функции say_bye мы ее использовать не сможем.

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

name = «Tom»

def say_hi():
print(«Hello», name)

def say_bye():
name = «Bob»
print(«Good bye», name)

say_hi() # Hello Tom
say_bye() # Good bye Bob

Здесь определена глобальная переменная name. Однако в функции say_bye определена локальная переменная с тем же именем name. И если функция say_hi использует глобальную переменную, то функция say_bye использует локальную переменную, которая скрывает глобальную.

Если же мы хотим изменить в локальной функции глобальную переменную, а не определить локальную, то необходимо использовать ключевое слово global:

def say_bye():
global name
name = «Bob»
print(«Good bye», name)

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

PI = 3.14

# вычисление площади круга
def get_circle_square(radius):

print(«Площадь круга с радиусом», radius, «равна», PI * radius * radius)

get_circle_square(50)

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

Модули

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

Для создания модуля необходимо создать собственно файл с расширением *.py, который будет представлять модуль. Название файла будет представлять название модуля. Затем в этом файле надо определить одну или несколько функций.

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

Для этого сначала определим новый модуль: создадим новый файл, который назовем account.py, в той же папке, где находится hello.py. Если используется PyCharm или другая IDE, то оба файла просто помещаются в один проект.

Соответственно модуль будет называться account. И определим в нем следующий код:

def calculate_income(rate, money, month):
if money <= 0:
return 0

for i in range(1, month+1):
money = round(money + money * rate / 100 / 12, 2)
return money

Здесь определена функция calculate_income, которая в качестве параметров получает процентную ставку вклада, сумму вклада и период, на который делается вклад, и высчитывает сумму, которая получится в конце данного периода.

В файле hello.py используем данный модуль:

#! Программа Банковский счет
import account

rate = int(input(«Введите процентную ставку: «))
money = int(input(«Введите сумму: «))
period = int(input(«Введите период ведения счета в месяцах: «))

result = account.calculate_income(rate, money, period)
print(«Параметры счета:n», «Сумма: «, money, «n», «Ставка: «, rate, «n»,
«Период: «, period, «n», «Сумма на счете в конце периода: «, result)

Для использования модуля его надо импортировать с помощью оператора import, после которого указывается имя модуля: import account.

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

Получив пространство имен модуля, мы сможем обратиться к его функциям по схеме пространство_имен.функция:

account.calculate_income(rate, money, period)

И после этого мы можем запустить главный скрипт hello.py, и он задействует модуль account.py. В частности, консольный вывод мог бы быть следующим:

Введите процентную ставку: 10Введите сумму: 300000Введите период ведения счета в месяцах: 6Параметры счета: Сумма: 300000 Ставка: 10 Период: 6 Сумма на счете в конце периода: 315315.99

Настройка пространства имен

По умолчанию при импорте модуля он доступен через одноименное пространство имен. Однако мы можем переопределить это поведение. Так, ключевое слово as позволяет сопоставить модуль с другим пространством имен. Например:

import account as acc

#……………

result = acc.calculate_income(rate, money, period)

В данном случае пространство имен будет называться acc.

Другой вариант настройки предполагает импорт функциональности модуля в глобальное пространство имен текущего модуля с помощью ключевого слова from:

from account import calculate_income

#……………

result = calculate_income(rate, money, period)

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

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

from account import *

#……………

result = calculate_income(rate, money, period)

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

Имя модуля

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

При выполнении модуля среда определяет его имя и присваивает его глобальной переменной __name__ (с обеих сторон два подчеркивания). Если модуль является запускаемым, то его имя равно __main__ (также по два подчеркивания с каждой стороны). Если модуль используется в другом модуле, то в момент выполнения его имя аналогично названию файла без расширения py. И мы можем это использовать. Так, изменим содержимое файла account.py:

def calculate_income(rate, money, month):
if money <= 0:
return 0

for i in range(1, month+1):
money = round(money + money * rate / 100 / 12, 2)
return money

def main():
rate = 10
money = 100000
period = 12

result = calculate_income(rate, money, period)
print(«Параметры счета:n», «Сумма: «, money, «n», «Ставка: «, rate, «n»,
«Период: «, period, «n», «Сумма на счете в конце периода: «, result)

if __name__==»__main__»:
main()

Кроме того, для тестирования функции определена главная функция main. И мы можем сразу запустить файл account.py отдельно от всех и протестировать код.

Следует обратить внимание на вызов функции main:

if __name__==»__main__»:
main()

Переменная __name__ указывает на имя модуля. Для главного модуля, который непосредственно запускается, эта переменная всегда будет иметь значение __main__ вне зависимости от имени файла.

Поэтому, если мы будем запускать скрипт account.py отдельно, сам по себе, то Python присвоит переменной __name__ значение __main__, далее в выражении if вызовет функцию main из этого же файла.

Однако если мы будем запускать другой скрипт, а этот — account.py — будем подключать в качестве вспомогательного, для account.py переменная __name__ будет иметь значение account. И соответственно метод main в файле account.py не будет работать.

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

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

#! Программа Банковский счет
import account

def main():
rate = int(input(«Введите процентную ставку: «))
money = int(input(«Введите сумму: «))
period = int(input(«Введите период ведения счета в месяцах: «))

result = account.calculate_income(rate, money, period)
print(«Параметры счета:n», «Сумма: «, money, «n», «Ставка: «, rate, «n»,
«Период: «, period, «n», «Сумма на счете в конце периода: «, result)

if __name__ == «__main__»:
main()

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

При программировании на Python мы можем столкнуться с двумя типами ошибок. Первый тип представляют синтаксические ошибки (syntax error). Они появляются в результате нарушения синтаксиса языка программирования при написании исходного кода. При наличии таких ошибок программа не может быть скомпилирована. При работе в какой-либо среде разработки, например, в PyCharm, IDE сама может отслеживать синтаксические ошибки и каким-либо образом их выделять.

Второй тип ошибок представляют ошибки выполнения (runtime error). Они появляются в уже скомпилированной программе в процессе ее выполнения. Подобные ошибки еще называются исключениями. Например, в прошлых темах мы рассматривали преобразование числа в строку:

string = «5»
number = int(string)
print(number)

Данный скрипт успешно скомпилируется и выполнится, так как строка «5» вполне может быть конвертирована в число. Однако возьмем другой пример:

string = «hello»
number = int(string)
print(number)

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

string = input(«Введите число: «)
number = int(string)
print(number)

При возникновении исключения работа программы прерывается, и чтобы избежать подобного поведения и обрабатывать исключения в Python есть конструкция try..except, которая имеет следующее формальное определение:

try:

инструкции

except [Тип_исключения]:

инструкции

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

После ключевого слова except опционально можно указать, какое исключение будет обрабатываться (например, ValueError или KeyError). После слова except на следующей стоке идут инструкции блока except, выполняемые при возникновении исключения.

Рассмотрим обработку исключения на примере преобразовании строки в число:

try:
number = int(input(«Введите число: «))
print(«Введенное число:», number)
except:
print(«Преобразование прошло неудачно»)
print(«Завершение программы»)

Вводим строку:

Введите число: hello

Преобразование прошло неудачно

Завершение программы

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

Вводим правильное число:

Введите число: 22

Введенное число: 22

Завершение программы

Теперь все выполняется нормально, исключение не возникает, и соответственно блок except не выполняется.

В примере выше обрабатывались сразу все исключения, которые могут возникнуть в коде. Однако мы можем конкретизировать тип обрабатываемого исключения, указав его после слова except:

try:
number = int(input(«Введите число: «))
print(«Введенное число:», number)
except ValueError:
print(«Преобразование прошло неудачно»)
print(«Завершение программы»)

Если ситуация такова, что в программе могут быть сгенерированы различные типы исключений, то мы можем их обработать по отдельности, используя дополнительные выражения except:

try:
number1 = int(input(«Введите первое число: «))
number2 = int(input(«Введите второе число: «))
print(«Результат деления:», number1/number2)
except ValueError:
print(«Преобразование прошло неудачно»)
except ZeroDivisionError:
print(«Попытка деления числа на ноль»)
except Exception:
print(«Общее исключение»)
print(«Завершение программы»)

Если возникнет исключение в результате преобразования строки в число, то оно будет обработано блоком except ValueError. Если же второе число будет равно нулю, то есть будет деление на ноль, тогда возникнет исключение ZeroDivisionError, и оно будет обработано блоком except ZeroDivisionError.

Тип Exception представляет общее исключение, под которое попадают все исключительные ситуации. Поэтому в данном случае любое исключение, которое не представляет тип ValueError или ZeroDivisionError, будет обработано в блоке except Exception:.

Блок finally

При обработке исключений также можно использовать необязательный блок finally. Отличительной особенностью этого блока является то, что он выполняется вне зависимости, было ли сгенерировано исключение:

try:
number = int(input(«Введите число: «))
print(«Введенное число:», number)
except ValueError:
print(«Не удалось преобразовать число»)
finally:
print(«Блок try завершил выполнение»)
print(«Завершение программы»)

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

Получение информации об исключении

С помощью оператора as мы можем передать всю информацию об исключении в переменную, которую затем можно использовать в блоке except:

try:
number = int(input(«Введите число: «))
print(«Введенное число:», number)
except ValueError as e:
print(«Сведения об исключении», e)
print(«Завершение программы»)

Пример некорректного ввода:

Введите число: fdsf

Сведения об исключении invalid literal for int() with base 10: ‘fdsf’

Завершение программы

Генерация исключений

Иногда возникает необходимость вручную сгенерировать то или иное исключение. Для этого применяется оператор raise.

try:
number1 = int(input(«Введите первое число: «))
number2 = int(input(«Введите второе число: «))
if number2 == 0:
raise Exception(«Второе число не должно быть равно 0»)
print(«Результат деления двух чисел:», number1/number2)
except ValueError:
print(«Введены некорректные данные»)
except Exception as e:
print(e)
print(«Завершение программы»)

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

Введите первое число: 1

Введите второе число: 0

Второе число не должно быть равно 0

Завершение программы

Разбираем основы синтаксиса Python, изучаем Style Guide по написанию кода, устанавливаем и запускаем интерпретатор.

Logo Python Course Lesson 1

Урок 1
Установка. Синтаксис.

Разбираем основы синтаксиса Python, изучаем Style Guide по написанию кода, устанавливаем и запускаем интерпретатор.

ТЕОРЕТИЧЕСКИЙ БЛОК

One

Среда исполнения Python

Как известно, все кросс-платформенные языки программирования построены по одной модели:

  1. Исходный код(является переносимым между платформами);
  2. Среда исполнения, она же — Runtime Environment(не является переносимой и специфична для каждой конкретной платформы).

Например, в среду исполнения Java дополнительно входит компилятор, так как исходный код необходимо скомпилировать в байт-код для виртуальной Java-машины. В среду исполнения Python входит только интерпретатор, который одновременно является и компилятором, однако компилирует исходный код Python непосредственно в машинный код целевой платформы.

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

Схема работы интерпретатора

Схема работы интерпретатора

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

  1. Воспользоваться онлайн интерпретатором.
  2. Установить интерпретатор Python у себя на машине. Вызывать его из консоли.
  3. Установить интерпретатор Python у себя на машине. Установить интегрированную среду разработки (IDE). Например, PyCharm. Писать и запускать скрипты внутри IDE.

Пояснение: Мы часто сталкиваемся с необходимостью запустить или быстро проверить какой-то код, и для такой простой задачи совсем не обязательно запускать тяжёлые десктопные IDE или прикладные интерпретаторы. Достаточно воспользоваться онлайн-инструментами, которые позволяют всё сделать намного быстрее: Ctrl+C, Ctrl+V, Run — и вывод программы уже перед Вами. Пример онлайн-интерпретатора: Repl.it.

Мы же пойдем немного более сложным, но гораздо более перспективным путем — установим интерпретатор Python на Ваш компьютер. И так же поработаем с IDE PyCharm.
Чем хороша данная интегрированная среда разработки? IDE PyCharm предназначена именно для Python. PyCharm «из коробки» поддерживает разработку на Python напрямую — открываем новый файл и пишем код. Запускаем и отлаживаем код прямо из PyCharm.

Two

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

В Python нет символа, который бы отвечал за отделение выражений друг от друга в исходном коде, как, например, точка с запятой (;) в C++ или Java. Также отсутствует такая конструкция, как фигурные скобки {}, позволяющая объединить группу инструкций в единый блок. Физические строки разделяются самим символом конца строки, но если выражение слишком длинное для одной строки, то две физических строки можно объединить в одну логическую. Для этого необходимо в конце первой строки ввести символ обратного слэша (), и тогда следующую строку интерпретатор будет трактовать как продолжение первой.

Для выделения блоков кода используются исключительно отступы. Логические строки с одинаковым размером отступа формируют блок, и заканчивается блок в том случае, когда появляется логическая строка с отступом меньшего размера:

Основная инструкция:
    Вложенный блок инструкций 

Именно поэтому первая строка в сценарии Python не должна иметь отступа.

Имеется стандартный набор операторов и ключевых слов( if, then, while, return и т.д.), большая часть которых уже знакома программистам.

Используются стандартные правила для заданий идентификаторов переменных, методов и классов – имя должно начинаться с подчеркивания или латинского символа любого регистра и не может содержать символов @, $, %. Также не может использоваться в качестве идентификатора только один символ подчеркивания.

Для обозначения комментариев используется символ #. Комментарии и пустые строки интерпретатор игнорирует.

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

Three

Style Guide по написанию кода

В борьбе за красивый и понятный код Python-сообществу нужны ориентиры: что такое хорошо, и что такое плохо. Создатель языка Гвидо ван Россум(Guido van Rossum) и его соратник Барри Уорсо(Barry Warsaw) дали рекомендации по написанию «правильного» Py-кода в документе PEP8.

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

Итак, перед Вами 18 правил написания кода на Python:

Style Guide по написанию кода на Python

  1. На каждый уровень отступа используйте по 4 пробела.
  2. Длину строки рекомендуется ограничить 79 символами.
  3. Функции верхнего уровня и определения классов отделяются двумя пустыми строками. Определения методов внутри класса разделяются одной пустой строкой. Дополнительные пустые строки используются для логического разделения.
  4. Для каждого импорта — отдельная строка. Порядок расположения — стандартные библиотеки, сторонние библиотеки, локальные модули приложения. Импорты всегда помещаются в начале файла, сразу после комментариев к модулю и строк документации, и перед объявлением констант.
  5. Избегайте лишних пробелов внутри круглых, квадратных или фигурных скобок.
  6. Используйте одиночный пробел с каждой стороны у операторы присваивания =, +=, -=, операторов сравнения ==, <, >, !=, <>, <=, >=, in, not in, is, is not и логических операторов and, or, not. Не используйте пробелы вокруг знака =, если он используется для обозначения именованного аргумента или значения параметров по умолчанию.
  7. Комментарии, которые противоречат коду, хуже, чем их отсутствие. Всегда исправляйте комментарии при обновлении кода.
  8. Никогда не используйте символы l (маленькая латинская буква «L»), O (заглавная латинская буква «o») или I(заглавная латинская буква «i») в качестве имен.
  9. Модули должны иметь короткие имена, состоящие из маленьких букв.
  10. Имена классов должны обычно следовать соглашению CapitalizedWords (слова с заглавными буквами).
  11. Имена функций должны состоять из маленьких букв, а слова разделяться символами подчеркивания (lower_case_with_underscores).
  12. Для имен методов и переменных экземпляров классов используйте тот же стиль, что и для имен функций.
  13. Всегда используйте self в качестве первого аргумента метода экземпляра объекта. Всегда используйте cls в качестве первого аргумента метода класса.
  14. Сравнения с None должны обязательно выполняться с использованием операторов is или is not, а не с помощью операторов сравнения.
  15. Наследуйте свой класс исключения от Exception. Перехватывайте конкретные ошибки вместо простого выражения except.
  16. Всегда используйте выражение def, а не присваивание лямбда-выражения к имени.
  17. Постарайтесь заключать в каждую конструкцию try…except минимум кода, чтобы легче отлавливать ошибки.
  18. Для последовательностей (строк, списков, кортежей) используйте тот факт, что пустая последовательность есть false.

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

PEP8 можно определить, как документ, описывающий общепринятый стиль написания кода на языке Python. Python Enhanced Proposal (PEP) — переводится, как заявки по улучшению языка Python. Помимо PEP8, так же имеются и другие документы под индексами, о которых можно прочитать в PEP0. Но наибольшего внимания заслуживает именно PEP8, а так же PEP7 (в нем описывается, какого стиля следует придерживаться при написании кода на C в реализации языка python).

ПРАКТИЧЕСКИЙ БЛОК

One

Установка интерпретатора Python

Чтобы начать работать с Python 3, вам нужно получить доступ к интерпретатору Python. Существует несколько общих способов сделать это:

  1. Python можно получить на сайте Python Software Foundation python.org. Как правило, это означает загрузку нужного установочного файла для вашей операционной системы и запуска его на вашем компьютере.
  2. Некоторые операционные системы, особенно Linux, предоставляют менеджер пакетов, который можно запустить для установки Python.
  3. Для macOS лучший способ установить Python 3 включает в себя установку менеджера пакетов под названием Homebrew.

Получить более подробную инструкцию по установке можно здесь: https://install-python

А также предлагаем вам посмотреть наше видео-руководство, где мы наглядно показываем, как установить интерпретатор Python на операционные системы Windows 10 и MacOS.

Хронометраж
00:25 Установка Python на Windows 10
04:10 Установка Python на MacOS Catalina

Теперь, когда мы установили Python, давайте посмотрим, как создать вашу первую(а может и не первую) программу. Существует два способа запуска программ на Python:

  1. Использование интерактивного режима интерпретатора
  2. Использование файла с текстом программы.

Two

Способ 1. Интерактивный режим.

Как попасть в интерактивный режим?
Необходимо выполнить следующие действия:

  1. Открыть консоль(командная строка в случае Windows или терминал для ОС семейства Linux).
  2. Ввести python3, тем самым вызвав интерпретатор, и нажать Enter
  3. Далее вы должны увидеть символы >>>. Это значит, что вы успешно перешли в командную строку интерпретатора Python.

Например, в терминале MacOS успешный вход в интерактивный режим выглядит следующим образом:

Интерпретатор Python и терминал консоль

$ python3
Python 3.7.5 (default, Nov  5 2019, 23:12:00) 
[Clang 9.0.0 (clang-900.0.39.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

Теперь вы можете вводить команды прямо в командную строку интерпретатора. Обратите внимание, что Python выдаёт результат работы строки немедленно! Для примера создадим список и выведем его содержимое в консоль с помощью метода print():

>>> lst = list('Интерактивный режим')
>>> print(lst)
['И', 'н', 'т', 'е', 'р', 'а', 'к', 'т', 'и', 'в', 'н', 'ы', 'й', ' ', 'р', 'е', 'ж', 'и', 'м']
>>>

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

Three

Способ 2. Запускаем файл с текстом программы.

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

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

Листинг программы на Python

  1. Создайте файл с расширением *.py.
  2. В качестве содержимого созданного файла напишите код вашей программы.
  3. Из консоли вызовите интерпретатор python3 и в качестве параметра укажите ему путь к файлу с программой: python3 <program_file>
  4. Нажмите Enter и наслаждайтесь результатом выполнения!

Повторим пример с созданием списка и выводом его содержимого, но уже в режиме запуска программы из файла. Создадим файл my_program.py. Код программы внутри него будет состоять из 2 строк(как и в первом случае создадим список и выведем его содержимое):

Код программы(содержимое файла my_program.py)

lst = list('Запуск программы')
print(lst)

Далее запустим интерпретатор и дадим ему путь к нашему файлу:

$ python3 my_program.py
['З', 'а', 'п', 'у', 'с', 'к', ' ', 'п', 'р', 'о', 'г', 'р', 'а', 'м', 'м', 'ы']

Four

Практика

Подробная видео-инструкция по работе c двумя режимами интерпретатора Python ждет вас в Уроке 2. Типы данных в Python. А пока предлагаем вам самостоятельно выполнить следующие действия:

1. Установить Python на свой рабочий компьютер(см. инструкцию по установке в соответствующем пункте практической части урока)
2. Ознакомиться с интерактивным режимом работы Python. Для этого:

  1. В терминале/консоли войдите в интерактивный режим
  2. Выполните команду ‘print(‘Hello, World!’)
  3. Попробуйте выполнить другие команды

3. Запустить программу на Python из файла. Для этого:

  1. Создайте файл my_program.py
  2. Добавьте в качестве его содержимого программу, состоящую из одной команды: print(‘Hello, World!’)
  3. Сохраните изменения в файле
  4. В терминале обратитесь к интерпретатору Python и укажите ему, какой файл с программой необходимо запустить: python3 my_program.py
  5. Попробуйте изменить содержимое программы.

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

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

Как вам материал?

Читайте также

На чтение 12 мин Просмотров 2.1к. Опубликовано 04.10.2021

Python – это интерпретируемый язык программирования, упор в котором сделан на простоту и чистоту кода, что делает его идеальным кандидатом на роль первого языка для изучения. В этом уроке мы рассмотрим особенности данного языка и погрузим Вас в его экосистему.
Что такое программирование на Python?
Языки программирования можно условно разделить на специализированные и языки общего назначения. Специализированные, как следует из названия, созданы и применяются для каких-либо определённых целей. Языки общего назначения, напротив, призваны выполнять широкий спектр задач. К таким языкам и относится Python. Про этот язык часто говорят, что у него «батарейки внутри». Это означает, что язык включает в себя множество готовых решений и удобных инструментов. Почти любую задачу можно решить, используя встроенные в язык средства либо подключив модуль, разработанный сообществом. На данный момент в индексе PyPi (the Python Package Index – главный агрегатор модулей Python) находится 330826 проектов, 2916363 релиза, 4944653 файла, зарегистрировано 540758 участников, что свидетельствует о зрелом и очень большом сообществе, сформировавшемся вокруг языка.
В языке используется «утиная» типизация, что очень удобно.
В список областей, где применяется Пайтон, входят:

  • анализ данных
  • машинное обучение
  • веб-разработка
  • научные и математические исследования
  • создание десктопных приложений
    Как уже говорилось, Питон прост в освоении благодаря короткому и выразительному синтаксису, но эта простота обманчива. За ней скрывается мощь языка высокого уровня. Это означает, что он не только лёгок в освоении, позволяет быстро писать код, но и чрезвычайно эффективен.
    Кроме неоспоримых плюсов стоит отметить и ряд минусов:
    Из популярных языков программирования этот – один из самых медленных
    У языка существуют некоторые проблемы с асинхронным программированием
    Особенности типизации и обработки исключений дают большие возможности «выстрелить себе в ногу» — достаточно легко допустить ошибку в коде.

Содержание

  1. История Python
  2. Происхождение названия
  3. Логотип
  4. Даты релизов
  5. Особенности программирования на Python
  6. Простой язык, легкий и доступный в изучении
  7. Бесплатный и с открытым кодом
  8. Портативность
  9. Масштабируемый и встраиваемый
  10. Высокоуровневый, интерпретируемый язык
  11. Стандартные библиотеки для решения общих задач
  12. Объектно-ориентированный
  13. Юмор в Питоне
  14. Приложения на Python
  15. Веб-программирование
  16. Научные и математические вычисления
  17. Прототипирование
  18. Почему стоит начать с Питона?
  19. Простой язык для изучения программирования
  20. Не слишком строгий
  21. Первая программа на Python
  22. Программа сложения двух чисел
  23. Как работает эта программа?
  24. Важные вещи, о которых следует помнить.
  25. Научитесь самостоятельно программировать на Python
  26. Изучите Python с помощью pythoninfo.ru
  27. Рекомендуемые книги
  28. Эрик Мэтиз. Изучаем Python. Программирование игр, визуализация данных, веб-приложения
  29. Учим Python, делая крутые игры (2017)
  30. Билл Любанович. Простой Python. Современный стиль программирования
  31. Дэн Бейдер. Чистый Python. Тонкости программирования для профи
  32. Бизли и Джонс. Python. Книга рецептов
  33. Джульен Данжу. Путь Python
  34. Марк Лутц «Изучаем Python»
  35. Марк Лутц «Программирование на Python»

История Python

Питон – язык не новый. Его разработка началась ещё в конце восьмидесятых годов. Релиз первой версии языка произошёл в феврале 1991 года.
Отцом-основателем Питона и, на протяжении многих лет, главным разработчиком являлся голландский программист Гвидо Ван Россум. На момент создания языка Гвидо работал в центре математики и информатики в Нидерландах. В качестве основы для Пайтона Россум взял язык программирования ABC, в разработке которого когда-то участвовал.
Почему выбрали Python
Нет. Он не назван в честь опасной змеи. Россум был фанатом комедийного сериала в конце 70-х. Название “Python” было взято из этого же сериала “Monty Python’s Flying Circus” (Летающий цирк Монти Пайтона).

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

Язык назван в честь телевизионного шоу «Летающий цирк Монти Пайтона», популярного в то время. Не смотря на этот факт, в сообществе прочно укрепилась связь между названием языка и змеями, чему способствует логотип: две змеи.
Как правильно звучит название?
Правильно произносится слово «Python» как «Пайтон». Однако, среди русскоязычных програмистов укоренилось произношение «Питон».

Логотип

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

Логотип создал брат создателя языка, Юст ван Россум — программист и шрифтовой дизайнер.

Даты релизов

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

Особенности программирования на Python

Простой язык, легкий и доступный в изучении

У Python короткий и выразительный синтаксис, особенно в сравнении с такими императивными языками, как C++, Java, C#. Изюминкой синтаксиса является то, что вложенность обозначается отступами слева, а не фигурными скобками или другими знаками. Можно сказать, что благодаря этому язык диктует хороший стиль оформления кода. Так же существует единый стандарт оформления (PEP-8) и во многих средах программирования можно привести код к этому стандарту при помощи нажатия одной комбинации клавиш.
Простота отчасти обусловлена тем, что Питон написан на основе языка ABC, который использовался для обучения программированию.

Бесплатный и с открытым кодом

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

Портативность

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

Масштабируемый и встраиваемый

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

Высокоуровневый, интерпретируемый язык

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

Стандартные библиотеки для решения общих задач

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

Объектно-ориентированный

Несмотря на то, что здесь есть конструкции из функционального программирования, объектно-ориентированный подход в Python достиг своего апогея: всё, начиная от типа и заканчивая строковым литералом, является объектом.

Юмор в Питоне

В языке есть много «пасхалок». К примеру, если выполнить команду «import this», интерпретатор выведет Дзен Питона – своеобразный свод философских постулатов языка. Ещё интереснее становится если выполнить «import antigravity», «from __future__ import braces». Пробуйте!

Приложения на Python

Веб-программирование

Благодаря таким фреймворкам, как Django и Flask Питон прочно закрепился в мире программирования для веба. Этот язык используется на сайтах таких компаний как Instagram, Disqus, Mozilla, The Washington Times, Pinterest, YouTube, Google и др.

Научные и математические вычисления

У Python много библиотек для научных и математических вычислений. Вот короткий список основных из них: SciPy, Pandas и NumPy. Так же стоит отметить пакет Anaconda и Jupyter Notebook —мощный инструмент для разработки и представления проектов Data Science в интерактивном виде.
Также, язык часто используется в машинном обучении, анализе и сборе данных.

Прототипирование

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

Почему стоит начать с Питона?

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

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

Не слишком строгий

Не нужно определять тип переменной в Python. Нет необходимости добавлять “;” в конце строки.
Python принуждает следовать методам написания читаемого кода (например, одинаковым отступам). Эти мелочи могут значительно облегчить обучение новичкам.

Первая программа на Python

По традиции, изучение любого языка программирования начинают с программы «Hello, World!». Её суть состоит в том, что на экран надо вывести надпись… «Hello, World!». Давайте сравним как выглядит текст этой простейшей программы на разных языках.

C#:


using System;

namespace HelloWorld
{
class Hello
{
static void Main()
{
Console.WriteLine("Hello World!");
}
}
}

Go:


package main

import "fmt"

func main() {
fmt.Println("Hello, World!")
}

Java:


public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World");
}
}

Python:

Да уж, что может быть проще, чем «напечатай(«Hello, World!»)» 🙂

Программа сложения двух чисел


# Сложение чисел
первое_число = 2
второе_число = 3
сумма = первое_число + второе_число
print(сумма)
# Вывод:
5

Как работает эта программа?

Строка 1: # Сложение чисел
Эта строка – комментарий. По своему назначению она сходна с пометкой на полях рабочей тетради.
Строка 2: первое_число = 2
Здесь, «первое_число» — переменная. Она предназначена для хранения какого-либо значения, имеет свой тип и является объектом. В этом случае, 2 сохраняется в переменной «первое_число». И да, Вы можете писать всё, кроме ключевых слов, на русском языке (или любом другом, символы которого входят в utf-8).
Строка 3: второе_чисо = 3
Аналогично, 3 сохраняется в переменной «второе_чисо».
Строка 4: сумма = первое_число + второе_число
Переменная первое_число прибавляется к первое_число с помощью оператора +. Результат сложения сохраняется в другой переменной сумма.
Строка 5: print(сумма)
Функция print() выводит результат на экран. В нашем случае, она выводит на экран 8.

Важные вещи, о которых следует помнить.

В большинстве случаев конец строки означает конец команды. Использование “;” в конце утверждения не требуется (в отличии от многих других, в основном императивных, языков).
Вместо фигурных скобок { }, используются отступы (4 пробела и табуляция) для перехода на новый уровень вложенности.


def родитель():
    ребёнок_1 = 1
    ребёнок_2 = 2
    if ребёнок_1 == ребёнок_2:
        внук = 3
    else:
        внук = 'Значение не присвоено.'
    return внук
print(родитель())
# Вывод:
Значение не присвоено.

Научитесь самостоятельно программировать на Python

Изучите Python с помощью pythoninfo.ru

PythonInfo предоставляет бесплатные уроки и примеры, которые помогут Вам изучить программирование с нуля.
Наши уроки ориентированы на начинающих программистов, которые владеют базовыми знаниями о программировании в целом. В каждом уроке мы стараемся дать наглядные примеры и тщательно объясненить каждую рассматриваемую тему.
Программировать на Python – просто, а с нами – ещё проще!

Рекомендуемые книги

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

Эрик Мэтиз. Изучаем Python. Программирование игр, визуализация данных, веб-приложения

Руководство по языку Python c многочисленными примерами, которые обучают шаблонам чистого кода. После освоения базы языка обучение продолжается на рабочих проектах с использованием известных библиотек: 1. аркадная игра в стиле Space Invaders (библиотека pygame), 2. интерактивная визуализация данных (библиотеки matplotlib и plotly) и 3. веб-приложение на Django.

Учим Python, делая крутые игры (2017)

Увлекательный самоучитель по языку Python для начинающих. Книга подходит даже читателям с нулевым уровнем. Создавайте собственными руками веселые классические и необычные, продвинутые игры, такие как «Виселица» или «Охотник за сокровищами», – в процессе вы поймете основные принципы программирования и выучите Python играючи!

Билл Любанович. Простой Python. Современный стиль программирования

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

Дэн Бейдер. Чистый Python. Тонкости программирования для профи

Словосочетание «для профи» – выдумка российских издателей. В оригинале книга называется Python tricks, то есть в ней собраны всякие «фишки», которые полезны тем, кто уже успел разобраться с основами языка и попрограммировать на Python. Для чтения достаточно базовых знаний языка. Особенно книга будет полезна тем, кто пришел в мир Python из других языков и некоторые мощные конструкции языка ускользнули от внимания.

Бизли и Джонс. Python. Книга рецептов

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

Джульен Данжу. Путь Python

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

Джульен Данжу уже больше 20 лет занимается хакингом свободного ПО. Также он занимается и разработкой программ, причем последние 12 лет — на Python. В частности, Джульен был тимлидом проекта в OpenStack — распределенной облачной платформе (это самая большая опенсорсная кодовая база на Python — 2,5 млн. строк кода). В настоящее время Джульен руководит собственной компанией, где тоже ежедневно пишет на Python.
При написании книги «Путь Python» Джульен Данжу консультировался со многими другими специалистами, каждый из которых особенно хорош в какой-то из областей знаний, описанных в «Путь Python». Это уже четвертое издание данной книги.

Марк Лутц «Изучаем Python»

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

Марк Лутц «Программирование на Python»

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

  • Как пишется язык программирования паскаль
  • Как пишется ядерно опасных и радиационно опасных
  • Как пишется ядерно опасный объект
  • Как пишется ягуар по английски
  • Как пишется ягуар машина