On Jan 19, 2020, at 12:15, David Mertz <me...@gnosis.cx> wrote:
> 
> In contrast, in pure Python, most of that you do is in loops over the 
> elements of collections.  In that case is does a good job of drawing your eye 
> to the fact that a method is called but not assigned to anything.  When I see 
> `mylist.append(foo)` on a line by itself, the absence of an assigned variable 
> drives home "this is basically a statement, called for side-effects" (yes, I 
> know in the syntax it is an expression not a statement; but my looser 
> cognitive model works that way).

But it is an expression statement. And that works just as well without having 
to be mildly incorrect, and it extends even further from there.

Most statements in most Python code mutate one thing. Most of them explicitly 
mutate the first thing mentioned (and any expressions within them are usually 
nonmutating). Expression statements dont explicitly mutate anything, but 
usually at the top level they’re usually either a method call that mutates its 
self, or a function call that mutates something implicit in the function, and 
subexpressions are usually nonmutating. So, most statements in most Python code 
mutate the first thing:

    # the only mutation is (probably) to spam:
    spam = eggs(cheese)
    spam += eggs
    spam[eggs] = cheese
    spam.eggs(cheese)
    
    # the only mutation is (probably) to the stdout implicit in print:
    print(spam)
    print(spam.eggs(cheese))
    print(spam(eggs))

There are of course exceptions. A from … import statement creates the names at 
the end of the statement rather than the start. Mutating methods are only 
encouraged to return None, not required. And so on. But the rough guideline 
works well enough for skimming most Python code to see “where does x get 
changed” in a way that doesn’t work for languages that encourage fluent 
mutating style, like JS or Ruby or C++.

What about the walrus operator? The fact that it clearly breaks this is, I 
think, a big part of the reason that so many people were against it. But the 
fact that it’s usually used only to mutate something that’s only relevant 
within the statement is a big part of the reason people actually like it once 
they see real examples.

_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/2QVSANBME72UBSPOXVAQDIYIXDI6BHXR/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to