• Posts
  • RSS
  • ◂◂RSS
  • Contact

  • Scope and Ambiguous Assignments In Python

    March 21st, 2011
    python, tech  [html]
    Consider the following two Python snippets:
        name='Mary'
        def print_name():
          print name
        print_name()
        print name
      
        name='Mary'
        def print_name():
          name='John'
        print_name()
        print name
      
    The first will print 'Mary', twice. The second will print 'Mary' once. This happens because while python interprets reads as looking outside the current scope, writes can't be [1] anything but local. So the assignment to 'name' inside 'print_name' creates a new variable that disappears when the function exits.

    So now consider:

        name='Mary'
        def print_name():
          print name
          name='John'
        print_name()
        print name
      
    This code will generate an error:
        Traceback (most recent call last):
          File "tmp.py", line 5, in <module>
            print_name()
          File "tmp.py", line 3, in print_name
            print name
        UnboundLocalError: local variable 'name' referenced before assignment
      
    The error is because within a function a variable must be either local or global. If it's local, the 'print name' is illegal because 'name' isn't defined yet. If it's global, the 'name="John"' is illegal because you can't assign outside your scope. So python chooses "local" and decides that the 'print name' line is invalid.

    [1] well, you could use the 'global' keyword

    Comment via: r/Python

    Recent posts on blogs I like:

    Austerity is Inefficient

    Working on an emergency timetable for regional rail has made it clear how an environment of austerity requires tradeoffs that reduce efficiency. I already talked about how the Swiss electronics before concrete slogan is not about not spending money but ab…

    via Pedestrian Observations February 27, 2021

    Fireside Friday, February 26, 2021

    Fireside this week, but next week we are diving into our long awaited series on pre-modern textile production, though we will be particularly focused on the most important clothing fibers in the Mediterranean world, wool and linen (rather than, say, silk …

    via A Collection of Unmitigated Pedantry February 26, 2021

    The Troubling Ethics of Writing (A Speech from Ancient Sumer)

    (Translated from a transcript of an ancient Sumerian speech by Uruk's most well-respected Scriptological Ethicist) Writing is a profoundly dangerous technology: Access to writing was initially, and still remains, uneven. What's worse, the rich are m…

    via BLOG - Cullen O'Keefe February 15, 2021

    more     (via openring)


  • Posts
  • RSS
  • ◂◂RSS
  • Contact