On Aug 28, 2:42 pm, Terry Reedy <tjre...@udel.edu> wrote: > Carl Banks wrote: > > I don't think it needs a syntax for that, but I'm not so sure a method > > to modify a value in place with a single key lookup wouldn't > > occasioanally be useful. > > Augmented assignment does that.
Internally uses two lookups, one for getting, and one for setting. I think this is an unavoidable given Python's semantics. Look at the traceback: >>> def x(): ... d['a'] += 1 ... >>> dis.dis(x) 2 0 LOAD_GLOBAL 0 (d) 3 LOAD_CONST 1 ('a') 6 DUP_TOPX 2 9 BINARY_SUBSCR 10 LOAD_CONST 2 (1) 13 INPLACE_ADD 14 ROT_THREE 15 STORE_SUBSCR 16 LOAD_CONST 0 (None) 19 RETURN_VALUE > > As a workaround, if lookups are expensive, > > But they are not. Because (C)Python is heavily based on dict name lookup > for builtins and global names and attributes, as well as overt dict > lookup, must effort has gone into optimizing dict lookup. The actual lookup algorithm Python dicts use is well-optimized, yes, but the dict could contain keys that have expensive comparison and hash-code calculation, in which case lookup is going to be slow. Carl Banks -- http://mail.python.org/mailman/listinfo/python-list