On lun., avril 1, 2019 at 6:00 PM, python-list-requ...@python.org wrote:
On Sun, Mar 31, 2019 at 1:09 PM Alexey Muranov <alexey.mura...@gmail.com>
wrote:

On dim., Mar 31, 2019 at 6:00 PM, python-list-requ...@python.org wrote:
 > On Sat, Mar 30, 2019, 5:32 AM Alexey Muranov
 > <alexey.mura...@gmail.com>
 > wrote:
 >
 >>
 >>  On ven., Mar 29, 2019 at 4:51 PM, python-list-requ...@python.org
 >> wrote:
 >>  >
>> > There could perhaps be a special case for lambda expressions such
 >>  >  that,
>> > when they are directly assigned to a variable, Python would use
 >> the
 >>  > variable name as the function name. I expect this could be
 >>  >  accomplished by
>> > a straightforward transformation of the AST, perhaps even by just
 >>  >  replacing
 >>  > the assignment with a def statement.
 >>
 >>  If this will happen, that is, if in Python assigning a
 >> lambda-defined
 >>  function to a variable will mutate the function's attributes, or
 >> else,
 >>  if is some "random" syntactically-determined cases
 >>
 >>      f = ...
 >>
 >>  will stop being the same as evaluating the right-hand side and
>> assigning the result to "f" variable, it will be a fairly good extra
 >>  reason for me to go away from Python.
 >>
 >
 > Is there a particular reason you don't like this? It's not too
 > different
 > from the syntactic magic Python already employs to support the
 > 0-argument
 > form of super().

I do not want any magic in a programming language i use, especially if
 it breaks simple rules.

I do not like 0-argument `super()` either, but at least I do not have
 to use it.

Well, you wouldn't have to use my suggestion either, since it only applies
to assignments of the form "f = lambda x: blah". As has already been
stated, the preferred way to do this is with a def statement. So just use a def statement for this, and it wouldn't affect you (unless you *really*
want the function's name to be "<lambda>" for some reason).

I only see a superficial analogy with `super()`, but perhaps it is because you did not give much details of you suggestion.

Not only i do not have to use `super()` (i do not have to use Python either), but the magic behaviour of `super` is explained by special implicit environments in which some blocks of code are executed. Though this looks somewhat hackish, it gives me no clue of how your idea of mutating objects during assignment is supposed to work.

On the other hand, i do use assignment in Python, and you seem to propose to get rid of assignment or to break it.

Note that

   foo.bar = baz

and

   foo[bar] = baz

are not assignments but method calls, but

   foo = bar

it an assignment (if i understand the current model correctly).

Do you propose to desugar it into a method/function call and to get rid of assignments in the language completely? Will the user be able to override this method? Something like:

   setvar("foo", bar)  # desugaring of foo = bar

Would the assignment operation remain in the language under a different name? Maybe,

   foo <- bar

?

I am so perplexed by the proposed behaviour of `f = lambda...`, that i need to ask the followng: am i right to expact that

 1.

     f = lambda x: x,
     g = lambda x: x*x

 2.

     (f, g) = (lambda x: x, lambda x: x*x)

 3.

     (f, g) = _ = (lambda x: x, lambda x: x*x)

 4.

     f = (lambda x: x)(lambda x: x)
     g = (lambda x: x)(lambda x: x*x)

Will all have the same net effect?

I suppose in any case that

   return lambda x: <some long expression>

and

   result = lambda x: <some long expression>
   return result

would not return the same result, which is not what i want.

I tried to imagine what semantics of the language could cause your proposed behaviour of `f = lambda...` and couldn't think of anything short of breaking the language.


That said, that's also the reason why this probably wouldn't happen. Why go
to the trouble of fixing people's lambda assignments for them when the
preferred fix would be for them to do it themselves by replacing them with
def statements?

It is not fixing, it is breaking.

Alexey.


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

Reply via email to