two ideoms at one blow: line-reading and regexp-matching

Remco Gerlich scarblac at pino.selwerd.nl
Thu Feb 21 11:12:08 EST 2002


Paul Rubin <phr-n2002a at nightsong.com> wrote in comp.lang.python:
> Gustavo Cordova <gcordova at hebmex.com> writes:
> > > Next question: why is muddying the statement/expression distinction a
> > > detriment?  As opposed to the alternate view, that the 
> > > statement/expression
> > > distinction is itself a detriment?
> > > -- 
> > 
> > Or, if I may rephrase the question:
> > 
> > Why is the statement/expression distinction a detriment,
> > as opposed to the alternate view, that the statement/expression
> > distinction is a virtue?
> 
> Because we've already seen, assignments in expressions are useful.
> And blurring the statement/expression distinction has proven quite
> successful in languages like C and Lisp.

Are you sure? writing 'if (a=3) {' must be the most common bug in C
programs. I wouldn't call it successful. In fact, Python already caught
three of those for me this week as syntax errors - that would have been bugs
in C.

Also, putting multiple conceptual things on one line isn't good for code
clarity.

> Anyway, language attempts to impose "morality" on programmers tend to
> annoy programmers more than they makes code any cleaner.

When Python flagged those typos this week, I was *happy*.

> Maybe there's a principle to be found here: "design by FAQ".  If newbies
> keep arriving and asking over and over again "how do I do X?", maybe
> there's a good reason for having a way to do X.  We've seen that already
> for augmented assignments.

Most newbies tend to come from language X, think Python is great,
except it isn't quite X - why block indentation when { } would work? Why
'self'? Why not assignments in expressions? Etc.

Hollywood wanted to make a movie out of Pratchett's "Mort" book, but only if
that morbid 'Death' character could be removed.

The Python idiom for while (m := re.match('whee',x)): blah() is

while 1:
   m = re.match('whee',x)
   if not m:
      break
   blah()
   
And to me, an experienced Python programmer who hasn't really used other
languages in quite a while, that looks *much* clearer than the one liner
assignment-in-the-while version. It's a common pattern, and the eye
recognizes it immediately.

But in the end, neither of our subjective opinions matter - Guido's does.
That's probably why this language is so great.

-- 
Remco Gerlich



More information about the Python-list mailing list