1

what are the differences in example1, example 2 and example 3. i have tried but got nothing. i think i have missed something or haven't used correctly.

example 1:

def ex1(var1=g_var):
    pass

def ex2():
    global g_var
    g_var = True
    ex1()

if __name__ == '__main__':
    ex2()

example 2:

def ex1():
    print(g_var)
    # pass

def ex2():
    global g_var
    g_var = True
    ex1()

if __name__ == '__main__':
    ex2()

example 3:

g_var = True

def ex1(var1=g_var):
    pass

def ex2():
    ex1()

if __name__ == '__main__':
    ex2()

it seems that example 1 and example 3 are same thing.

example 2 and example 3 runs good. but example 1 give me the error NameError: global name 'g_var' is not defined.

cwgt
  • 51
  • 1
  • 5

1 Answers1

3

Default Values are evaluated at time of definition. At this time, g_var isn't defined in example 1.

Daniel
  • 42,087
  • 4
  • 55
  • 81
  • 1
    Note this is closely related to a common "gotcha" in python, the [mutable default argument](http://stackoverflow.com/questions/1132941/least-astonishment-in-python-the-mutable-default-argument) – Adam Smith Apr 13 '16 at 19:54