Python (programming language)
Python is a programming language that Guido van Rossum began building in the late 1980s while working at Centrum Wiskunde and Informatica in the Netherlands. What is unusual about Python is that its name has nothing to do with snakes. Van Rossum was a fan of the British comedy group Monty Python, and he wanted the language to feel fun. That playful spirit shaped everything from its documentation to the example variable names that Python programmers still use today.
Python grew from frustration. Van Rossum had worked on a language called ABC, and he found its approach limiting. He wanted something different: a small, clean core with a large library of ready-made tools, and an interpreter that other software could extend easily. What he built became one of the most widely used programming languages on the planet. The questions worth asking are: how did a hobbyist project from the Netherlands end up teaching millions of people to code, and what design choices made that happen?
ABC was the language that made Python necessary. Van Rossum had worked on ABC at CWI, and he watched it represent a philosophy he found deeply wrong: build everything into the language itself, make it monolithic and self-contained. ABC was inspired by a language called SETL, and it was capable of handling certain kinds of errors and interacting with an operating system called Amoeba. But Van Rossum's frustration with ABC's opposite approach, packing all functionality into one core, is what pointed him toward Python's defining characteristic.
Python implementation began in December 1989. Van Rossum designed Python to be extensible through modules rather than bloated at its center. That single architectural decision meant developers could add capabilities to Python without touching the language itself. It also made Python practical as a way to add programmable interfaces to software that already existed. Van Rossum released the first public version, Python 0.9.0, in 1991. The name, borrowed from Monty Python, signaled that this was not going to be another dry academic exercise.
For nearly three decades, Van Rossum held an unusual title: Benevolent Dictator for Life. The Python community bestowed it on him to describe the reality of how the language was governed. He was the chief decision-maker, and he held that authority alone. Then, on the 12th of July 2018, he announced his permanent vacation from those responsibilities.
His departure was not entirely peaceful. Van Rossum resigned specifically after a conflict over adding what is called the assignment expression operator to Python 3.8. The Python community had debated this feature intensely, and the conflict made him step back entirely. In January 2019, active Python core developers elected a five-member Steering Council to lead the project going forward. Van Rossum himself has since come out of retirement and refers to himself as BDFL-emeritus. The conflict over that one operator illustrates something real about Python's philosophy: even small additions to the language face serious scrutiny, because Python's culture treats simplicity as a value worth defending.
Tim Peters wrote a document called the Zen of Python, formalized as PEP 20, which distills the language's core philosophy into a set of aphorisms. Among them: explicit is better than implicit; simple is better than complex; readability counts; there should be one, and preferably only one, obvious way to do it. These are not rules enforced by the compiler. They are guidelines, and Python has received persistent criticism for violating them anyway.
Alex Martelli, a Fellow at the Python Software Foundation and author of Python books, captured the cultural standard bluntly. In Pythonic culture, he wrote, calling something clever is not a compliment. The community coined the term pythonic to describe code that uses Python idioms well, reads naturally, and conforms to the language's minimalist values. However, practical pressures push against this. Python provides at least three ways to format a string literal, with no authoritative guidance on which to choose. The Zen, as the community acknowledges, describes an aspiration rather than an achieved reality. Python even uses the placeholder words spam and eggs in official documentation as a tribute to a Monty Python sketch about spam, rather than the conventional foo and bar used elsewhere in programming.
Python 2.0 arrived on the 16th of October 2000, bringing list comprehensions, cycle-detecting garbage collection, reference counting, and Unicode support. For years, Python 2 was the version the world used. Then Python 3.0 was released on the 3rd of December 2008, and it introduced a break that the community spent over a decade managing.
Python 3 was not backward-compatible with Python 2. The end-of-life for Python 2.7 was first set for 2015, then postponed to 2020. The reason for that postponement was practical: an enormous body of existing code could not easily be ported forward. Python 2.7.18, released in 2020, was the final release in the Python 2 line. Even after official support ended, an alternative implementation called PyPy continued to support Python 2.7, adding backported security updates under the version designation 2.7.18+. Today, the Python Software Foundation actively supports versions 3.10 through 3.14. Since November 2025, Python 3.10 has been the oldest maintained branch.
Most programming languages use curly brackets to define where a block of code begins and ends. Python does not. It uses indentation. An increase in indentation signals the start of a new block; a decrease signals the end. The recommended indent size is four spaces. This rule, sometimes called the off-side rule, means that in Python, the visual structure of a program and its logical structure are identical.
Python also enforces a strict boundary between expressions and statements. In languages such as Common Lisp, Scheme, or Ruby, that line is blurry. Python keeps them separate, which leads to some duplication: for-loops and list comprehensions both handle iteration, and if-blocks and conditional expressions both handle branching. The payoff is that Python code tends to be readable by people who did not write it. Python forbids certain operations by design: it has no do-while loops, which Van Rossum considered harmful. It also does not support tail call optimization or first-class continuations, and Van Rossum stated that the language never will. These refusals are deliberate. Every omission is a readability decision.
CPython is the reference implementation, written in C and meeting the C11 standard since version 3.11. It compiles Python programs into intermediate bytecode, which a virtual machine then executes. CPython's energy usage for typical code is worse than C by a factor of 75.88, and its throughput is worse than C by a factor of 71.9. Memory usage runs about 2.4 times higher than C. These are real costs, and the Python ecosystem has built a range of alternatives in response.
PyPy uses just-in-time compilation and often improves speed significantly compared to CPython, though it does not support every C-based library. Codon uses an ahead-of-time compiler and claims speedups of ten to a hundred times over CPython for suitable code. MicroPython and CircuitPython are optimized for microcontrollers, including the Lego Mindstorms EV3. RustPython, written in Rust, aims for compatibility with CPython including its C-level interface, and is already used in projects such as GrepTimeDB and Ruff. Nokia released PyS60, a Python 2 interpreter for Series 60 mobile phones, in 2005. Google launched a project called Unladen Swallow in 2009 with the goal of speeding up the Python interpreter five-fold using LLVM, though that project is now unsupported. The breadth of these efforts reflects a persistent tension: Python's design prioritizes developer clarity over machine speed, and that tradeoff invites constant reinvention.
Since 2003, Python has consistently ranked among the top ten most popular programming languages in the TIOBE Programming Community Index, which bases its rankings on searches across 24 platforms. The Python Package Index, known as PyPI, contains over 614,339 packages. Machine learning has become one of Python's most visible domains, drawing in practitioners who rely on libraries that often run C or Fortran underneath to deliver performance the Python interpreter cannot.
Python is widely taught as an introductory programming language, which means generations of programmers wrote their first function using the def keyword and their first loop with a for statement. Languages including ECMAScript, JavaScript, Julia, Go, and Mojo have drawn direct influence from Python's design. Julia was designed to be as usable for general programming as Python. Go was designed for the speed of working in a dynamic language like Python. Python 3.15, currently in alpha, is expected to reach stable release in October 2026, and it adds the ability to lazily import modules using a new lazy keyword. The project that Van Rossum started in December 1989 is still being actively extended, one annual release at a time.
Up Next
Common questions
Who created Python programming language and when?
Guido van Rossum created Python. He began working on it in the late 1980s at Centrum Wiskunde and Informatica in the Netherlands, with implementation starting in December 1989. He released the first public version, Python 0.9.0, in 1991.
Why is Python named after Monty Python?
Python is named after the British comedy group Monty Python, whose work Guido van Rossum enjoyed while developing the language. The name reflects his intention to make the language feel fun. Monty Python references appear throughout official Python documentation and culture, including the use of spam and eggs as example variable names.
What is the difference between Python 2 and Python 3?
Python 3.0, released on the 3rd of December 2008, introduced a major revision that was not fully backward-compatible with Python 2. Python 2.7's official end-of-life was delayed from 2015 to 2020 because of the large volume of existing code that could not easily be ported forward. Python 2.7.18, released in 2020, was the final Python 2 release.
What does Benevolent Dictator for Life mean in Python?
Benevolent Dictator for Life, abbreviated BDFL, was a title the Python community gave to Guido van Rossum to describe his role as the language's chief decision-maker. He held that title from the project's founding until the 12th of July 2018, when he announced his permanent vacation from those responsibilities. In January 2019, a five-member Steering Council was elected to replace his single-person authority.
Why does Python use indentation instead of curly brackets?
Python uses whitespace indentation to delimit code blocks so that the visual structure of a program matches its logical structure exactly. An increase in indentation signals the start of a new block; a decrease signals the end. This feature, sometimes called the off-side rule, is a deliberate design choice tied to Python's emphasis on readability. The recommended indent size is four spaces.
How popular is Python and how many packages does it have?
Since 2003, Python has consistently ranked among the top ten most popular programming languages in the TIOBE Programming Community Index, which ranks languages based on searches across 24 platforms. The Python Package Index contains over 614,339 packages. Python is widely taught as an introductory programming language and has gained extensive use in the machine learning community.
All sources
195 references cited across the entry
- 2webPython 0.9.1 part 01/21alt.sources archives
- 4webPEP 11 – CPython platform supportMartin von Löwis et al.
- 8webPEP 488 – Elimination of PYO filesBrett Cannon — 20 February 2015
- 9webPEP 273 – Import Modules from Zip ArchivesJames C. Ahlstrom — 11 October 2001
- 10webPEP 561 – Distributing and Packaging Type InformationEmma Harper Smith — 9 September 2017
- 11webPEP 397 – Python launcher for WindowsMark Hammond et al. — 15 March 2011
- 12webPEP 0441 – Improving Python ZIP Application SupportDaniel Holth et al. — 30 March 2013
- 13webStarlark Language
- 17webCoffeeScript
- 18webPerl and Python influences in JavaScriptAxel Rauschmayer — 24 February 2013
- 19webChapter 3: The Nature of JavaScript; InfluencesAxel Rauschmayer — O'Reilly
- 20webWhy We Created JuliaJeff Bezanson et al. — February 2012
- 21webPEP 484 – Type Hints
- 26webTIOBE IndexTIOBE
- 27journalBridging the Cyber-Analysis Gap: The Democratization of Data ScienceJohn Healy et al. — 2017
- 28journalCurriculum for an Introductory Computer Science Course: Identifying Recommendations from Academia and IndustrySimon G. Sultana et al. — 2017
- 29webPEP 8100 – January 2019 Steering Council electionNathaniel J. Smith et al. — Python Software Foundation
- 30webPEP 13 – Python Language GovernanceThe Python core team and community
- 31bookPython for kids: a playful introduction to programmingJason R. Briggs et al. — No Starch Press — 2013
- 32webPEP 373 – Python 2.7 Release ScheduleBenjamin Peterson
- 33webPEP 466 – Network Security Enhancements for Python 2.7.xAlyssa Coghlan
- 34webSunsetting Python 2
- 35webPEP 373 – Python 2.7 Release ScheduleBenjamin Peterson
- 36webPyPy v7.3.14 releasemattip — 25 December 2023
- 37webPython 2.7.18, the last release of Python 2Benjamin Peterson — 20 April 2020
- 40webReference counts
- 41webPython changes 2014+Mark Lutz — January 2022
- 42webConfusion regarding a rule in 'the Zen of Python'2022-05-03
- 43webThe most controversial Python 'walrus operator'Chetan Ambi — 2021-07-04
- 44webThe controversy behind the 'walrus operator' in PythonJeremy Grifski — 2020-05-24
- 45webPython 3.15.0 beta 2 is here!Hugo van Kemenade — June 2, 2026
- 46webPython string formatting best practicesDan Bader
- 49webCode style
- 50bookIntroduction to Computation and Programming Using Python: With Application to Understanding DataJohn V. Guttag — MIT Press — 12 August 2016
- 51webPEP 8 – Style Guide for Python CodeGuido van Rossum et al.
- 55webdivision
- 62webPEP 483 – The Theory of Type HintsGuido van Rossum et al.
- 64webtyping — Support for type hintsPython Software Foundation
- 66webIntroduction
- 71webBuilt-in Types
- 73webWhat's New in Python 2.6Oct 29, 2013
- 75webAn introduction to Python for scientific computingScott Shell — 17 June 2014
- 76webPyPI2025-03-13
- 79webIPython DocumentationAugust 29, 2025
- 81webProject Jupyter
- 82webEnthought CanopyDoug Harper — Western Kentucky University — Spring 2024
- 83webEnthought Canopy
- 87webDownload Python
- 90webhistory vmspython
- 92bookProceedings of the 10th ACM SIGPLAN International Conference on Software Language EngineeringRui Pereira et al. — Association for Computing Machinery — 2017-10-23
- 94webDownload and InstallThe PyPy Team — 2019-12-28
- 96webMIT-Created Compiler Speeds up Python CodeLoraine Lawson — 2023-03-14
- 97webPython-for-EV3
- 98newsPyston returns from the dead to speed PythonSerdar Yegulalp — 29 October 2020
- 100webSnek Lang: feels like Python on ArduinosRafael Aroca — 2021-08-07
- 101webSnekboard Controls LEGO Power Functions with CircuitPython or Snek Programming Languages (Crowdfunding) – CNX SoftwareJean-Luc Aufranc (CNXSoft) — 2020-01-16
- 102webReady to find out if you're git famous?Michael Kennedy (@mkennedy)
- 103webThe Snek Programming Language: A Python-inspired Embedded Computing LanguageKeith Packard — 2022-12-20
- 104citationRustPython/RustPythonRustPython Dev — 2026-05-05
- 105webPython on the Nokia N90029 April 2010
- 106webBrython
- 110webNuitka Home Nuitka Home
- 111journalPythran: enabling static optimization of scientific Python programsSerge Guelton et al. — IOP Publishing — 16 March 2015
- 113webgoogle/grumpy10 April 2020
- 114webProjects
- 115newsGoogle's Grumpy code makes Python GoThomas Claburn in San Francisco
- 116webIronPython.net /
- 118webJython FAQ
- 119conferencePerformance of Python runtimes on a non-numeric scientific codeRiccardo Murri — 2013
- 121webLook Ma, No for Loops: Array Programming With NumPy – Real PythonReal Python
- 122webMoving Python's bugs to GitHub LWN.netJake Edge — 23 February 2022
- 124webProgramming languages: Why Python 4.0 might never arrive, according to its creatorOwen Hughes — 2021-05-24
- 126webChanging the Python release cadence LWN.netJake Edge — 23 October 2019
- 127bookPythonChris Fehily — Peachpit Press — 2002
- 128bookIntroducing PythonBill Lubanovic — Sebastopol, CA : O'Reilly Media — 2014
- 129webAcknowledgementsCharles Esterbrook — Cobra Language
- 130webProposals: iterators and generators ES4 Wikiwiki.ecmascript.org
- 131newsGoogle's Go: A New Programming Language That's Python Meets C++Jason Kincaid — 10 November 2009
- 133webMojo language marries Python and MLIR for AI developmentPaul Krill — 4 May 2023
- 134webModular Docs – Why Mojo
- 135webWhat is Mojo Programming Language?Michael Spencer — 4 May 2023
- 136webGDScript
- 137webChris Lattner's HomepageChris Lattner — Chris Lattner — 3 June 2014
- 139webWhy was Python created in the first place?Python Software Foundation
- 140webInterview with Guido van Rossum (July 1998)Andrew M. Kuchling — 22 December 2006
- 141journalAn Introduction to Python for UNIX/C ProgrammersGuido van Rossum — 1993
- 142webClassesPython Software Foundation
- 143webCall By ObjectFredrik Lundh
- 144webThe Python 2.3 Method Resolution OrderMichele Simionato — Python Software Foundation
- 145webFunctional Programming HOWTOA. M. Kuchling — Python Software Foundation
- 146webPEP 238 – Changing the Division OperatorMoshe Zadka et al. — Python Software Foundation — 11 March 2001
- 147webPEP 255 – Simple GeneratorsNeil Schemenauer et al. — Python Software Foundation — 18 May 2001
- 148webMore Control Flow ToolsPython Software Foundation
- 149bookPractical JRuby on Rails Web 2.0 Projects: bringing Ruby on Rails to the Java platformOla Bini — APress — 2007
- 150webA Python Book: Beginning Python, Advanced Python, and Python ExercisesDave Kuhlman
- 151webThe Making of PythonBill Venners — Artima — 13 January 2003
- 152webA Brief Timeline of PythonGuido van Rossum — 20 January 2009
- 153mailing listSETL (was: Lukewarm about range literals)Guido van Rossum — 29 August 2000
- 154webWhat's New in Python 2.0A. M. Kuchling et al. — Python Software Foundation — 16 October 2000
- 155webPython Metaclasses: Who? Why? When?The Cain Gang Ltd.
- 156web3.3. Special method namesPython Software Foundation
- 158webContracts for Python
- 159webPyDatalog
- 160web6.5 itertools – Functions creating iterators for efficient loopingDocs.python.org
- 161webPEP 20 – The Zen of PythonTim Peters — Python Software Foundation — 19 August 2004
- 162bookPython Cookbook, 2nd EditionAlex Martelli et al. — O'Reilly Media — 2005
- 163webPython CultureJanuary 21, 2014
- 164webPEP 1 – PEP Purpose and GuidelinesBarry Warsaw et al. — Python Software Foundation — 13 June 2000
- 165webGuido, Some Guys, and a Mailing List: How Python is DevelopedBrett Cannon — Python Software Foundation
- 166webPython-Dev Release Schedules (was Stability & change)Neal Norwitz — 8 April 2002
- 167webPEP 6 – Bug Fix ReleasesAahz et al. — Python Software Foundation — 15 March 2001
- 168webPython BuildbotPython Software Foundation
- 169webWhy is it called Python?Docs.python.org
- 170webWhetting Your AppetitePython Software Foundation
- 171webIn Python, should I use else after a return in an if block?Stack Exchange — 17 February 2011
- 172webIs Python a good language for beginning programmers?Python Software Foundation
- 173webMyths about indentation in PythonSecnetix.de
- 174webTail Recursion EliminationGuido van Rossum — Neopythonic.blogspot.be — 22 April 2009
- 175webLanguage Design Is Not Just Solving PuzzlesGuido van Rossum — Artima — 9 February 2006
- 176webPEP 342 – Coroutines via Enhanced GeneratorsGuido van Rossum et al. — Python Software Foundation — 10 May 2005
- 177webPEP 380Python.org
- 178webPEP 289 – Generator ExpressionsRaymond Hettinger — Python Software Foundation — 30 January 2002
- 179webPEP 308 – Conditional ExpressionsGuido van Rossum et al. — Python Software Foundation — 7 February 2003
- 181webPEP 237 – Unifying Long Integers and IntegersMoshe Zadka et al. — Python Software Foundation — 11 March 2001
- 182webWhy Python's Integer Division Floors24 August 2010
- 183citationround
- 184citationround
- 185bookPython Essential ReferenceDavid M. Beazley — Addison-Wesley Professional — 2009
- 186bookThe C Programming LanguageBrian W. Kernighan et al. — 1988
- 187webPEP 7 – Style Guide for C CodeGuido van Rossum — Python Software Foundation — 5 June 2001
- 188webCPython byte codeDocs.python.org
- 189webPython 2.5 internals
- 190webAn Interview with Guido van RossumOreilly.com
- 191webPyPy compatibilityPypy.org
- 192webspeed comparison between CPython and PypySpeed.pypy.org
- 193webApplication-level Stackless features – PyPy 2.0.2 documentationDoc.pypy.org
- 194webPlans for optimizing Python15 December 2009
- 195webBuild a Rapid Web Development Environment for Python Server Pages and OraclePrzemyslaw Piotrowski — Oracle — July 2006
- 196webPEP 327 – Decimal Data TypeFacundo Batista — Python Software Foundation — 17 October 2003
- 197webPEP 333 – Python Web Server Gateway Interface v1.0Phillip J. Eby — Python Software Foundation — 7 December 2003
- 198magazineGuido van Rossum Stepping Down from Role as Python's Benevolent Dictator For LifeCarlie Fairchild — 12 July 2018