On 28/03/2016 02:24, Steven D'Aprano wrote:
On Sun, 27 Mar 2016 10:31 pm, BartC wrote:

Whether there are side-effects is not quite as important as picking up
things that are likely to be errors:

    f()         # Probably OK
    g()         # Probably OK
    f()+g()     # Probably not OK

You don't and can't know what's "probably not" okay unless you know what
type of object both f and g return.

Don't think about floats and ints and strings. Think of complex objects with
operator overloading. You're probably thinking of `x + y`. Instead, think
of things like:

graph + node
database + table

There's theory, and there's practice.

Most types of statements start with a keyword.

The ones that don't need a keyword are assignments (including augmented assignment), and standalone expressions (I'm sure someone will correct me if I'm wrong).

And of standalone expressions, the vast majority that I can see are function calls (that is, an expression, of any complexity, ending with (...)).

So no matter how many potentially useful counter-examples you can dig up, non-function-call expressions are still going to be highly unusual. And suspect.

That's why it's not going to be much loss to disallow them /in that form/.

(There are also docstrings, but until yesterday I didn't even know they were also expressions. Wikipedia says this:

"Python docstrings appear as a string literal (not an expression) as the first statement following the definition of functions..."

so their status is a little unclear. Whatever it is, they don't lead to the same head-scratching when they appear as arbitrary expressions that are not function calls.)

in a procedural style instead of a functional style. With operator
overloading, we have the ability to write domain-specific little languages.

Sure. But give the reader a warning!

--
Bartc
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to