Antoon Pardon <[EMAIL PROTECTED]> writes: >> What would you expect to get if you wrote b.a = b.a + 2? > I would expect a result consistent with the fact that both times > b.a would refer to the same object.
Except they *don't*. This happens in any language that resolves references at run time. Changing that would be changing a fundamental - and *important* - feature of Python. Arbitrary restrictions to prevent a single case of this from doing something people who aren't used to suvh behavior are kludges, and would constitute a wart on the language, pure and simple. If you think this is bad, you should consider Jensen's device. It uses call-by-name, which Python doesn't have. This defers evauation of an argument until the actual use of the argument. You can fake it in python by passing strings that you eval and/or lambdas that you call - I'm not going to work out the details. Here's the function: real procedure SIGMA(x, i, n); value n; real x; integer i, n; begin real s; s := 0; for i := 1 step 1 until n do s := s + x; SIGMA := s; end The object referred to by "x" in the body of the loop is different *every pass through the loop*, at least in the expected usage. That usage is SIGMA(a(i), i, 10). Call-by-name evaluates a(i) when x is mentioned. Since i changes with each pass through the loop, a(i) is a different element in the array. So SIGMA(a(i), i, 10) is sum(a[:10]) (give or take). But SIGMA(a(i) * b(i), i, 10) is sum([a(i) * b(i) for i in xrange(10)]) (more or less). This isn't insane, it's a feature. It's a *very powerful* feature. Yes, it causes behavior that's unexpected and appears to be wrong to people who aren't used to resolving names at run time. They need to get used to it. Then they can start taking advantage of it. > I think it even less sane, if the same occurce of b.a refers to two > different objects, like in b.a += 2 That's a wart in +=, nothing less. The fix to that is to remove += from the language, but it's a bit late for that. <mike -- Mike Meyer <[EMAIL PROTECTED]> http://www.mired.org/home/mwm/ Independent WWW/Perforce/FreeBSD/Unix consultant, email for more information. -- http://mail.python.org/mailman/listinfo/python-list