On 2017-06-18 22:38, Alireza Rafiei wrote:
Hi all,

I'm not sure whether this idea has been discussed before or not, so I apologize in advanced if that's the case.

Consider the behavior:

     >>> f = lambda: True
     >>> f.__name__
    '<lambda>'
     >>> x = f
     >>> x.__name__
    '<lambda>'


I'm arguing the behavior above is too brittle/limited and, considering that the name of the attribute is `__name__`, not entirely consistent with Python's AST. Consider:

     >>> f = lambda: True
     >>> x = f


At the first line, an ast.Assign would be created whose target is an ast.Name whose `id` is `f`. At the second line, an ast.Assign would be created whose target is an ast.Name whose `id` is `x`. However, as you can see `__name__` special method returns 'lambda' in both cases (just like it was defined https://docs.python.org/3/library/stdtypes.html#definition.__name__), whereas I think either it should have returned '<lambda>' and 'x' or a new function/attribute should exist that does so and more.

For example, consider:

     >>> x_1 = 1
     >>> x_2 = 1
     >>> x_3 = 1
     >>> x_4 = x_1
     >>> for i in [x_1, x_2, x_3, x_4]:
     >>>     print(i)
    1
    1
    1
    1


Now assume such a function exist and is called `name`. Then:

     >>> name(1)
    '1'
     >>> name("Something")
    "Something"
     >>> name(x_1)
    'x_1'
     >>> name(x_4)
    'x_4'
     >>> name(x_5)
    'x_5' # Or an Exception!
     >>> def itername(collection):
     >>>     for i in map(lambda x: name(x), collection):
     >>>         yield i
     >>>
     >>> for i in [x_1, x_2, x_3, x_4]:
     >>>     print(i, name(i))
    1, 'i'
    1, 'i'
    1, 'i'
    1, 'i'
     >>> for i in itername([x_1, x_2, x_3, x_4]):
     >>>     print(i)
    'x_1'
    'x_2'
    'x_3'
    'x_4'

[snip]

That's not correct.

Look at the definition of 'itername'. The lambda returns the result of name(x), which is 'x'.

Therefore, the correct result is:

'x'
'x'
'x'
'x'
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to