[Python-ideas] Where-statement (Proposal for function expressions)
Jan Kaliszewski
zuo at chopin.edu.pl
Fri Jul 17 10:09:20 CEST 2009
More information about the Python-ideas mailing list
Fri Jul 17 10:09:20 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 ]
17-07-2009, 04:25 Mike Meyer <mwm-keyword-python.b4bdba at mired.org> wrote: > On Fri, 17 Jul 2009 14:02:34 +1200 > Greg Ewing <greg.ewing at canterbury.ac.nz> wrote: > >> Daniel Stutzbach wrote: >> >> > If the >> > left-hand side were in the where-block's scope, then: >> > >> > x = 0 >> > x = i where: >> > i = 5 >> > print x >> > >> > Would print "0" not "5". >> >> My intuitive expectations are different for assignment >> to a bare name vs. assignment to an item or attribute. >> In >> >> x = i where: >> i = 5 >> >> I would expect x to be bound in the current scope, >> not the where-block scope. But I would expect >> >> x[i] = 5 where: >> x = y >> i = 7 >> >> to be equivalent to >> >> y[7] = 5 >> >> i.e. both x and i are *evaluated* in the where-block >> scope. >> >> I'm not sure where this leaves us with respect to >> augmented assignment, though. If you follow it to >> its logical conclusion, then >> >> x += i where: >> i = 5 >> >> should be equivalent to >> >> x = x.__iadd__(i) where: >> i = 5 >> >> and then the evaluation and rebinding of 'x' would >> happen in different scopes! [snip] > I think the intuitive behavior doesn't involve position relative to > the assignment, but binding vs. non-bindings. What you *expect* is > that expressions left of the where will be evaluated in the inner > scope (created by the where), but that any bindings that happen there > will happen in the outer scope (before the where). > > That makes what you want to happen happen - *most* of the time: > > i = 3 > x += i where: > i = 5 > > increments x by 5. > > i = 'a' > x[i] = 'b' where: > i = 'c' > > sets x['c'] to 'b'. > > Things get really ugly when the bound variables start appearing in > both scopes combined with augmented assignments: > > x = 3 > x += 4 where: > x = 5 > print x > > What should this print? I think, a good rule could be that: All *expressions* of the target line are evaluated within the where-block scope; and -- moreover -- those names (variables) that are *bound* in the target line, are "leaked" to the outer scope. [target line == the line with where statement] Then the former example code should print 9. -- Jan Kaliszewski <zuo at chopin.edu.pl>
- 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