On Mon, 9 May 2011, Eli Bendersky wrote:

x = 5
def foo ():
       print (x)
       if bar ():
               x = 1
       print (x)


I wish you'd annotate this code sample, what do you intend it to
demonstrate?

It probably shows the original complaint even more strongly. As for being a
problem with the suggested solution, I suppose you're right, although it
doesn't make it much different. Still, before a *possible* assignment to
'x', it should be loaded as LOAD_NAME since it was surely not bound as
local, yet.

Extrapolating from your suggestion, you're saying before a *possible* assignment it will be treated as global, and after a *possible* assignment it will be treated as local?

But surely:

print (x)
if False:
        x = 1
print (x)

should always print the same thing twice (in the absence of actions taken by other threads)!

Replace "False" by something that is usually (but not always) True, and "print (x)" by something that actually does something, and you had best put on your helmet because it's going to be a fun ride.

But I won't be on it.

The idea that the same name within the same scope always refers to the same value is an idea from functional programming and not part of Python; but surely the same name within the same scope should at least always refer to the same variable!

If something is to be done here, it occurs to me that the same parser that decides that the initial reference to x should use the local x could conceivably issue an error right away - "local variable can never be assigned before use" rather than waiting until runtime. But even if I haven't confused myself about the possibility of this raising a false positive (and it certainly could in the presence of dead code), it wouldn't catch cases of conditional premature use of a local variable. I think in those cases people would still ask the same questions they do with the existing implementation.

Isaac Morland                   CSCF Web Guru
DC 2554C, x36650                WWW Software Specialist
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to