
On Tue, May 31, 2016 at 03:01:48PM +0200, Sven R. Kunze wrote:
And here we go again. Sorry for posting unfinished stuff:
On 31.05.2016 11:05, Paul Moore wrote:
If this was simply about type definitions, I'd agree. But I thought the point of Guido's post was that having seen two examples (TypeVar and Symbol) is there a more general approach that might cover these two cases as well as others? So just looking at the problem in terms of stub files isn't really the point here.
I don't know why this needs special syntax anyway. Maybe, somebody could explain.
Any time you have an object that needs to know its own name, you have to provide it as a string, AND as an assignment target: T = TypeVar('T') x = sympy.Symbol('x') myclass = namedtuple("myclass", fields) klass = type('klass', bases, ns) The only exceptions are when you can use compiler magic do to it for you. We don't have to write these: math = import math func = def func(arg): ... MyClass = class MyClass(Parent): ... because the compiler does it for us. Likewise we have @ decorator syntax to avoid writing the function name three times: def spam(): ... spam = decorate(spam) This solves the same problem for ordinary assignment: how to get the name or names on the left hand side over to the right hand side without re-typing them as strings?
Even Guido said it was just for procrastinating. So, I don't give much weight to it.
This comes up from time to time. It was one of the motives for adding @ decorator syntax, so maybe its the right time for it now.
Anyway, what's the difference between:
a = <something>
and
def a = <something>
?
Both evaluate RHS and assign the result to a name (if not already defined, define the name)
The "def a = ..." is not my suggested syntax, so I can't tell you exactly what it will do, but *my* suggested syntax is: name -> Function(args) will be expanded to: name = Function('name', args) by the compiler. The "def a = ..." syntax will probably be similar. Somehow, in some fashion, the name "a" on the LHS will be passed as a string to something on the RHS. -- Steve