[Python-ideas] Where-statement (Proposal for function expressions)
Jan Kaliszewski
zuo at chopin.edu.pl
Thu Jul 16 22:08:46 CEST 2009
More information about the Python-ideas mailing list
Thu Jul 16 22:08:46 CEST 2009
- Previous message: [Python-ideas] Where-statement (Proposal for function expressions)
- Next message: [Python-ideas] Where-statement (Proposal for function expressions)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
16-07-2009, 20:51 Paul Moore <p.f.moore at gmail.com> wrote: >>> x[i] = 12 where: >>> i = some_complicated_expression() [snip] > And yet the user's intent is obviously to use the i defined inside the > where (that's how functional languages work, so it's hardly an > unrealistic intent). [snip] > Yes, I know that the semantics, as given in > terms of a rewrite, define what happens, but it seems to me that it > goes counter to intuition. > > Thinking about it, the issue is that you're making where the *only* > example in Python (that i can think of) of a non-defining construct > which creates a new scope. Currently, scopes are created by the class > and def statements. Both of these define objects (classes and > functions, respectively). The where clause as you've stated it defines > a scope, but no object. That doesn't make it ill-defined, but it does > make it (very, in my view) non-intuitive. Yeah, It is an issue :-/ I can imagine some solutions based on name overriding rules, e.g.: * in the "target line" only those names are treated as part of nested where-block scope, which are targets of assignment within the where-block (as MRAB proposes, if I understood well), or * in the "target line" only those names are treated as part of nested where-block scope, which are not targets of assignment within the target line. But it seems to me obscure at first sight, and I don't know if implementation wouldn't be problematic... Maybe the solution is to make 'where' creating an object, somehow similarly to the way the 'class' statement works? Some examples: x[somename.i] = 12 where somename: i = some_complicated_expression() def variance(data): # for some definition of "variance" return var.sqrt(var.sum_of_squares(data) - var.square_of_sums(data)) where var: def sqrt... def sum_of_squares... def square_of_sums... foo(numbers.x, numbers.y) where numbers: x = a * 42 y = b / 17 a = {} a[fn.key] = bar(fn.f, fn.g) where fn: key = ... def f(x): ... def g(y): ... Another possibility is to allow using "anonymus name": x[.index] = 12 where: index = some_complicated_expression() foo(.x, .y) where: x = a * 42 y = b / 17 Cheers, zuo
- Previous message: [Python-ideas] Where-statement (Proposal for function expressions)
- Next message: [Python-ideas] Where-statement (Proposal for function expressions)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-ideas mailing list