"Brian van den Broek" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > Is the right way to understand it in this vicinity:
In the vicinity, but not quite exact >At compile time (by which I mean when the Python bytecode is built) Compile time is when the def statement is executed >the global statement is hit and has the effect of `bumping up' the >function local name `x' to the module namespace, making the function local >name `x' synonymous with the module global name `x'. Global make 'x' global. Period. There is no local 'x'. > At runtime, the `global x' is never reached, In CPython, at least, it is not even there to be reached (see below). It is strictly a compile time declaration. At runtime, it is equivalent to 'pass'. > but it has already, at compile time, had its effect on the nature of the > function object Right. With 2.2: def f(): if False: global x x = 1 import dis dis.dis(f) 0 SET_LINENO 1 3 SET_LINENO 2 6 LOAD_GLOBAL 0 (False) 9 JUMP_IF_FALSE 7 (to 19) 12 POP_TOP 13 SET_LINENO 2 16 JUMP_FORWARD 1 (to 20) >> 19 POP_TOP >> 20 SET_LINENO 3 23 LOAD_CONST 1 (1) 26 STORE_GLOBAL 1 (x) 29 LOAD_CONST 0 (None) 32 RETURN_VALUE Two points: there is no byte code for the global declaration; x is directly stored as global. Terry J. Reedy -- http://mail.python.org/mailman/listinfo/python-list