[Python-ideas] for/else syntax
Steven D'Aprano
steve at pearwood.info
Sat Oct 3 08:39:47 CEST 2009
On Sat, 3 Oct 2009 03:08:49 pm Nick Coghlan wrote:
> [...] we should at least investigate
> having the compiler itself raise at least a SyntaxWarning if it
> encounters a for/else or while/else construct without also
> encountering a break statement inside the loop.
[...]
> For a loop with no break statements the else clause will *always* be
> executed,
Modulo returns and exceptions.
> hence using the clause is completely redundant
True. But there is an effectively infinite amount of completely
redundant code possible in Python. The performance hit and maintenance
burden of raising warnings for redundant code would be immense, to say
nothing of the nuisance value for the developer.
Such warnings don't belong in the language, they belong in PyLint or
equivalent.
> - the code
> it contains might as well be dedented and placed inline at the same
> level as the loop header.
True, except that the else clause clearly flags it as part of the
semantic unit together with the for loop. Dedenting the code flags it
as separate from the for loop.
Apart from free style comments, we don't have a way of flagging code
blobs finer than the function -- Python doesn't work that way. For
instance, we're reduced to marking logical groups of code smaller than
a function with comments.
# Initialise the values.
x = 2
y = 3 + x
z = x*y + 1
# Process the sequence.
value = 0
for o in seq:
value = o - value + z
value = 1.0/value
# Do something else with it.
value = parrot(value)
return cheeseshop(value)
It would be interesting to hypothesise about languages that naturally
grouped (e.g.) the for loop and its pre-entry and post-exit code
together into one obvious code unit. Python isn't that language, but
(by accident, I'm sure) the else clause comes close.
--
Steven D'Aprano
More information about the Python-ideas
mailing list