Op 2005-02-08, Nick Coghlan schreef <[EMAIL PROTECTED]>:The CPython *_FAST opcodes relate to functions' local variables. Behind the scenes they are implemented as integer indexing operations into a pre-sized C array. Operations don't come much faster than that :)
I don't follow. AFAIR my remark here above was about the STORE opcode. But you seem to react to it as if I am talking about STORE_FAST.
I've been talking about rebinding function local variables all along - which means STORE_FAST. I may not have made that explicit, though.
However, even in the general case, "check it already exists and overwrite it if it does" is going to be slower than "just store it".
The reason is that, if checking for the existence of the name first somehow provides a speed advantage (I still can't see how it could), then the latter case of unconditional storage can check for the names existence *just to get the speed advantage* (the difference being that the name gets bound irrespective of whether it originally existed or not).
Anything that could be used to speed up a rebinding, could most likely be used to speed up a standard binding at the same point in the code. So, while it might be possible to get rebinding code which isn't any slower than a standard binding, it seems practically impossible to do anything to get rebinding code to be *faster*.
Cheers, Nick.
P.S. FWIW, there is no such thing as a STORE opcode, there are only STORE_* opcodes:
Py> print "\n".join([oc for oc in opcode.opname if "STORE" in oc]) STORE_SLICE+0 STORE_SLICE+1 STORE_SLICE+2 STORE_SLICE+3 STORE_SUBSCR STORE_NAME STORE_ATTR STORE_GLOBAL STORE_FAST STORE_DEREF
-- Nick Coghlan | [EMAIL PROTECTED] | Brisbane, Australia --------------------------------------------------------------- http://boredomandlaziness.skystorm.net -- http://mail.python.org/mailman/listinfo/python-list