var or inout parm?
Steve Holden
steve at holdenweb.com
Fri Dec 12 09:54:02 EST 2008
sturlamolden wrote:
> On Dec 12, 3:08 pm, Marc 'BlackJack' Rintsch <bj_... at gmx.net> wrote:
>
>> No bug because a mutation *is* attempted. ``a += x`` calls `a.__iadd__`
>> which *always* returns the result which is *always* rebound to the name
>> `a`. Even with mutable objects where `__iadd__()` simply returns
>> `self`!
>
> No, a mutation is not attempted, even if __iadd__() always returns a
> value. If a rebinding of a member to the same member is attempted, the
> tuple should not raise an exception. The tuple should check that it is
> actually being *mutated* before it raises any exception. There is an
> attempted write to the tuple, but not an attempted mutation of the
> tuple. The tuple should tell the difference. Immutability does not
> imply inwriteability, if the write operation changes nothing. But the
> tuple raises an exception on any write attempt.
>
OK, so if you regard the current behavior as a bug explain how to modify
the tuple's __iadd__ method and the coding of the INPLACE_ADD operator.
At least in pseudocode.
Criticism is easy. Now demonstrate that it's *informed* criticism.
Enough of the "should". I am always suspicious of suggestions that say
what the interpreter "should" or "should not" do. It makes it sound as
though you can wave a magic wand to achieve the desired behavior.
The interpreter "should not" have a GIL. The tuple "should" check that
it is actually being mutated. How?
regards
Steve
--
Steve Holden +1 571 484 6266 +1 800 494 3119
Holden Web LLC http://www.holdenweb.com/
More information about the Python-list
mailing list