[Python-ideas] Syntax: 'return: ...' expressions

Ron Adam ron3200 at gmail.com
Fri Jan 23 23:06:11 CET 2015



On 01/23/2015 08:56 AM, Nick Coghlan wrote:
> On 21 January 2015 at 11:16, Guido van Rossum<guido at python.org>  wrote:
>> >So it's hard to say to what extent this was a conscious choice and to what
>> >extent it was just tradition. But there's nothing necessarily wrong with
>> >tradition (up to a point). I think it still makes sense that statements are
>> >laid out vertically while expressions are laid out horizontally. Come to
>> >think of it, mathematics uses a similar convention -- a formula is laid out
>> >(primarily) horizontally, while a sequence of formulas (like a proof or a
>> >set of axioms) is laid out vertically.

> I really like that "each statement is like a single step in a
> mathematical proof" analogy.

I agree.


There are some other distinctions.  When you consider these, you can see 
how many language designers come to similar solutions.


Expressions evaluate in unique name spaces, while statements generally do 
not. Consider "a + b"; it is evaluated in a private method after the values 
a and b are passed to it.

Statements are used to mutate the current name space, while expressions 
generally do not.

Statements can alter control flow, while expressions generally do not.

Having a clear distinction between expressions and statements makes reading 
and understanding code much easier.


I believe Python follows most of these conventions in most places, and when 
it doesn't, it's usually for a practical reason that are fairly obvious.

For example, an "or" expression is a bit of both.

Another example of how python chooses a practical alternative is we can 
nest expressions instead of using "call" statements on separate lines and a 
stack to hold the augments and return values.  That is what python does in 
the byte code so we don't have to do it in explicit statements.

If you factor out all expressions you get byte code.  Or if you factor out 
all statements you get something like lisp.

Of course this subject is definitely a very subjective one which relays on 
agreeing on the general meaning of the above sentences.  OR... YMMV.

Cheers,
    Ron






















More information about the Python-ideas mailing list