On 04/23/2014 06:46 PM, Denis Heidtmann wrote:
In a coursera python course video the following code was presented:

a = [4,5,6]

def mutate_part(x):
     a[1] = x

mutate_part(200)

The presenter said something like "a is a global variable, so a becomes

[4,200,6] after running mutate_part(200)."

Indeed it does, but why does this work without specifying a as global
within mutate()?
My thinking was that an "undefined" error should have been raised.

Help me understand.  Thanks,

-Denis
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Hi,

Try out this modified version of the example you provide:


def mutate(x):
    global y
    y = x + 1
    a[1] = x

a = [1, 2, 3]
y = 0

mutate(200)
print a
print y

Both, 'a' and 'y' will be modified, but if you comment out global, 'y' will not change. In a few words, assigning a[k] = value is technically a method call, and it behaves
differently (spans across scopes). A more detailed answer can be found here:

http://stackoverflow.com/questions/4630543/defining-lists-as-global-variable-in-python

Of course, I would limit this practice to *very* small programs, since anything beyond 50 lines should have more structure and you can use either modular programming or OOP, which is the preferred practice today to structure complex applications.

Gerardo



_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to