Python (programming language) ?
Python is a general-purpose, high-level programming language. Its design philosophy emphasizes programmer productivity and code readability.
Python's core syntax and semantics are minimalistic, while the standard library is large and comprehensive. Its use of whitespace as block delimiters is unusual among popular programming languages.
Python supports multiple programming paradigms (primarily object oriented, imperative, and functional) and features a fully dynamic type system and automatic memory management, similar to Perl, Ruby, Scheme, and Tcl. Like other dynamic languages, Python is often used as a scripting language.
Python was first released by Guido van Rossum in 1991. The language has an open, community-based development model managed by the non-profit Python Software Foundation, which also maintains the de facto standard definition of the language in CPython, the reference implementation.
Python was conceived in the late 1980s by Guido van Rossum at CWI in the Netherlands as a successor to the ABC programming language capable of exception handling and interfacing with the Amoeba operating system. Van Rossum is Python's principal author, and his continuing central role in deciding the direction of Python is reflected in the title given him by the Python community
Python reached version 1.0 in January 1994. The major new features included in this release were the functional programming tools lambda, map, filter and reduce. Van Rossum stated that "Python acquired lambda, reduce(), filter() and map(), courtesy of (I believe) a Lisp hacker who missed them and submitted working patches."
The last version released while van Rossum was at CWI was Python 1.2. In 1995, Van Rossum continued his work on Python at the Corporation for National Research Initiatives (CNRI) in Reston, Virginia from where he released several versions.
By version 1.4, Python had acquired several new features. Notable among these are the Modula-3 inspired keyword arguments (which are also similar to Common Lisp's keyword arguments), and built-in support for complex numbers. Also included is a basic form of data hiding by name mangling, though this is easily bypassed.
During Van Rossum's stay at CNRI, he launched the Computer Programming for Everybody (CP4E) initiative, intending to make programming more accessible to more people, with a basic 'literacy' in programming languages, similar to the basic English literacy and mathematics skills required by most employers. Python served a central role in this: because of its focus on clean syntax, it was already suitable, and CP4E's goals bore similarities to its predecessor, ABC. The project was funded by DARPA. As of 2007[update], the CP4E project is inactive, and while Python attempts to be easily learnable and not too arcane in its syntax and semantics, reaching out to non-programmers is not an active concern.
Some of the major changes scheduled for Python 3.0 were:
- Changing print so that it is a built-in function, not a statement. This made it easier to change a module to use a different print function, as well as making the syntax more regular. In Python 2.6 this could be enabled by entering from __future__ import print_function.
- Moving reduce (but not map or filter) out of the built-in namespace and into functools (the rationale being that operations using reduce are expressed more clearly using an accumulation loop).
- Adding support for optional function annotations that can be used for informal type declarations or other purposes;
- Unifying the str/unicode types, representing text, and introducing a separate immutable bytes type; and a mostly corresponding mutable bytearray type, both of which represent arrays of bytes;
- Removing backward-compatibility features, including old-style classes, integer-truncating division, string exceptions, and implicit relative imports.
Influences from other languages Python's core syntax and certain aspects of its philosophy are directly inherited from ABC. C also provided some of Python's syntax, and the Bourne shell also served as a model to follow in some areas, including how Python interprets command-line arguments. List comprehensions, anonymous functions, lexical closures and the map function are among the major features borrowed from functional languages, primarily dialects of Lisp and Haskell. Generators and iterators were inspired by Icon, and were then fused with the functional programming ideas borrowed into a unified model. Modula-3 was the basis of the exception model and module system. Perl lent Python regular expressions, used for string manipulation. Python's standard library additions and syntactical choices were strongly influenced by Java in some cases: the logging package, introduced in version 2.3, the SAX parser, introduced in 2.0, and the decorator syntax that uses @, added in version 2.4.
A Python Enhancement Proposal (or "PEP") is a standardized design document providing general information related to Python, including proposals, descriptions, and explanations for language features. PEPs are intended as the primary channel for proposing new features, and for documenting the underlying design rationale for all major elements of Python. Outstanding PEPs are reviewed and commented upon by Van Rossum, the BDFL.
CPython's developers also communicate over a mailing list, python-dev, which is the primary forum for discussion about the language's development; specific issues are discussed in the roundup bug tracker maintained at python.org. Previously, the code was stored in a CVS repository at Sourceforge, and the bug tracker there was used. However, the development team wished to use the newer SVN version control system and the roundup tracker, so migrated to services self-hosted at python.org.
CPython's public releases come in three types, distinguished by which part of the version number is incremented:
- backwards-incompatible versions, where code is expected to break and must be manually ported. The first part of the version number is incremented. These releases happen irregularly - for example, version 3.0 was released 8 years after 2.0.
- major or 'feature' releases, which are largely compatible but introduce new features. The second part of the version number is incremented.
- These releases are scheduled to occur roughly every 18 months, and each major version is supported by bugfixes for several years after its release.
bugfix releases, which introduce no new features but fix bugs. The third and final part of the version number is incremented. These releases are made whenever a sufficient number of bugs have been fixed upstream since the last release, or roughly every 3 months. Security vulnerabilities are also patched in bugfix releases.
A number of alpha, beta and release-candidates are also released as previews and for testing before the final release is made. Although there is a rough schedule for each release, this is often pushed back if the code is not ready. The development team monitor the state of the code by running the large unit test suite during development, and using the buildbot continuous integration system.