Confused about nested scoping

Brian Quinlan BrianQ at ActiveState.com
Wed Apr 18 19:35:53 EDT 2001


The problem is that "printspam" is not inside "scopetest"'s scope.

Try this example:

test = 'Global'
def a():
    test = 'Local to "a"'
    def b():
            print test
    b()

a() # "Global"

and:

from __future__ import nested_scopes

test = 'Global'
def a():
    test = 'Local to "a"'
    def b():
            print test
    b()

a() # 'Local to "a"'

> -----Original Message-----
> From: python-list-admin at python.org
> [mailto:python-list-admin at python.org]On Behalf Of Stephen R. Figgins
> Sent: Wednesday, April 18, 2001 4:18 PM
> To: python-list at python.org
> Subject: Confused about nested scoping
> 
> 
> I seem to be misunderstanding what nested scopes do. 
> 
> >From AMK's summary of 2.1 changes: 
> 
>   Put simply, when a given variable name is not assigned a value
>   within a function (by an assignment, or the def, class, or import
>   statements), references to the variable will be looked up in the
>   local namespace of the enclosing scope. 
> 
> Here is what I tried: 
> 
> from __future__ import nested_scopes
> 
> def printspam():
> 	print "spam has value %s" % (spam)
> 
> def scopetest():
>         spam = 'bacon'
> 	printspam()
> 
> spam = 'eggs'
> printspam()
> scopetest()
> 
> 
> I figured without nested scopes I would get 
> 
>   spam has value eggs
>   spam has value eggs
> 
> But I thought with nested scopes I would get 
> 
>   spam has value eggs
>   spam has value bacon
> 
> Because the second printspam's enclosing scope would be that of
> scopetest in which I had reassigned spam.
> 
> But I still get eggs with my spam.
> 
> What am I misunderstanding?
> 
> -Stephen
> -- 
> http://mail.python.org/mailman/listinfo/python-list
> 




More information about the Python-list mailing list