Lexical Scope

Gary Herron gherron at islandtraining.com
Thu Oct 30 11:23:01 EST 2003


On Thursday 30 October 2003 07:59 am, Matt Knepley wrote:
> I must be misunderstanding how Python 2.3 handles lexical scoping.
> Here is a sample piece of code:

The rule is this simple:

  An assignment to a variable *ANYWHERE* within a block of code makes
  that variable local *EVERYWHERE* within that block, possibly hiding
  variables of the same name in outer scopes.

That rule will explain all three of your examples.

Gary Herron



>
> def run():
>   a = 1
>   def run2(b):
>     print a
>   run2(2)
>   print a
> run()
>
> which gives the output:
>
> 1
> 1
>
> whereas this piece of code:
>
> def run():
>   a = 1
>   def run2(b):
>     a = b
>     print a
>   run2(2)
>   print a
> run()
>
> gives:
>
> 2
> 1
>
> and finally this code bombs:
>
> def run():
>   a = 1
>   def run2(b):
>     print a
>     a = b
>   run2(2)
>   print a
> run()
>
> with an error about UnboundLocal. It seems that lexical scope works
> only for references, and as soon as I make an assignment a new local
> is created. Is this true?
>
>     Matt









More information about the Python-list mailing list