Python ()

Python is a widely used general-purpose, high-level pro- gramming language.[17][18][19] Its design philosophy em- phasizes code readability, and its syntax allows program- mers to express concepts in fewer lines of code than would be possible in languages such as ++ or Java.[20][21] The language provides constructs intended to enable clear programs on both a small and large scale.[22] Python supports multiple programming paradigms, in- cluding object-oriented, imperative and functional pro- gramming or procedural styles. It features a dynamic and automatic memory management and has a large and comprehensive standard library.[23] Python interpreters are available for installation on many operating systems, allowing Python code execution on a wide variety of systems. Using third-party tools, such as Py2exe or Pyinstaller,[24] Python code can be pack- aged into stand-alone executable programs for some of the most popular operating systems, allowing for the dis- tribution of Python-based software for use on those en- vironments without requiring the installation of a Python . CPython, the reference implementation of Python, is free and open-source software and has a community-based development model, as do nearly all of its alternative im- plementations. CPython is managed by the non-profit Python Software Foundation. , the creator of Python 1 History be closed, but I had a home computer, and not much else on my hands. I decided to write Main article: an interpreter for the new scripting language I had been thinking about lately: a descendant of Python was conceived in the late 1980s[25] and its im- ABC that would appeal to /C hackers.I plementation was started in December 1989[26] by Guido chose Python as a working title for the project, van Rossum at CWI in the Netherlands as a successor to being in a slightly irreverent mood (and a big the ABC language (itself inspired by SETL)[27] capable fan of ’s Flying Circus). of and interfacing with the Amoeba .[5] Van Rossum is Python’s principal au- thor, and his continuing central role in deciding the direc- Python 2.0 was released on 16 October 2000, and in- tion of Python is reflected in the title given to him by the cluded many major new features including a full garbage Python community, benevolent dictator for life (BDFL). collector and support for . With this release the development process was changed and became more About the origin of Python, Van Rossum wrote in transparent and community-backed.[29] 1996:[28] Python 3.0 (also called Python 3000 or py3k), a ma- Over six years ago, in December 1989, jor, backwards-incompatible release, was released on I was looking for a “hobby” programming 3 December 2008[30] after a long period of testing. project that would keep me occupied during the Many of its major features have been backported to the week around Christmas. My office ... would backwards-compatible Python 2.6 and 2.7.[31]

1 2 3 SYNTAX AND

2 Features and philosophy at the cost of clarity.[41] When speed is important, Python use PyPy, a just-in-time , or move Python is a multi-paradigm programming language: time-critical functions to extension modules written in object-oriented programming and structured program- languages such as C. is also available which trans- ming are fully supported, and there are a number of lates a Python script into C and makes direct C level API language features which support functional program- calls into the Python interpreter. ming and aspect-oriented programming (including by An important goal of the Python developers is making metaprogramming[32] and by magic methods).[33] Many Python fun to use. This is reflected in the origin of the other paradigms are supported using extensions, includ- name which comes from Monty Python,[42] and in an oc- ing design by contract[34][35] and logic programming.[36] casionally playful approach to tutorials and reference ma- Python uses dynamic typing and a combination of terials, for example using spam and eggs instead of the [43][44] reference counting and a cycle-detecting garbage collec- standard foo and bar. tor for memory management. An important feature of A common neologism in the Python community is Python is dynamic name resolution (late binding), which pythonic, which can have a wide range of meanings re- binds method and variable names during program execu- lated to program style. To say that code is pythonic is tion. to say that it uses Python idioms well, that it is natural The design of Python offers only limited support for or shows fluency in the language, that it conforms with in the Lisp tradition. The Python’s minimalist philosophy and emphasis on read- language has map(), reduce() and filter() functions; ability. In contrast, code that is difficult to understand or comprehensions for lists, dictionaries, and sets; as well reads like a rough transcription from another program- as generator expressions.[37] The standard library has two ming language is called unpythonic. modules (itertools and functools) that implement func- Users and admirers of Python—most especially those tional tools borrowed from Haskell and Standard ML.[38] considered knowledgeable or experienced—are often re- [45][46] The core philosophy of the language is summarized by the ferred to as Pythonists, Pythonistas, and Pythoneers. document “PEP 20 (The Zen of Python)", which includes aphorisms such as:[39] 3 Syntax and semantics • Beautiful is better than ugly Main article: Python syntax and semantics • Explicit is better than implicit

• Simple is better than complex Python is intended to be a highly readable language. It is designed to have an uncluttered visual layout, frequently • Complex is better than complicated using English keywords where other languages use punc- • Readability counts tuation or keywords. Furthermore, Python has a smaller number of syntactic exceptions and special cases than C or Pascal.[47] Rather than requiring all desired functionality to be built into the language’s core, Python was designed to be highly extensible. Python can also be embedded in existing ap- 3.1 Indentation plications that need a programmable interface. This de- sign of a small core language with a large standard library Main article: Python syntax and semantics § Indentation and an easily extensible interpreter was intended by Van Rossum from the very start because of his frustrations with ABC (which espoused the opposite mindset).[25] Python uses whitespace indentation, rather than curly braces or keywords, to delimit blocks; this feature is While offering choice in coding methodology, the Python also termed the off-side rule. An increase in indentation philosophy rejects exuberant syntax, such as in , in comes after certain statements; a decrease in indentation favor of a sparser, less-cluttered grammar. As Alex signifies the end of the current block.[48] Martelli put it: “To describe something as clever is not considered a compliment in the Python culture.”[40] Python’s philosophy rejects the Perl "there is more than 3.2 Statements and control flow one way to do it" approach to language design in favor of “there should be one—and preferably only one—obvious Python’s statements include (among others): way to do it”.[39] Python’s developers strive to avoid premature optimiza- • The if statement, which conditionally executes a tion, and moreover, reject patches to non-critical parts of block of code, along with else and elif (a contrac- CPython which would offer a marginal increase in speed tion of else-if). 3.3 Expressions 3

• The for statement, which iterates over an iterable ob- • Addition, subtraction, and multiplication are the ject, capturing each element to a local variable for same, but the behavior of division differs (see use by the attached block. Mathematics for details). Python also added the ** operator for exponentiation. • The while statement, which executes a block of code as long as its condition is true. • In Python, == compares by value, in contrast to Java, where it compares by reference. (Value compar- • The try statement, which allows exceptions raised in isons in Java use the equals() method.) Python’s is its attached code block to be caught and handled by operator may be used to compare object identities except clauses; it also ensures that clean-up code in (comparison by reference). Comparisons may be a finally block will always be run regardless of how chained, for example a <= b <= c. the block exits. • Python uses the words and, or, not for its boolean • The class statement, which executes a block of code operators rather than the symbolic &&, ||, ! used in and attaches its local namespace to a class, for use Java and C. in object-oriented programming. • Python has a type of expression termed a list compre- • The def statement, which defines a function or hension. Python 2.4 extended list comprehensions method. into a more general expression termed a generator expression.[37] • The with statement (from Python 2.5), which en- • closes a code block within a context manager (for Anonymous functions are implemented using example, acquiring a before the block of code lambda expressions; however, these are limited in is run and releasing the lock afterwards, or opening that the body can only be a single expression. a file and then closing it), allowing RAII-like behav- • Conditional expressions in Python are written as x if ior. c else y[54] (different in order of operands from the ?: operator common to many other languages). • The pass statement, which serves as a NOP. It is syn- tactically needed to create an empty code block. • Python makes a distinction between lists and tuples. Lists are written as [1, 2, 3], are mutable, and cannot • The assert statement, used during debugging to be used as the keys of dictionaries (dictionary keys check for conditions that ought to apply. must be immutable in Python). Tuples are written as (1, 2, 3), are immutable and thus can be used as • The yield statement, which returns a value from the keys of dictionaries, provided all elements of the a generator function. From Python 2.5, yield is tuple are immutable. The parentheses around the tu- also an operator. This form is used to implement ple are optional in some contexts. Tuples can appear . on the left side of an equal sign; hence a statement • The import statement, which is used to import mod- like x, y = y, x can be used to swap two variables. ules whose functions or variables can be used in the • Python has a “string format” operator %. This current program. functions analogous to printf format strings in C, • print() was changed to a function in Python 3.[49] e.g. “foo=%s bar=%d” % (“blah”, 2) evaluates to “foo=blah bar=2”. In Python 3 and 2.6+, this was supplemented by the format() method of the str Python does not support tail-call optimization or first- class, e.g. “foo={0} bar={1}".format(“blah”, 2). class , and, according to Guido van Rossum, it never will.[50][51] However, better support for - • Python has various kinds of string literals: like functionality is provided in 2.5, by extending • Python’s generators.[52] Prior to 2.5, generators were lazy Strings delimited by single or double quotation iterators; information was passed unidirectionally out of marks. Unlike in Unix shells, Perl and Perl- the generator. As of Python 2.5, it is possible to pass influenced languages, single quotation marks information back into a generator function, and as of and double quotation marks function identi- Python 3.3, the information can be passed through mul- cally. Both kinds of string use the backslash tiple stack levels.[53] (\) as an escape character and there is no im- plicit string interpolation such as "$foo”. • Triple-quoted strings, which begin and end 3.3 Expressions with a series of three single or double quota- tion marks. They may span multiple lines and Python expressions are similar to languages such as C and function like here documents in shells, Perl Java: and Ruby. 4 3 SYNTAX AND SEMANTICS

• Raw string varieties, denoted by prefixing the fail, signifying that the given object is not of a suitable string literal with an r. No escape sequences type. Despite being dynamically typed, Python is strongly are interpreted; hence raw strings are useful typed, forbidding operations that are not well-defined (for where literal backslashes are common, such as example, adding a number to a string) rather than silently regular expressions and Windows-style paths. attempting to make sense of them. Compare "@-quoting” in C#. Python allows programmers to define their own types • Python has index and slice expressions on lists, de- using classes, which are most often used for object- noted as a[key], a[start:stop] or a[start:stop:step]. oriented programming. New instances of classes are con- Indexes are zero-based, and negative indexes are rel- structed by calling the class (for example, SpamClass() or ative to the end. Slices take elements from the start EggsClass()), and the classes themselves are instances of index up to, but not including, the stop index. The the metaclass type (itself an instance of itself), allowing third slice parameter, called step or stride, allows el- metaprogramming and reflection. ements to be skipped and reversed. Slice indexes Prior to version 3.0, Python had two kinds of classes: may be omitted, for example a[:] returns a copy of “old-style” and “new-style”.[56] Old-style classes were the entire list. Each element of a slice is a shallow eliminated in Python 3.0, making all classes new-style. In copy. versions between 2.2 and 3.0, both kinds of classes could be used. The syntax of both styles is the same, the dif- In Python, a distinction between expressions and state- ference being whether the class object is inherited from, ments is rigidly enforced, in contrast to languages such directly or indirectly (all new-style classes inherit from as , Scheme, or Ruby. This leads to some object and are instances of type). duplication of functionality. For example:

• List comprehensions vs. for-loops 3.6 Mathematics

• Conditional expressions vs. if blocks Python has the usual C arithmetic operators (+, -, *, /, %). It also has ** for exponentiation, e.g. 5**3 == 125 • The eval() vs. exec() built-in functions (in Python 2, and 9**.5 == 3.0 and a new matrix multiply operator @ exec is a statement); the former is for expressions, coming in 3.5.[58] the latter is for statements. The behavior of division has changed significantly over time.[59] 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 Python 2.1 and earlier use the C division behavior. of this is that an assignment statement such as a = 1 cannot The / operator is integer division if both operands form part of the conditional expression of a conditional are integers, and floating point division otherwise. statement. This has the advantage of avoiding a classic C Integer division rounds towards 0, e.g. 7 / 3 == 2 − − error of mistaking an assignment operator = for an equal- and 7 / 3 == 2. ity operator == in conditions: if (c = 1) { ... } is valid C • Python 2.2 changes integer division to round to- code but if c = 1: ... causes a syntax error in Python. wards negative infinity, e.g. 7 / 3 == 2 and −7 / 3 == −3. The floor division // operator is introduced. 3.4 Methods So 7 // 3 == 2, −7 // 3 == −3, 7.5 // 3 == 2.0 and −7.5 // 3 == −3.0. Adding from __future__ import Methods on objects are functions attached to the ob- division causes a module to use Python 3.0 rules for ject’s class; the syntax instance.method(argument) is, division (see next). for normal methods and functions, syntactic sugar for • Python 3.0 changes / to always be floating point di- Class.method(instance, argument). Python methods have vision. In Python terms, the pre-3.0 / is “classic di- an explicit self parameter to access instance data, in vision”, the 3.0 / is “real division”, and // is “floor contrast to the implicit self (or this) in some other division”. object-oriented programming languages (e.g. C++, Java, Objective-C, or Ruby).[55] Rounding towards negative infinity, though different from most languages, adds consistency. For instance, it means 3.5 Typing 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 Python uses duck typing and has typed objects but un- valid for both positive and negative values of a. However, typed variable names. Type constraints are not checked maintaining the validity of this equation means that while at compile time; rather, operations on an object may the result of a % b is, as expected, in the half-open interval 5

[0,b), where b is a positive integer, it has to lie in the • scientific computing, text processing, image pro- interval (b,0] when b is negative.[60] cessing Python provides a round function for rounding floats to integers. Versions before 3 use round-away-from- zero: round(0.5) is 1.0, round(−0.5) is −1.0.[61] Python 5 Development environments 3 uses round-to-even: round(1.5) is 2, round(2.5) is 2.[62] The Decimal type/class in module decimal (since version See also: Comparison of integrated development envi- 2.4) provides exact numerical representation and several ronments § Python rounding modes. Python allows boolean expressions with multiple equality Most Python implementations (including CPython) can relations in a manner that is consistent with general usage function as a command line interpreter, for which the user in mathematics. For example, the expression a < b < c enters statements sequentially and receives the results im- tests whether a is less than b and b is less than c. C-derived mediately (REPL). In short, Python acts as a shell. languages interpret this expression differently: in C, the expression would first evaluate a < b, resulting in 0 or 1, Other shells add capabilities beyond those in the basic in- and that result would then be compared with c.[63] terpreter, including IDLE and IPython. While generally following the visual style of the Python shell, they imple- Due to Python’s extensive mathematics library, it is fre- ment features like auto-completion, retention of session quently used as a scientific scripting language to aid in state, and syntax highlighting. problems such as data processing and manipulation. In addition to standard desktop Python IDEs (integrated development environments), there are also browser-based IDEs, Sage (intended for developing science and math- 4 Libraries related Python programs), and a browser-based IDE and hosting environment, PythonAnywhere. Python has a large standard library, commonly cited as one of Python’s greatest strengths,[64] providing tools suited to many tasks. This is deliberate and has been de- 6 Implementations scribed as a “batteries included”[23] Python philosophy. For Internet-facing applications, a large number of stan- See also: List of Python software § Python implementa- dard formats and protocols (such as MIME and HTTP) tions are supported. Modules for creating graphical user inter- faces, connecting to relational databases, pseudorandom number generators, arithmetic with arbitrary precision The main Python implementation, named CPython, is decimals,[65] manipulating regular expressions, and doing written in C meeting the C89 standard.[67] It compiles unit testing are also included. Python programs into intermediate ,[68] which is executed by the virtual machine.[69] CPython is dis- Some parts of the standard library are covered by specifi- tributed with a large standard library written in a mixture cations (for example, the WSGI implementation wsgiref of C and Python. It is available in versions for many plat- follows PEP 333[66]), but the majority of the modules are forms, including Windows and most modern not. They are specified by their code, internal documen- Unix-like systems. CPython was intended from almost tation, and test suite (if supplied). However, because most its very conception to be cross-platform.[70] of the standard library is cross-platform Python code, there are only a few modules that must be altered or com- PyPy is a fast, compliant[71] interpreter of Python 2.7 and pletely rewritten by alternative implementations. 3.2. Its just-in-time compiler brings a significant speed improvement over CPython.[72] A version taking advan- The standard library is not essential to run Python or em- tage of multi-core processors using software transactional bed Python within an application. Blender 2.49, for in- memory is being created.[73] stance, omits most of the standard library. is a significant fork of CPython that As of January 2015, the Python Package Index, the of- implements microthreads; it does not use the C mem- ficial repository of third-party software for Python, con- ory stack, thus allowing massively concurrent programs. tains more than 54,000 packages offering a wide range of PyPy also has a stackless version.[74] functionality, including: Other just-in-time have been developed in the past, but are now unsupported: • graphical user interfaces, web frameworks, multi- media, databases, networking and communications • started a project called Unladen Swallow • test frameworks, automation and web scraping, doc- in 2009 with the aims of increasing the speed of umentation tools, system administration the Python interpreter by 5 times by using the 6 8 NAMING

LLVM and improving its multithreading ability to commented upon by the Python community and by Van scale to thousands of cores.[75] Later the project lost Rossum, the Python project’s BDFL.[77] Google’s backing and its main developers. As of 1 Enhancement of the language goes along with develop- February 2012, the modified interpreter was about ment of the CPython reference implementation. The 2 times faster than CPython. mailing list python-dev is the primary forum for discus- • is a specialising just in time compiler that in- sion about the language’s development; specific issues tegrates with CPython and transforms bytecode to are discussed in the Roundup bug tracker maintained at [78] machine code at runtime. The produced code is spe- python.org. Development takes place on a self-hosted [79] cialised for certain data types and is faster than stan- source code repository running Mercurial. dard Python code. CPython’s public releases come in three types, distin- guished by which part of the version number is incre- In 2005, Nokia released a Python interpreter for the mented: Series 60 mobile phones called PyS60. It includes many of the modules from the CPython implementa- • Backwards-incompatible versions, where code is ex- tions and some additional modules for integration with pected to break and must be manually ported. The the operating system. This project has been first part of the version number is incremented. kept up to date to run on all variants of the platform These releases happen infrequently—for example, and there are several third party modules available. The version 3.0 was released 8 years after 2.0. also supports Python with GTK widget li- braries, with the feature that programs can be both writ- • Major or “feature” releases, which are largely com- ten and run on the device itself. patible but introduce new features. The second There are several compilers to high-level object lan- part of the version number is incremented. These guages, with either unrestricted Python, a restricted sub- releases are scheduled to occur roughly every 18 months, and each major version is supported by bug- set of Python, or a language similar to Python as the [80] source language: fixes for several years after its release. • Bugfix releases, which introduce no new features but • compiles into Java byte code, which can then fix bugs. The third and final part of the version num- be executed by every imple- ber is incremented. These releases are made when- mentation. This also enables the use of Java class ever a sufficient number of bugs have been fixed library functions from the Python program. upstream since the last release, or roughly every 3 months. Security vulnerabilities are also patched in • IronPython follows a similar approach in order to bugfix releases.[81] run Python programs on the .NET Common Lan- guage Runtime. A number of alpha, beta, and release-candidates are also • The RPython language can be compiled to C, Java released as previews and for testing before the final re- bytecode, or Common Intermediate Language, and lease is made. Although there is a rough schedule for each is used to build the PyPy interpreter of Python; release, this is often pushed back if the code is not ready. The development team monitor the state of the code by • Pyjamas compiles Python to JavaScript; running the large unit test suite during development, and • compiles Python to C++; using the BuildBot continuous integration system.[82] • Cython and Pyrex compile to C. The community of Python developers has also con- tributed over 54,000 software modules (as of January 2015) to the Python Package Index (called pypi), the of- A performance comparison of various Python implemen- ficial repository of third-party libraries for Python. tations on a non-numerical (combinatorial) workload was presented at EuroSciPy '13.[76] The major academic conference on Python is named PyCon. There are special mentoring programmes like the Pyladies. 7 Development

Python’s development is conducted largely through the 8 Naming Python Enhancement Proposal (PEP) process. The PEP process is the primary mechanism for proposing major Python’s name is derived from the television series Monty new features, for collecting community input on an is- Python’s Flying Circus,[83] and it is common to use Monty sue, and for documenting the design decisions that have Python references in example code.[84] For example, the gone into Python.[77] Outstanding PEPs are reviewed and metasyntactic variables often used in Python literature 7

are spam and eggs, instead of the traditional foo and numerical mathematics, number theory, and calculus. [84][85] bar. As well as this, the official Python documen- Python has been successfully embedded in a number of tation often contains various obscure Monty Python ref- software products as a scripting language, including in erences. finite element method software such as Abaqus, 3D an- The prefix Py- is used to show that something is related imation packages such as 3ds Max, Blender, Cinema to Python. Examples of the use of this prefix in names 4D, Lightwave, Houdini, Maya, modo, MotionBuilder, of Python applications or libraries include , a Softimage, the visual effects compositor Nuke, 2D binding of SDL to Python (commonly used to create imaging programs like GIMP,[96] Inkscape, Scribus and games); PyS60, an implementation for the Symbian S60 Paint Shop Pro,[97] and musical notation program or operating system; PyQt and PyGTK, which bind and scorewriter capella. GNU uses Python as a GTK, respectively, to Python; and PyPy, a Python imple- pretty printer to show complex structures such as C++ mentation written in Python. containers. Esri promotes Python as the best choice for writing scripts in ArcGIS.[98] It has also been used in sev- eral video games,[99][100] and has been adopted as first of the three available programming languages in Google 9 Use App Engine, the other two being Java and Go.[101] Python has also been used in artificial intelligence Main article: List of Python software tasks.[102][103][104][105] As a scripting language with mod- ule architecture, simple syntax and rich text processing Since 2008, Python has consistently ranked in the top tools, Python is often used for natural language process- eight most popular programming languages as measured ing tasks.[106] [17] by the TIOBE Programming Community Index. It is Many operating systems include Python as a standard the third most popular language whose grammatical syn- component; the language ships with most distribu- tax is not predominantly based on C, e.g. C++, C#, tions, AmigaOS 4, FreeBSD, NetBSD, OpenBSD and OS Objective-C, Java. Python does borrow heavily, however, X, and can be used from the terminal. A number of Linux from the expression and statement syntax of C, making distributions use installers written in Python: uses it easier for C programmers to transition between lan- the Ubiquity installer, while Red Hat Linux and Fedora guages. use the Anaconda installer. Gentoo Linux uses Python in An empirical study found scripting languages (such as its package management system, Portage. Python) more productive than conventional languages Python has also seen extensive use in the information se- (such as C and Java) for a programming problem in- curity industry, including in exploit development.[107][108] volving string manipulation and search in a dictionary. Memory consumption was often “better than Java and not Most of the Sugar software for the One Laptop per much worse than C or C++".[86] Child XO, now developed at Sugar Labs, is written in Python.[109] Large organizations that make use of Python include Google,[87] Yahoo!,[88] CERN,[89] NASA,[90] and some The Raspberry Pi single-board computer project has smaller ones like ILM,[91] and ITA.[92] adopted Python as its principal user-programming lan- guage. Python can serve as a scripting language for web appli- cations, e.g., via mod wsgi for the Apache web server.[93] LibreOffice included Python and intends to replace Java With Web Server Gateway Interface, a standard API has with Python. Python Scripting Provider is a core [110] evolved to facilitate these applications. Web application feature since Version 4.0 from 7 February 2013. frameworks like Django, Pylons, Pyramid, TurboGears, web2py, Tornado, and support developers in the design and maintenance of complex applications. 10 Languages influenced by Pyjamas and IronPython can be used to develop the client-side of Ajax-based applications. SQLAlchemy can Python be used as data mapper to a relational database. Twisted is a framework to program communications between Python’s design and philosophy have influenced several computers, and is used (for example) by . programming languages, including: Libraries like , SciPy and Matplotlib allow the effective use of Python in scientific computing,[94][95] • Boo uses indentation, a similar syntax, and a similar with specialized libraries such as BioPython and object model. However, Boo uses static typing and Astropy providing domain-specific functionality. Sage is closely integrated with the .NET Framework.[111] is a mathematical software with a “notebook” pro- grammable in Python: its library covers many aspects • Cobra uses indentation and a similar syntax. Co- of mathematics, including algebra, combinatorics, bra’s “Acknowledgements” document lists Python 8 12 REFERENCES

first among languages that influenced it.[112] How- 12 References ever, Cobra directly supports design-by-contract, [113] unit tests, and optional static typing. [1] “Python 3.4.3”. Python Software Foundation. Retrieved 27 February 2015. • ECMAScript borrowed iterators, generators, and list comprehensions from Python.[114] [2] “Python 2.7.9 Release”. Python Software Foundation. Retrieved 10 December 2014. • Go is described as incorporating the “develop- [3] “What’s New In Python 3.5”. Python Software Founda- ment speed of working in a dynamic language like tion. Retrieved 6 February 2015. Python”.[115] [4] “Python 2.7.9 rc1 Release”. Python Software Foundation. • Groovy was motivated by the desire to bring the Retrieved 26 November 2014. Python design philosophy to Java.[116] [5] “Why was Python created in the first place?". General • OCaml has an optional syntax, called twt (The Python FAQ. Python Software Foundation. Retrieved 22 Whitespace Thing), inspired by Python and March 2007. Haskell.[117] [6] Kuchling, Andrew M. (22 December 2006). “Interview • with Guido van Rossum (July 1998)". amk.ca. Retrieved Ruby's creator, Yukihiro Matsumoto, has said: “I 12 March 2012. wanted a scripting language that was more pow- erful than Perl, and more object-oriented than [7] van Rossum, Guido (1993). “An Introduction to Python Python. That’s why I decided to design my own for UNIX/C Programmers”. Proceedings of the NLUUG language.”[118] najaarsconferentie (Dutch UNIX users group). even though the design of C is far from ideal, its influence on Python • CoffeeScript is a programming language that cross- is considerable. compiles to JavaScript; it has Python inspired syn- [8] “Classes”. The Python Tutorial. Python Software Foun- tax. dation. Retrieved 20 February 2012. It is a mixture of the class mechanisms found in C++ and Modula-3 • Swift is a programming language invented by Apple; it has some Python inspired syntax.[119] [9] Simionato, Michele. “The Python 2.3 Method Resolution Order”. Python Software Foundation. The C3 method itself has nothing to do with Python, since it was invented Python’s development practices have also been emulated by people working on Dylan and it is described in a paper by other languages. The practice of requiring a docu- intended for lispers ment describing the rationale for, and issues surrounding, a change to the language (in Python’s case, a PEP) is also [10] Kuchling, A. M. “Functional Programming HOWTO”. used in Tcl[120] and Erlang[121] because of Python’s influ- Python v2.7.2 documentation. Python Software Founda- ence. tion. Retrieved 9 February 2012. Python has been awarded a TIOBE Programming Lan- [11] Schemenauer, Neil; Peters, Tim; Hetland, Magnus Lie (18 guage of the Year award twice (in 2007 and 2010), which May 2001). “PEP 255 – Simple Generators”. Python En- is given to the language with the greatest growth in pop- hancement Proposals. Python Software Foundation. Re- ularity over the course of a year, as measured by the trieved 9 February 2012. TIOBE index.[122] [12] Smith, Kevin D.; Jewett, Jim J.; Montanaro, Skip; Baxter, Anthony (2 September 2004). “PEP 318 – Decorators for Functions and Methods”. Python Enhancement Propos- 11 See also als. Python Software Foundation. Retrieved 24 February 2012.

• Comparison of integrated development environ- [13] “More Control Flow Tools”. Python 3 documentation. ments for Python Python Software Foundation. Retrieved 5 August 2012.

• Comparison of programming languages [14] “Why We Created Julia”. Julia website. February 2012. Retrieved 5 June 2014. • LAMP (software bundle) [15] Bini, Ola (2007). Practical JRuby on Rails Web 2.0 Projects: bringing Ruby on Rails to the Java platform. • LEAP (software bundle) Berkeley: APress. p. 3. ISBN 978-1-59059-881-8.

• List of programming languages [16] Lattner, Chris (3 June 2014). “Chris Lattner’s Home- page”. Chris Lattner. Retrieved 3 June 2014. The Swift • language is the product of tireless effort from a team of 9

language experts, documentation gurus, compiler opti- [33] “3.3. Special method names”. The Python Language Ref- mization ninjas, and an incredibly important internal dog- erence. Python Software Foundation. Retrieved 27 June fooding group who provided feedback to help refine and 2009. battle-test ideas. Of course, it also greatly benefited from the experiences hard-won by many other languages in [34] “PyDBC: method preconditions, method postconditions the field, drawing ideas from Objective-C, Rust, Haskell, and class invariants for Python”. Retrieved 24 September Ruby, Python, C#, CLU, and far too many others to list. 2011. [35] “Contracts for Python”. Retrieved 24 September 2011. [17] TIOBE Software Index (2012). “TIOBE Programming Community Index Python”. Retrieved 15 October 2012. [36] “PyDatalog”. Retrieved 22 July 2012.

[18] “Programming Language Trends - O'Reilly Radar”. [37] Hettinger, Raymond (30 January 2002). “PEP 289 – Radar.oreilly.com. 2 August 2006. Retrieved 17 July Generator Expressions”. Python Enhancement Propos- 2013. als. Python Software Foundation. Retrieved 19 February 2012. [19] “The RedMonk Programming Language Rankings: Jan- uary 2013 – tecosystems”. Redmonk.com. 28 February [38] “6.5 itertools – Functions creating iterators for efficient 2013. Retrieved 17 July 2013. looping”. Docs.python.org. Retrieved 24 November 2008. [20] Summerfield, Mark. Rapid GUI Programming with Python and Qt. Python is a very expressive language, [39] Peters, Tim (19 August 2004). “PEP 20 – The Zen of which means that we can usually write far fewer lines of Python”. Python Enhancement Proposals. Python Soft- Python code than would be required for an equivalent ap- ware Foundation. Retrieved 24 November 2008. plication written in, say, C++ or Java [40] Alex Martelli, Python Cookbook (2nd ed., p. 230) [21] McConnell, Steve (30 November 2009). Code Complete, [41] “Python Culture”. p. 100. ISBN 9780735636972. [42] “General Python FAQ - Why is it called Python?". [22] Kuhlman, Dave. “A Python Book: Beginning Python, Advanced Python, and Python Exercises”. [43] “15 Ways Python Is a Powerful Force on the Web”.

[23] “About Python”. Python Software Foundation. Retrieved [44] “pprint - Data pretty printer - Python Documentation”. 24 April 2012., second section “Fans of Python use the phrase “batteries included” to describe the standard li- [45] Goodger, David. “Code Like a Pythonista: Idiomatic brary, which covers everything from asynchronous pro- Python”. cessing to zip files.” [46] “How to think like a Pythonista”.

[24] “PyInstaller Home Page”. Retrieved 27 January 2014. [47] “Is Python a good language for beginning programmers?". General Python FAQ. Python Software Foundation. Re- [25] Venners, Bill (13 January 2003). “The Making of trieved 21 March 2007. Python”. Artima Developer. Artima. Retrieved 22 March 2007. [48] “Myths about indentation in Python”. Secnetix.de. Re- trieved 19 April 2011. [26] van Rossum, Guido (20 January 2009). “A Timeline of Python”. The History of Python. Google. Retrieved 20 [49] Sweigart, Al (2010). “Appendix A: Differences Between January 2009. Python 2 and 3”. Invent Your Own Computer Games with Python (2 ed.). ISBN 978-0-9821060-1-3. Retrieved 20 [27] van Rossum, Guido (29 August 2000). “SETL (was: February 2014. Lukewarm about range literals)". Python-Dev (Mailing list). Retrieved 13 March 2011. [50] van Rossum, Guido (22 April 2009). “Tail Recursion Elimination”. Neopythonic.blogspot.be. Retrieved 3 De- [28] van Rossum, Guido (1996). “Foreword for “Programming cember 2012. Python” (1st ed.)". Retrieved 10 July 2014. [51] van Rossum, Guido (9 February 2006). “Language De- [29] Kuchling, A. M.; Zadka, Moshe (16 October 2000). sign Is Not Just Solving Puzzles”. Artima forums. Artima. “What’s New in Python 2.0”. Python Software Founda- Retrieved 21 March 2007. tion. Retrieved 11 February 2012. [52] van Rossum, Guido; Eby, Phillip J. (10 May 2005). “PEP [30] “Python 3.0 Release”. Python Software Foundation. Re- 342 – Coroutines via Enhanced Generators”. Python En- trieved 8 July 2009. hancement Proposals. Python Software Foundation. Re- trieved 19 February 2012. [31] van Rossum, Guido (5 April 2006). “PEP 3000 – Python 3000”. Python Enhancement Proposals. Python Software [53] “PEP 380”. Python.org. Retrieved 3 December 2012. Foundation. Retrieved 27 June 2009. [54] van Rossum, Guido; Hettinger, Raymond (7 February [32] The Cain Gang Ltd. “Python Metaclasses: Who? Why? 2003). “PEP 308 – Conditional Expressions”. Python En- When?" (PDF). Archived from the original on 10 Decem- hancement Proposals. Python Software Foundation. Re- ber 2009. Retrieved 27 June 2009. trieved 13 July 2011. 10 12 REFERENCES

[55] “Why must 'self' be used explicitly in method definitions [75] “Plans for optimizing Python”. Google Project Hosting. and calls?". Design and History FAQ. Python Software Google. 15 December 2009. Retrieved 24 September Foundation. Retrieved 19 February 2012. 2011.

[56] “The Python Language Reference, section 3.3. New-style [76] Murri, Riccardo (2013). Performance of Python runtimes and classic classes, for release 2.7.1”. Retrieved 12 Jan- on a non-numeric scientific code. European Conference on uary 2011. Python in Science (EuroSciPy).

[57] Zadka, Moshe; van Rossum, Guido (11 March 2001). [77] Warsaw, Barry; Hylton, Jeremy; Goodger, David (13 June “PEP 237 – Unifying Long Integers and Integers”. Python 2000). “PEP 1 – PEP Purpose and Guidelines”. Python Enhancement Proposals. Python Software Foundation. Enhancement Proposals. Python Software Foundation. Retrieved 24 September 2011. Retrieved 19 April 2011.

[58] “PEP 465 -- A dedicated infix operator for matrix multi- [78] Cannon, Brett. “Guido, Some Guys, and a Mailing List: plication”. python.org. How Python is Developed”. python.org. Python Software Foundation. Retrieved 27 June 2009. [59] Zadka, Moshe; van Rossum, Guido (11 March 2001). “PEP 238 – Changing the Division Operator”. Python En- [79] “Python Developer’s Guide”. hancement Proposals. Python Software Foundation. Re- trieved 23 October 2013. [80] Norwitz, Neal (8 April 2002). "[Python-Dev] Release Schedules (was Stability & change)". Retrieved 27 June [60] “Why Python’s Integer Division Floors”. Retrieved 25 2009. August 2010. [81] Aahz; Baxter, Anthony (15 March 2001). “PEP 6 – Bug [61] “round”, The Python standard library, release 2.7, §2: Fix Releases”. Python Enhancement Proposals. Python Built-in functions, retrieved 14 August 2011 Software Foundation. Retrieved 27 June 2009.

[62] “round”, The Python standard library, release 3.2, §2: [82] “Python Buildbot”. Python Developer’s Guide. Python Built-in functions, retrieved 14 August 2011 Software Foundation. Retrieved 24 September 2011.

[63] Python Essential Reference, David M Beazley [83] “General Python FAQ”. Python v2.7.3 documentation. [64] Piotrowski, Przemyslaw (July 2006). “Build a Rapid Web Docs.python.org. Retrieved 3 December 2012. Development Environment for Python Server and [84] “Whetting Your Appetite”. The Python Tutorial. Python Oracle”. Oracle Technology Network. Oracle. Retrieved Software Foundation. Retrieved 20 February 2012. 12 March 2012. [85] “In Python, should I use else after a return in an if block?". [65] Batista, Facundo (17 October 2003). “PEP 327 – Deci- Stack Overflow. Stack Exchange. 17 February 2011. Re- mal Data Type”. Python Enhancement Proposals. Python trieved 6 May 2011. Software Foundation. Retrieved 24 November 2008. [86] Prechelt, Lutz (14 March 2000). “An empirical com- [66] Eby, Phillip J. (7 December 2003). “PEP 333 – Python parison of C, C++, Java, Perl, Python, Rexx, and Tcl”. Web Server Gateway Interface v1.0”. Python Enhance- Bibliography of Lutz Prechelt. Retrieved 30 August 2013. ment Proposals. Python Software Foundation. Retrieved 19 February 2012. [87] “Quotes about Python”. Python Software Foundation. Retrieved 8 January 2012. [67] van Rossum, Guido (5 June 2001). “PEP 7 – Style Guide for C Code”. Python Enhancement Proposals. Python [88] “Organizations Using Python”. Python Software Founda- Software Foundation. Retrieved 24 November 2008. tion. Retrieved 15 January 2009.

[68] “CPython byte code”. Docs.python.org. Retrieved 19 [89] “Python : the holy of programming”. CERN Bulletin April 2011. (CERN Publications) (31/2006). 31 July 2006. Retrieved 11 February 2012. [69] “Python 2.5 internals” (PDF). Retrieved 19 April 2011.

[70] “An Interview with Guido van Rossum”. Oreilly.com. [90] Shafer, Daniel G. (17 January 2003). “Python Stream- Retrieved 24 November 2008. lines Space Shuttle Mission Design”. Python Software Foundation. Retrieved 24 November 2008. [71] “PyPy compatibility”. Pypy.org. Retrieved 3 December 2012. [91] Fortenberry, Tim (17 January 2003). “Industrial Light & Magic Runs on Python”. Python Software Foundation. [72] “speed comparison between CPython and Pypy”. Retrieved 11 February 2012. Speed..org. Retrieved 3 December 2012. [92] Taft, Darryl K. (5 March 2007). “Python Slithers into [73] “STM with threads”. Morepypy.blogspot.be. 10 June Systems”. eWeek.com. Ziff Davis Holdings. Retrieved 24 2012. Retrieved 3 December 2012. September 2011.

[74] “Application-level Stackless features — PyPy 2.0.2 doc- [93] “Usage statistics and market share of Python for websites”. umentation”. Doc.pypy.org. Retrieved 17 July 2013. 2012. Retrieved 18 December 2012. 11

[94] Oliphant, Travis (2007). “Python for Scientific Comput- [114] “Proposals: iterators and generators [ES4 Wiki]". ing”. Computing in Science and Engineering. wiki.ecmascript.org. Retrieved 24 November 2008.

[95] Millman, K. Jarrod; Aivazis, Michael (2011). “Python [115] Kincaid, Jason (10 November 2009). “Google’s Go: A for Scientists and Engineers”. Computing in Science and New Programming Language That’s Python Meets C++". Engineering 13 (2): 9–12. TechCrunch. Retrieved 29 January 2010.

[96] “Installers for GIMP for Windows - Frequently Asked [116] Strachan, James (29 August 2003). “Groovy – the birth Questions”. 26 July 2013. Retrieved 26 July 2013. of a new dynamic language for the Java platform”.

[97] “jasc psp9components”. [117] Lin, Mike. “The Whitespace Thing for OCaml”. Mas- sachusetts Institute of Technology. Retrieved 12 April [98] “About getting started with writing geoprocessing 2009. scripts”. ArcGIS Desktop Help 9.2. Environmental Sys- tems Research Institute. 17 November 2006. Retrieved [118] “An Interview with the Creator of Ruby”. Linuxdevcen- 11 February 2012. ter.com. Retrieved 3 December 2012. [99] CCP porkbelly (24 August 2010). “Stackless Python 2.7”. [119] Lattner, Chris (3 June 2014). “Chris Lattner’s Home- EVE Community Dev Blogs. CCP Games. As you may page”. Chris Lattner. Retrieved 3 June 2014. I started know, EVE has at its core the programming language work on the Swift Programming Language in July of known as Stackless Python. 2010. I implemented much of the basic language struc- [100] Caudill, Barry (20 September 2005). “Modding Sid ture, with only a few people knowing of its existence. A Meier’s Civilization IV”. Sid Meier’s Civilization IV De- few other (amazing) people started contributing in earnest veloper Blog. Firaxis Games. Archived from the original late in 2011, and it became a major focus for the Ap- on 10 August 2010. we created three levels of tools ... The ple Developer Tools group in July 2013 [...] drawing next level offers Python and XML support, letting mod- ideas from Objective-C, Rust, Haskell, Ruby, Python, C#, ders with more experience manipulate the game world and CLU, and far too many others to list. everything in it. [120] Kupries, Andreas; Fellows, Donal K. (14 September [101] “Python Language Guide (v1.0)". Google Documents List 2000). “TIP #3: TIP Format”. tcl.tk. Tcl Developer Data API v1.0. Google. Archived from the original on 10 Xchange. Retrieved 24 November 2008. August 2010. [121] Gustafsson, Per; Niskanen, Raimo (29 January 2007). [102] “Python for Artificial Intelligence”. Wiki.python.org. 19 “EEP 1: EEP Purpose and Guidelines”. erlang.org. Re- July 2012. Retrieved 3 December 2012. trieved 19 April 2011.

[103] Paine, Jocelyn, ed. (August 2005). “AI in Python”. AI [122] “TIOBE Programming Community Index for March Expert Newsletter (Amzi!). Retrieved 11 February 2012. 2012”. TIOBE Software. March 2012. Retrieved 25 March 2012. [104] “PyAIML 0.8.5 : Python Package Index”. Pypi.python.org. Retrieved 17 July 2013. [105] Russell, Stuart J. & Norvig, Peter (2009). Artificial In- 13 Further reading telligence: A Modern Approach (3rd ed.). Upper Sad- dle River, NJ: Prentice Hall. p. 1062. ISBN 978-0-13- • 604259-4. Retrieved 11 February 2012. Downey, Allen B (May 2012). Think Python: How to Think Like a Computer Scientist (Version 1.6.6 [106] “Natural Language Toolkit”. ed.). ISBN 978-0-521-72596-5.

[107] “Immunity: Knowing You're Secure”. • Hamilton, Naomi (5 August 2008). “The A-Z of Programming Languages: Python”. Computer- [108] “Corelabs site”. world. Retrieved 31 March 2010. [109] “What is Sugar?". Sugar Labs. Retrieved 11 February 2012. • Lutz, Mark (2013). Learning Python (5th ed.). O'Reilly Media. ISBN 978-0-596-15806-4. [110] “4.0 New Features and Fixes”. LibreOffice.org. The Doc- ument Foundation. 2013. Retrieved 25 February 2013. • Pilgrim, Mark (2004). Dive Into Python. Apress. ISBN 978-1-59059-356-1. [111] “Gotchas for Python Users”. boo.codehaus.org. Code- haus Foundation. Retrieved 24 November 2008. • Pilgrim, Mark (2009). Dive Into Python 3. Apress. [112] Esterbrook, Charles. “Acknowledgements”. cobra- ISBN 978-1-4302-2415-0. language.com. Cobra Language. Retrieved 7 April 2010. • Summerfield, Mark (2009). Programming in Python [113] Esterbrook, Charles. “Comparison to Python”. cobra- 3 (2nd ed.). Addison-Wesley Professional. ISBN language.com. Cobra Language. Retrieved 7 April 2010. 978-0-321-68056-3. 12 14 EXTERNAL LINKS

14 External links

• Official website

• Python (programming language) newsgroup on Usenet (alternative free web access using Google Groups)

• Python development list • Python at DMOZ 13

15 Text and image sources, contributors, and licenses

15.1 Text

• Python (programming language) Source: http://en.wikipedia.org/wiki/Python%20(programming%20language)?oldid=649642455 Con- tributors: AxelBoldt, Matthew Woodcraft, NathanBeach, Brion VIBBER, Eloquence, Zundark, Espen, The Anome, Tarquin, Stephen Gilbert, HelgeStenstrom, Sabre23t, Andre Engels, Codeczero, Enchanter, Fubar Obfusco, Deb, Mjb, Formulax, Dwheeler, Nknight, Twilsonb, Hfastedge, Edward, Nealmcb, Brainsik, Erik Zachte, Modster, Dhart, Ixfd64, Phoe6, Eurleif, TakuyaMurata, Pcb21, Ahoerste- meier, Mac, Nanshu, Docu, Kazuo Moriwaka, Den fjättrade ankan, Kragen, LittleDan, Julesd, Glenn, Error, Habj, Ciphergoth, Poor Yorick, Nikai, Cadr, Palfrey, TonyClarke, Edaelon, Jonik, Samuel, Silverfish, Gamma, AhmadH, Feedmecereal, Masud1011, Guaka, Timwi, Dcoetzee, Wikiborg, Ww, Jm34harvey, Dysprosia, Kbk, Sanxiyn, Jogloran, Zoicon5, Hao2lian, Tpbradbury, Furrykef, Itai, Wellington, Fibonacci, Bevo, Anupamsr, Wdscxsj, Fvw, Mignon, Bloodshedder, Olathe, Epl18, Northgrove, Rogper, Robbot, Chealer, Noldoaran, Friedo, Fredrik, Benwing, RedWolf, Peak, Meduz, Chris Roy, P0lyglut, Ytyoun, Pingveno, Tualha, Sverdrup, Cornellier, Kneiphof, Flauto Dolce, Rursus, EditAnon, Wlievens, Mark Krueger, Borislav, Sebb, Garrett Albright, Carlj7, Miles, Cek, Pengo, GreatWhiteNortherner, Tobias Bergemann, Alan Liefting, Enochlau, Andreas Eisele, Connelly, Giftlite, Smjg, Arved, Telemakh0s, Kim Bruning, Massysett, Ben- FrantzDale, Ævar Arnfjörð Bjarmason, Netoholic, Levin, Herbee, Quadra23, Davide125, Fleminra, P.T. Aufrette, Ssd, Jason Quinn, Jorge Stolfi, Adamnelson, Matt Crypto, Chipp, Uzume, Alex Libman, Neilc, Vadmium, Chowbok, Gadfium, LiDaobing, Yath, Lightst, Beland, Ctachme, Karol Langner, Gauss, Tennessee, Kuralyov, Halo, Idono, B. and Rakim, Martin.komunide.com, Aidan W, Positron, Am- RadioHed, , Joachim Wuttke, Karl Dickman, Kaustuv, Chmod007, Zondor, Asqueella, Jin, Generic Player, Rodrigostrauss, Tom X. ,Discospinster, Helohe, Rich Farmbrough, Agnistus, Sridharinfinity, Timmorgan, Marco42, Rsanchezsaez, Wrp103 ,أحمد ,Tobin, Archer3 Rspeer, HeikoEvermann, Style, Digamma, Lulu of the Lotus-Eaters, Flatline, Mjpieters, Rummey, Antaeus Feldspar, LeeHunter, Brai- nus, Gronky, Jerub, Dmeranda, Dolda2000, Bender235, Mykhal, ZeroOne, Andrejj, Kbh3rd, Elykyllek, Thebrid, Sgeo, Evice, Danakil, Aranel, MisterSheik, SpencerWilson, Vortex, Sietse Snel, Euyyn, Etz Haim, Pepr, Perfecto, Jlin, Bobo192, NetBot, Smalljim, Alexan- dre.tp, Atomique, NotAbel, Brettlpb, L.Willms, NanoTy, Physicistjedi, Bawolff, Flammifer, Beetle B., Boredzo, Cherlin, Martinultima, Minghong, Towel401, Steveha, Obradovic Goran, Sebastian Goll, Sam Korn, Pharos, Mdd, Vanished user lkjsdkf34ij48fjhk4, ThePara- noidOne, Mduvekot, Oliverlewis, Guy Harris, Friday13, Jeltz, Verdlanco, Karih, Water , Ossiemanners, Poromenos, Hypo, Samohyl Jan, Freshraisin, Cburnett, Garzo, Nkour, Tony Sidaway, Geraldshields11, LFaraone, Dave.Dunford, Leondz, H3h, MIT Trekkie, Lu- naticFringe, Akuchling, Falcorian, A D Monroe III, Swaroopch, Feezo, Roland2, Kenliu, Simetrical, MartinSpacek, Mindmatrix, Bell- halla, Madmardigan53, MattGiuca, Ruud Koot, Goodgerster, JeremyA, SergeyLitvinov, Hdante, Domtyler, Al E., GregorB, CharlesC, Trampolineboy, Toussaint, WoLpH, Rufous, Natrius, Avnit, Kesla, Yoric, Yoghurt, Pete142, Graham87, Magister Mathematicae, Ilya, Qwertyus, Dan Ros, Josh Parris, Rjwilmsi, Seidenstud, Koavf, Dazmax, Tokigun, Scorchsaber, Chri1753, DouglasGreen, Bubba73, Ucucha, Fred Bradstadt, Nguyen Thanh Quang, Flarn2006, StuartBrady, FlaBot, Weel, JohnElder, Loggie, Harmil, Vsion, Rbonvall, JYOuyang, MosheZadka, Hansamurai, Edgeprod, Mpradeep, Intgr, Taniquetil, QuicksilverJohny, Silivrenion, HumbertoDiogenes, Ed- die Parker, Dejavu12, Shmorhay, King of Hearts, NevilleDNZ, Chobot, Visor, Bgwhite, Peterl, C.Koltzenburg, Shervinafshar, PhilipR, YurikBot, Wavelength, Hawaiian717, JWB, Hairy Dude, Thejapanesegeek, MMuzammils, RussBot, Bryant.cutler, The Kid, John Quincy Adding Machine, Me and, Piet Delport, Hydrargyrum, Ori.livneh, Dotancohen, Stephenb, David Woodward, Ferri, Akhristov, Pelago, LauriO, Mipadi, Iani, Razorx, Arichnad, Nir Soffer, JoeBruno, J E Bailey, Howcheng, Mkouklis, DHowell, Eivanec, Dogcow, Mike Lin, Bob0the0mighty, Amakuha, Tony1, Wangi, DeadEyeArrow, Mach5, Sir Isaac, Hugo 87, Ronyclau, Drosboro, CubicStar, Ninly, Shimei, Xaxafrad, Sarefo, Fergofrog, Shaolinhoward, JLaTondre, Gesslein, GoodSirJava, Oneirist, Cvrebert, Simxp, Honeyman, Grin- Bot, Draicone, Elliskev, TuukkaH, Chrismith, Finell, Zukeeper, Pillefj, Chris Chittleborough, Ozzmosis, SmackBot, Aim Here, Hydrol- ogy, Meshach, Imz, Faisal.akeel, InverseHypercube, JoshDuffMan, Unyoyega, Matusu, Yamaplos, 0x6adb015, KocjoBot, Mcherm, Arny, Slitchfield, ProveIt, Iph, Sam Pointon, HalfShadow, Katanzag, PeterReid, Jkp1187, Ignacioerrico, Gilliam, Ohnoitsjamie, Skizzik, Nick- Garvey, El Cubano, Bitmuse, Fetofs, Kazkaskazkasako, Chris the speller, Quartz25, Jprg1966, Rmt2m, Thumperward, Snori, Oli Filth, Mark Russell, Jeysaba, MalafayaBot, Bazonka, Jerome Charles Potts, Gutworth, Benjaminhill, JohnWhitlock, Otus, Salmar, GeeksHave- Feelings, Can't sleep, clown will eat me, Timothy Clemans, Frap, Sunnan, Squilibob, Lacker, KevM, Cícero, CorbinSimpson, -Barry-, Me- andtheshell, Anthon.Eff, Aldaron, SophisticatedPrimate, Gohst, Radagast83, Cybercobra, Memty, Teehee123, BMan12, Paddy3118, Mr Minchin, Fuzzyman, Richard001, Tompsci, Loewis, LoveEncounterFlow, MattSH, Matt.forestpath, Alsh, Daniel.Cardenas, Chconline, Nc- mathsadist, Davipo, Ohconfucius, SashatoBot, Lambiam, AThing, Derek farn, Whowhat16, Ergative rlt, Caim, Books++, Gobonobo, Dis- avian, Amine Brikci N, Ksn, Catapult, Tlesher, Antonielly, KodiakBjörn, Stuart Ward UK, NongBot, IronGargoyle, Llamadog903, Blind- Wanderer, Coolperson3, A. Parrot, Ehheh, ImperatorPlinius, GhostInTheMachine, EdC, Gokulmadhavan, B7T, Dreftymac, Sander Säde, AlexLibman, Dp462090, WakiMiko, Tawkerbot2, Esangaline, FatalError, SkyWalker, Yellowstone6, CRGreathouse, Ahy1, Unixguy, Eric, Kris Schnee, Eastwind, Nczempin, Wws, Andkore, Phædrus, Bmk, Simeon, Yaris678, Peteturtle, Cydebot, Marqueed, Drummle, Gortsack, Studerby, Carstensen, Msnicki, Narayanese, BartlebyScrivener, Kozuch, Bsmntbombdood, MicahElliott, QuicksilverPhoenix, Nearfar, Malleus Fatuorum, Thijs!bot, Kubanczyk, KimDabelsteinPetersen, Hervegirod, PHaze, TXiKi, MesserWoland, X96lee15, Xas- xas256, Roponor, Sbandrews, Ianozsvald, 2disbetter, AntiVandalBot, Gioto, Seaphoto, Prolog, JoaquinFerrero, Gczffl, Joe Schmedley, Isilanes, Rsocol, Hexene, Leafman, Asmeurer, NapoliRoma, MER-C, Lino Mastrodomenico, Graveenib, Robinw77, H3llbringer, Mar- tinkunev, Cameltrader, Vl'hurg, Stangaa, Jed S, AdamGomaa, I80and, Prty, Magioladitis, Rhwawn, Transcendence, Marko75, TheDo- lphin, Bernd vdB, Radenski, Abednigo, 28421u2232nfenfcenc, Boffob, GreyTeardrop, Peterhi, HebrewHammerTime, Pyritie, Troeger, Gwern, Dcf, Algebraic, Torbjorn Bjorkman, BetBot, Mathnerd314, Mikco, Akulo, Dvarrazzo, Rettetast, Paul evans, Nono64, Python- book, Garkbit, Vorratt, J.delanoy, Captain panda, Trusilver, Hom sepanta, Alex Heinz, Jesant13, Murmurr, Lacreighton, Laurusnobilis, Arite, Inquam, Hebejebelus, McSly, Starnestommy, Maduskis, Nevar stark, Hessammehr, HiLo48, Sachavdk, Midnight Madness, Nzk, Aeonimitz, SardonicRick, Atheuz, Tagus, MkClark, Tekkaman, VolkovBot, ABF, Soshial, A.Ou, MuffinFlavored, The Wild Falcon, Bom- bastrus, Jeff G., Philip Trueman, Sooperman23, Dolcecars, Asuffield, WatchAndObserve, Patrickjamesmiller, JayC, OlavN, Seb26, JhsBot, DragonLord, Daverose 33, Hannes Röst, Kızılsungur, Andy Dingley, Meters, Synthebot, Azimuts43, Truthanado, Andrew Haji, Logan, Legoktm, EmxBot, Serprex, S.Örvarr.S, Kbrose, Satheesan.varier, GirasoleDE, Cjbprime, SieBot, Neuralwiki, TJRC, Junh1024, Laoris, Josh the Nerd, Eagleal, Andrewjlockley, Ygramul, Jerryobject, Flyer22, Radon210, Oda Mari, Jlf23, Arknascar44, MagiusII, Mtrinque, Eiwot, KumpelBert, Ctxppc, Sen Mon, Jacob.jose, Wikiskimmer, Rdhettinger, Gillwill, ImageRemovalBot, Dlrohrer2003, XDanielx, Gloss, Dom96, ClueBot, Samuel Grant, Kl4m, C1932, Raghuraman.b, Cdhitch, Thatos, Mkaz, Kl4m-AWB, Blue bear sd, Recent Runes, Auntof6, Pointillist, DragonBot, Arkanosis, FitzySpyder, Excirial, Nymf, Goodone121, Mate2code, Papna, Joytex, Lartoven, Sun Creator, Technobadger, Iohannes Animosus, Singhalawap, The best jere, SoxBot, Sealican, A plague of rainbows, Fancypantsss, DanielPharos, Thingg, Aitias, Chiefmanzzz, Aronzak, MelonBot, Djmackenzie, Qwfp, Johnuniq, Egmontaz, Apparition11, SF007, DumZiBoT, Aj00200, Cyp2il, TimTay, XLinkBot, ChuckEsterbrook, AbstractBeliefs, FellGleaming, C. A. Russell, SilvonenBot, RP459, Addbot, Alexandru- juncu, Daniel.ugra, Betterusername, Jhylton, Mrsatori, NjardarBot, MrOllie, Ollydbg, Freqsh0, Python.tw, Favonian, LinkFA-Bot, Oefe, 14 15 TEXT AND IMAGE SOURCES, CONTRIBUTORS, AND LICENSES

Tide rolls, Sjheiss, Ricvelozo, Jarble, Legobot, Yobot, CFeyecare, Midinastasurazz, TaBOT-zerem, Sidecharm10101, Naudefjbot, Edoe, Senordefarge, Bugnot, EnTerr, Kwacka, Anthoniraj, IW.HG, Nummify, 4th-otaku, AnomieBOT, Arjun G. Menon, Joule36e5, 1exec1, Götz, Coolboy1234, Rjanag, VX, Wickorama, JackieBot, Joel amos, Пика Пика, Materialscientist, Erikcw, Citation bot, ArthurBot, PavelSolin, Xqbot, OPi, Smk65536, Kithira, Pmlineditor, Xan2, SciberDoc, SassoBot, Daniel Hen, Eduardofv, Shadowjams, Whatis- Feelings?, Dougofborg, Kracekumar, Spaceyguy, FrescoBot, Wiretse, Uncopy, Ksato9700, ALbertMietus, Uyuyuy99, Penguinzig, SL93, Draperp, VOBO, Redrose64, Pinethicket, I dream of horses, Nanowolf, HRoestBot, Jonesey95, Davidjensen, Skyerise, Hoo man, RedBot, MastiBot, Mister fidget, Σ, Jandalhandler, RazielZero, TobeBot, Intermediatech, Lotje, Michael9422, Noamraph, RichNick, MatthewRay- field, Crysb, Lysander89, Nukareddy, Alph Bot, Ripchip Bot, Galois fu, Javaweb, Fitoschido, Digichoron, Pensrulerstape, Phunehehe, EmausBot, John of Reading, Orphan Wiki, WikitanvirBot, Dewritech, Racerx11, Snydeq, MartinThoma, Peaceray, Trogdor31, Scgtrp, Carbo1200, Bondates, Chricho, Strombrg, ZéroBot, QuentinUK, Traxs7, Wes.turner, MithrandirAgain, Joshfinnie, Playdagame6991, KuduIO, Elektrik Shoos, Bilbo571, H3llBot, Mstow, Aflafla1, Demonkoryu, Netha Hussain, Jaycee55, Jsginther, Softarch Jon, Robbiemor- rison, Creativetechnologist, Macrocoders, L Kensington, Zephyrus Tavvier, Ready, Zfish118, Jcubic, CountMacula, Lance Albin, Suede Sofa, Mentibot, ChuispastonBot, Wimerrill, Dicsee, Hibou57, Guigolum, Cgt, Petrb, Faramir1138, ClueBot NG, Tillander, Kkdd- kkdd, Kuguar03, MelbourneStar, Gilderien, Satellizer, Titusfx, Strcat, Leekangwon, Kaizhu, Liberulo, Snotbot, Ajh257, Eugenia d, Widr, WikiPuppies, Marko Knoebl, Kctan73, Vago, Helpful Pixie Bot, Dlw20070716, පසිඳු කාවින්ද, Yxyang93, Nadeily, Picklebobdogflog, BG19bot, Walrus068, MusikAnimal, Frze, Tjohnson2, Megakacktus, Nsda, AwamerT, Mark Arsten, PartTimeGnome, Compfreak7, Myt- elecom, Exercisephys, Gazaneh, Wiki guru 425, Crh23, HardBoiledEggs, Chmarkine, The.rahul.nair, Ricordisamoa, Mayast, Shirudo, As- sociat0r, Stevenybw, IkamusumeFan, HueSatLum, Pratyya Ghosh, Lrekucki, Sunnyok, Khazar2, Feg99, Dexbot, Webclient101, M4r51n, DominicEdwardMolish, JuvenisUrsus, Akesi, Zziccardi, Prooktastic, Epicgenius, Amizra, Shishirdasika, Natharnio Armarnio, RosaM- cVey, Pinstripepolo, AmaryllisGardener, Echinacin35, Shivajivarma, Astrofrog, SCIdude, Sesank23, Whiskerzman, Jdaudier, TechFilmer, ToxicDragon, Brk0 0, Babitaarora, Comp.arch, Haminoon, Huihermit, Panpog1, Rashid alen, Amritchhetrib, Eric Corbett, My name is not dave, Mandruss, Ginsuloft, Edwardwh, DungeonSiegeAddict510, JmdPpl, Awaisdev, PyCode, GKTCS, Dough34, ScotXW, Linux- java, Robert.Labrie, WittyWidi, Bailey402, Editorfun, Snowflake Fairy, Dingwales44, CarnivorousBunny, Monkbot, Agent0047, Zesterer, Lawiki1534, CamelCase, 2014Best, Ndgs2000, Alphafoxtrot4, MattOloughlin, I8086, JackHed, Helios crucible, Coffeeandmilkandsugar and Anonymous: 1247

15.2 Images

• File:Commons-logo.svg Source: http://upload.wikimedia.org/wikipedia/en/4/4a/Commons-logo.svg License: ? Contributors: ? Original artist: ? • File:Folder_Hexagonal_Icon.svg Source: http://upload.wikimedia.org/wikipedia/en/4/48/Folder_Hexagonal_Icon.svg License: Cc-by- sa-3.0 Contributors: ? Original artist: ? • File:Free_Software_Portal_Logo.svg Source: http://upload.wikimedia.org/wikipedia/commons/3/31/Free_and_open-source_ software_logo_%282009%29.svg License: Contributors: FOSS Logo.svg Original artist: Portal Logo.svg (FOSS Logo.svg): ViperSnake151 • File:Guido_van_Rossum_OSCON_2006.jpg Source: http://upload.wikimedia.org/wikipedia/commons/6/66/Guido_van_Rossum_ OSCON_2006.jpg License: CC BY-SA 2.0 Contributors: 2006oscon_203.JPG Original artist: Doc Searls • File:Portal-puzzle.svg Source: http://upload.wikimedia.org/wikipedia/en/f/fd/Portal-puzzle.svg License: Public domain Contributors: ? Original artist: ? • File:Python-logo-notext.svg Source: http://upload.wikimedia.org/wikipedia/commons/c/c3/Python-logo-notext.svg License: GPL Con- tributors: www.python.org Original artist: www.python.org • File:Python_logo_and_wordmark.svg Source: http://upload.wikimedia.org/wikipedia/commons/f/f8/Python_logo_and_wordmark.svg License: GPL Contributors: https://www.python.org/community/logos/ Original artist: www.python.org • File:Symbol_book_class2.svg Source: http://upload.wikimedia.org/wikipedia/commons/8/89/Symbol_book_class2.svg License: CC BY-SA 2.5 Contributors: Mad by Lokal_Profil by combining: Original artist: Lokal_Profil • File:Symbol_list_class.svg Source: http://upload.wikimedia.org/wikipedia/en/d/db/Symbol_list_class.svg License: Public domain Con- tributors: ? Original artist: ? • File:Symbol_neutral_vote.svg Source: http://upload.wikimedia.org/wikipedia/en/8/89/Symbol_neutral_vote.svg License: Public domain Contributors: ? Original artist: ? • File:Symbol_support_vote.svg Source: http://upload.wikimedia.org/wikipedia/en/9/94/Symbol_support_vote.svg License: Public do- main Contributors: ? Original artist: ? • File:Wikibooks-logo-en-noslogan.svg Source: http://upload.wikimedia.org/wikipedia/commons/d/df/Wikibooks-logo-en-noslogan. svg License: CC BY-SA 3.0 Contributors: Own work Original artist: User:Bastique, User:Ramac et al. • File:Wikibooks-logo.svg Source: http://upload.wikimedia.org/wikipedia/commons/f/fa/Wikibooks-logo.svg License: CC BY-SA 3.0 Contributors: Own work Original artist: User:Bastique, User:Ramac et al. • File:Wikiquote-logo.svg Source: http://upload.wikimedia.org/wikipedia/commons/f/fa/Wikiquote-logo.svg License: Public domain Contributors: ? Original artist: ? • File:Wikiversity-logo-Snorky.svg Source: http://upload.wikimedia.org/wikipedia/commons/1/1b/Wikiversity-logo-en.svg License: CC BY-SA 3.0 Contributors: Own work Original artist: Snorky

15.3 Content license

• Creative Commons Attribution-Share Alike 3.0