The History of Python
python-history.blogspot.com · Personal blog · on HN since 2009
Guido van Rossum writes the history of Python, covering the origins of its design choices and features.
What HN saysHN commenters use it as a primary source for why Python works as it does and how it relates to other languages.
88HN people shared it
49linked it in comments
51stories submitted
747story points
3 months agolast shared
2009people per year2026
Most-shared posts
- 1Origins of Python's “Functional” Features (2009)16 people · 177 points · first shared 2009 · 34 comments on HN
- 2Why Python's integer division floors (2010)7 people · 120 points · first shared 2010 · 98 comments on HN
- 3The History of Python: Early Language Design and Development6 people · 10 points · first shared 2009 · discussion on HN
- 4The History of Python: Adding Support for User-defined Classes4 people · 41 points · first shared 2009 · 1 comments on HN
- 5GVR - Python: A Personal History (Part 1)4 people · 3 points · first shared 2009 · discussion on HN
- 6Brief timeline of python4 people · first shared 2010
- 7The History of Python3 people · 67 points · first shared 2009 · 11 comments on HN
- 8Microsoft Ships Python Code... in 19963 people · 47 points · first shared 2009 · 5 comments on HN
- 9The History of Python: From List Comprehensions to Generator Expressions3 people · 43 points · first shared 2010 · 1 comments on HN
- 10The Problem with Integer Division (2009)3 people · 14 points · first shared 2009 · 2 comments on HN
- 11The History of Python: Method Resolution Order3 people · 4 points · first shared 2010 · discussion on HN
- 12Why Python uses 0-based indexing3 people · 3 points · first shared 2017 · 3 comments on HN
- 13Microsoft Ships Python Code in 1996 (2009)2 people · 72 points · first shared 2016 · 21 comments on HN
- 14The History of Python: How Exceptions Came to be Classes2 people · 22 points · first shared 2009 · discussion on HN
- 15The History of Python: First-class Everything2 people · 12 points · first shared 2009 · discussion on HN
What HN people wrote when they linked it
jashkenas · 2012-03-03
Sure.
PHP's "deep thought" was that in the context of building dynamic web pages, perhaps it made sense to embed a scripting language into HTML itself -- instead of calling out to an external program. There's an example of the initial idea being responsible for much of PHP's enduring success.
And here's an anecdote that explains how it was (lack of) readability in significant indentation that led to Python getting its colon:
> In 1978, in a design session in a mansion in Jabłonna (Poland),
> Robert Dewar, Peter King, Jack Schwartz and Lambert were
> comparing various alternative proposed syntaxes for B, by
> comparing (buggy) bubble sort implementations written down in
> each alternative. Since they couldn't agree, Robert Dewar's wife
> was called from her room and asked for her opinion, like a
> modern-day Paris asked to compare the beauty of Hera, Athena,
> and Aphrodite. But after the first version was explained to her,
> she remarked: "You mean, in the line where it says: 'FOR i ... ',
> that it has to be done for the lines that follow; not just for
> that line?!" And here the scientists realized that the
> misunderstanding would have been avoided if there had been a colon
> at the end of that line.
(from http://python-history.blogspot.com/)
acdha · 2023-01-16
Because that’s how their creators describe them. C# started as COOL, as in “C-like Object Oriented Language”. Python incorporates that term in descriptions from the 90s and see e.g. http://python-history.blogspot.com/2009/01/introduction-and-overview.h… Both incorporate other paradigms like every other popular language but that doesn’t negate the huge influence OOP had on several generations of languages.
If you’re on some weird purity bent where you insist mainstream usage is wrong, well, I can’t stop you but I’ve never seen that result in something insightful or educational.
Rochus · 2020-11-07
> Smalltalk had always been a primarily academic language
There was quite a hype in the nineties with many enterprise applications based on Smalltalk; my first contact with Smalltalk was in a commercial, not an academic setting; most of it blew away when cheap, fast (HotSpot) Java became available.
> Ruby, Python, Java, C#, etc, all owe a great deal to Smalltalk.
That's a bit too optimistic. E.g. Python is not a descentent of Smalltalk (see e.g. http://python-history.blogspot.com/2013/10/), neither is Java (see e.g. https://www.youtube.com/watch?v=ccRtIdlTqlU&feature=youtu.be&t… C# is also rather a brain child of Java and C++ than of Smalltalk.
archgoon · 2011-11-02
>>... Python (which was, after all, originally designed as a language for teaching OO concepts).
This isn't quite right. The teaching language was ABC, a different project that Guido worked on. Python was his own language, created for the Amoeba project (an OS research project), inspired and influenced by, but not the same as, ABC, which was not object oriented. Guido says that the purpose of python for the Amoeba project was to: "bridge the gap between C and the shell"
http://en.wikipedia.org/wiki/ABC_%28programming_language%29
http://python-history.blogspot.com/2009/01/personal-history-part-1-cwi…
However, if you have additional information, I'd love to hear about it. I've heard the "Python was originally a teaching language" several times, but as far as I can tell, that's not actually true.
brutimus · 2009-06-12
The one place where the functools.partial failed me was in partialing on class methods. functools.partial actually gives you a callable class, instead of the functional closure that this example gives you (though I don't really consider this to be that great of an example). When a class is instantiated, the method functions (unbound methods) are turned into bound methods, something a class can't be. Guido talks about this a bit whole process here... http://python-history.blogspot.com/2009/02/first-class-everything.html
DonHopkins · 2025-07-13
The FORTH-83 standard changed FIG-FORTH's official value of TRUE from 1 to -1 so all its bits were set. That was a rough transition like Python 2=>3, but worth it. It also defined /MOD integer division to be floored (rounded towards -infinity instead of zero like FIG-FORTH), which was also a tough change but the right one, especially for graphics.
https://python-history.blogspot.com/2010/08/why-pythons-integer-divisi…
https://forth-standard.org/standard/diff?utm_source=chatgpt.com
https://atariwiki.org/wiki/Wiki.jsp?page=Converting+FIG-Forth+Programs…
>4. For various reasons the definition of all divide functions general effect is that quotients are floored instead of rounded toward zero. This should cause no problems for most pre-existing application software. The new divide functions are marginally slower than the old (a few machine cycles under most circumstances). The side-effects of the redefinition for floored divide can be counter-intuitive under some circumstances. For example, in FIG-Forth the operation
-40 360 MOD >would return the obvious answer (-40) on the stack, while 83- Standard Forth will return the answer 320!
>5. The true flag returned by all logical operations has been changed from the value 1 (in FIG-Forth) to the value -1 (in Forth-83, all bits set). If your code used the 0 or 1 returned by a comparison in an arithmetic operation, you will need to interpolate the operator ABS after the logical…
Lammy · 2025-02-14
Is Delphi's name any sort of reference to triumphing over the Python language? Delphi is where Apollo slew the Python: https://www2.classics.upenn.edu/myth/php/hymns/index.php?page=apollo
“The story of Apollo at Delphi begins with the god's conquest of the Python. According to some ancient accounts, the Python protected the oracle of Gaia, the mother of the gods and first inhabitant of the site. As described in the Homeric Hymn to Apollo, Apollo slew the serpent and then spent eight years on leave, in order to cleanse himself. Zeus also played a role in Delphi's mythological construction. Wanting to find the center of the Earth, Zeus sent out two eagles at opposite ends of the Earth. They collided at Delphi, and Zeus concluded Delphi was the "omphalos," or navel of the world.”
According to Guido's timeline, Python began development in 1989, had its first release to `alt.sources` in 1991, and had its 1-point-0 release in 1994, so it's possible that people at Borland could have been aware of it by 1995: https://python-history.blogspot.com/2009/01/brief-timeline-of-python.h…
Wikipedia suggests not however: “Delphi was originally one of many codenames of a pre-release development tool project at Borland. Borland developer Danny Thorpe suggested the Delphi codename in reference to the Oracle at Delphi. One of the design goals of the product was to provide database connectivity to programmers as a key feature and a popular database package at the time was Oracle database;…
smallerize · 2026-05-21
"I didn't envision Python as a functional language" https://python-history.blogspot.com/2009/04/origins-of-pythons-functio…
"I don't think it makes much sense to try to add "functional" primitives to Python, because the reason those primitives work well in functional languages don't apply to Python, and they make the code pretty unreadable for people who aren't used to functional languages (which means most programmers). I also don't think that the current crop of functional languages is ready for mainstream." https://developers.slashdot.org/story/13/08/25/2115204/interviews-guid…
BlueTemplar · 2024-02-28
My point is that Fortran doesn't have precedence on math, see this comment by Austin Feller :
http://python-history.blogspot.com/2010/08/why-pythons-integer-divisio…
leetrout · 2023-08-22
Fun fact: Microsoft shipped Python code in 1996. The could do it again if they really wanted to.
http://python-history.blogspot.com/2009/01/microsoft-ships-python-code…
lifthrasiir · 2023-02-08
This is indeed the reason that Python didn't (initially) have rational numbers while its spiritual predecessor ABC had. [1]
[1] https://python-history.blogspot.com/2009/03/problem-with-integer-divis…
mulmboy · 2021-09-03
Cheers for the history lesson - True and False really are relatively new in Python. I wonder how common that knowledge is.
http://python-history.blogspot.com/2013/11/the-history-of-bool-true-an…
https://www.python.org/dev/peps/pep-0285/
pansa2 · 2021-02-16
> JS or even Python (both were not OO in first version)
This isn't true for Python. Quoting Guido: "classes were added late during Python’s first year of development at CWI, though well before the first public release" [0].
I don't think it's true for JS either - the first versions didn't have classes, but I believe they already had prototype-based OO.
[0] http://python-history.blogspot.com/2009/02/adding-support-for-user-def…
duckerude · 2021-02-15
> in fact, I would have gone a step further and made integer division return fractions rather than floats by default, as well
This was decided against in Python:
> ABC had two types of numbers at run time; exact numbers which were represented as arbitrary precision rational numbers and approximate numbers which were represented as binary floating point with extended exponent range. The rational numbers didn’t pan out in my view. (Anecdote: I tried to compute my taxes once using ABC. The program, which seemed fairly straightforward, was taking way too long to compute a few simple numbers. Upon investigation it turned out that it was doing arithmetic on numers with thousands of digits of precision, which were to be rounded to guilders and cents for printing.)
https://python-history.blogspot.com/2009/02/early-language-design-and-…
abiogenesis · 2021-01-26
Sorry, to be clear I was referring to an xckd comic [1] and the Python Easter Egg inspired by it [2].
[1] https://xkcd.com/353/
[2] http://python-history.blogspot.com/2010/06/import-antigravity.html
thedirt0115 · 2020-01-27
Some background on Python's choice for 0-based indexing:
http://python-history.blogspot.com/2013/10/why-python-uses-0-based-ind…
See Guido's comment on calendar :)
erokar · 2019-11-14
The nuisance of having to add self as parameter to every class method, no way of enforcing private methods and the mix between methods on objects and functions in the standard library. OO feels more integrated in e.g. Ruby.
About some of the design decisions in Guido's own words: http://python-history.blogspot.com/2009/02/adding-support-for-user-def…
darkpuma · 2019-01-04
It's capable of functional programming in the sense that functions are first class values that you can pass around, but it is infamously hostile to functional programming. For example, python still doesn't have multi-line lambdas, and the justifications for why always boil down to it being "unpythonic".
Furthermore over the years Guido has made it pretty clear that he doesn't particularly like or care about functional programming: https://python-history.blogspot.com/2009/04/origins-of-pythons-functio…
maxerickson · 2018-12-18
It was heavily influenced by ABC, a language meant to be used for teaching:
So, I decided to design a language of my own which would borrow everything I liked from ABC while at the same time fixing all its problems (as I perceived them).
http://python-history.blogspot.com/2009/01/personal-history-part-1-cwi…
1wd · 2018-08-23
Guido van Rossum has written about the background of this in Python here: http://python-history.blogspot.com/2010/08/why-pythons-integer-divisio…
bakery2k · 2018-05-11
Guido has written a blog post explaining "Why Python's Integer Division Floors" [1].
Python also uses floor division, and the corresponding "sign-of-modulo matches sign-of-divisor", for floating-point numbers. The blog post claims that this can be problematic in certain cases (compared to C's "sign-of-modulo matches sign-of-dividend"), but does not give any concrete examples.
[1] http://python-history.blogspot.com.au/2010/08/why-pythons-integer-divi…
icebraining · 2017-09-01
Actually, Python does have that :) It's called __slots__:
The presence of __slots__ does several things. First, it restricts the valid set of attribute names on an object to exactly those names listed. Second, since the attributes are now fixed, it is no longer necessary to store attributes in an instance dictionary, so the __dict__ attribute is removed. Instead, the attributes can be stored in predetermined locations within an array. Thus, every slot attribute is actually a descriptor object that knows how to set/get each attribute using an array index. Underneath the covers, the implementation of this feature is done entirely in C and is highly efficient.
http://python-history.blogspot.be/2010/06/inside-story-on-new-style-cl…
spenrose · 2017-03-03
Python. It was lauded for usability and became a 30 year success: http://python-history.blogspot.com/2009/02/early-language-design-and-d…
rch · 2017-02-09
Apart from general fitness for embedding and extending, I like the versatility of Lua tables:
https://www.lua.org/pil/3.6.html
In particular, to initialize a table to be used as a record:
a = {x=0, y=0}
which is equivalent to:
a = {}; a.x=0; a.y=0
and:
a.x = nil -- removes field "x"
But I think Guido's right about 0-based indexing:
http://python-history.blogspot.com/2013/10/why-python-uses-0-based-ind…
Walkman · 2016-12-15
A little bit about 0-based indexing on the practical side from Guido van Rossum: http://python-history.blogspot.hu/2013/10/why-python-uses-0-based-inde…
fovc · 2016-06-24
Since Python 3, both generators and lists create a new stack frame. [1] (2nd to last paragraph)
[1] http://python-history.blogspot.com/2010/06/from-list-comprehensions-to…
fny · 2016-06-20
While this is gorgeous, I can't help but feel it's a bit disingenuous to call anything "Pythonic" and "functional" at the same time given Guido's take on the whole thing[0][1]... especially when you're actually extending the language to make it happen. ;)
[0]: http://python-history.blogspot.com/2009/04/origins-of-pythons-function…
[1]: http://xahlee.info/perl-python/python_3000.html
vmorgulis · 2016-02-29
Python early days:
http://python-history.blogspot.fr/2009/01/personal-history-part-1-cwi.…
homarp · 2015-11-28
You're so right. Luckily, we have php.
the Christmas joke starts from:
http://python-history.blogspot.com/2009/01/brief-timeline-of-python.ht… and https://www.python.org/doc/essays/foreword/
oconnor663 · 2015-07-30
This looks like Guido's version of the story: http://python-history.blogspot.com/2009/04/origins-of-pythons-function…