Python was designed (was Re: Multi-threading in Python vs Java)

Peter Cacioppi peter.cacioppi at gmail.com
Mon Oct 14 17:11:24 EDT 2013


On Saturday, October 12, 2013 3:37:58 PM UTC-7, Chris Angelico wrote:
> On Sat, Oct 12, 2013 at 7:10 AM, Peter Cacioppi
> 
> <peter.cacioppi at gmail.com> wrote:
> 
> > Along with "batteries included" and "we're all adults", I think Python needs a pithy phrase summarizing how well thought out it is. That is to say, the major design decisions were all carefully considered, and as a result things that might appear to be problematic are actually not barriers in practice. My suggestion for this phrase is "Guido was here".
> 
> 
> 
> "Designed".
> 
> 
> 
> You simply can't get a good clean design if you just let it grow by
> 
> itself, one feature at a time. You'll end up with something where you
> 
> can do the same sort of thing in three different ways, and they all
> 
> have slightly different names:
> 
> 
> 
> http://me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-design/#general
> 
> 
> 
> (Note, I'm not here to say that PHP is awful and Python is awesome
> 
> (they are, but I'm not here to say it). It's just that I can point to
> 
> a blog post that shows what I'm saying.)
> 
> 
> 
> Design is why, for instance, Python's builtin types all behave the
> 
> same way with regard to in-place mutator methods: they don't return
> 
> self. I personally happen to quite like the "return self" style, as it
> 
> allows code like this:
> 
> 
> 
> GTK2.MenuBar()
> 
>     ->add(GTK2.MenuItem("_File")->set_submenu(GTK2.Menu()
> 
>         ->add(menuitem("_New Tab",addtab)->add_accelerator(...))
> 
>         ->add(menuitem("Close tab",closetab)->add_accelerator(...))
> 
>         ... etc ...
> 
>     ))
> 
>     ->add(GTK2.MenuItem("_Options")->set_submenu(GTK2.Menu()
> 
>         ->add(menuitem("_Font",fontdlg))
> 
>         ... etc ...
> 
>     ))
> 
>     ... etc ...
> 
> 
> 
> It's a single expression (this is from Pike, semantically similar to
> 
> Python) that creates and sets up the whole menu bar. Most of Pike's
> 
> object methods will return this (aka self) if it's believed to be of
> 
> use. The Python equivalent, since the .add() method on GTK objects
> 
> returns None, is a pile of code with temporary names. But that's a
> 
> smallish point of utility against a large point of consistency;
> 
> newbies can trust that a line like:
> 
> 
> 
> lst = lst.sort()
> 
> 
> 
> will trip them up immediately (since lst is now None), rather than
> 
> surprise them later when they try to make a sorted copy of the list:
> 
> 
> 
> sorted_lst = lst.sort()
> 
> 
> 
> which, if list.sort returned self, would leave you with sorted_lst is
> 
> lst, almost certainly not what the programmer intended.
> 
> 
> 
> Oh, and the use of exceptions everywhere is a sign of design, too.
> 
> Something went wrong that means you can't return a plausible value?
> 
> Raise.
> 
> 
> 
> >>> json.loads("{")
> 
> ValueError: Expecting object: line 1 column 0 (char 0)
> 
> 
> 
> >>> pickle.loads(b"\x80")
> 
> EOFError
> 
> 
> 
> Etcetera. PHP borrows from C in having piles and piles of "was there
> 
> an error" functions; there's no consistency in naming, nor (in many
> 
> cases) in the return values. Pike generally raises exceptions, but I/O
> 
> failure usually results in a zero return and the file object's errno
> 
> attribute set; but at least they're consistent error codes.
> 
> 
> 
> This is design. Python has a king (Guido). It wasn't built by a
> 
> committee. Maybe you won't like some aspect of Python's design, but it
> 
> has one, it's not just sloppily slapped together.
> 
> 
> 
> ChrisA

So Python was designed reasonably well, with a minimum of hacky-screw-ups. This happened because Python's growth was effectively managed by an individual who was well suited to the task. In other words, "Guido was here". 

Good thread, I learned a lot from it, thanks.




More information about the Python-list mailing list