On mer., Mar 27, 2019 at 5:00 PM, python-list-requ...@python.org wrote:
On 27/03/19 09:21, Alexey Muranov wrote:
Whey you need a simple function in Python, there is a choice between a normal function declaration and an assignment of a anonymous function
 (defined by a lambda-expression) to a variable:

    def f(x): return x*x

 or

    f = lambda x: x*x

 It would be however more convenient to be able to write instead just

    f(x) = x*x

 (like in Haskell and such).

 Have this idea been discussed before?

 I do not see any conflicts with the existing syntax.   The following
 would also work:

I don't know. Something like the following is already legal:

f(x)[n] = x * n

And it does something completly different.


Thanks for pointing out this example, but so far i do not see any issue with this.

Of course assignment (to an identifier) is a completely different type of operation than in-place mutation (of an object) with __setitem__, etc.

In

   <...> [<...>] = <...>

the part to the left of "[<...>]=" is an expression that is to be evaluated, and only its value matters. Here "[]=" can be viewed as a method call, which is distinguished by the context from "[]" method call (__getitem__).

In

   <identifier> = <...>

the <identifier> is not evaluated.

I still think that

   <identifier>(<identifiers>)...(<identifiers>) = <...>

is unambiguous.  The following seems possible too:

   a[m][n](x)(y) = m*x + n*y

It would be the same as

   a[m][n] = lambda x: lambda y: m*x + n*y

Here a[m] is evaluated, and on the result the method "[]=" (__setitem__) is called.

Basically, "()...()=" seems to technically fit all contexts where "=" fits...

Alexey.


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

Reply via email to