2016-04-13 2 views
1

какие различия в example1, example 2 и example 3. я попытался, но ничего не получил. я думаю, что что-то пропустил или неправильно использовал.глобальное название «...» не определено

Пример 1:

def ex1(var1=g_var): 
    pass 

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

if __name__ == '__main__': 
    ex2() 

Пример 2:

def ex1(): 
    print(g_var) 
    # pass 

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

if __name__ == '__main__': 
    ex2() 

Пример 3:

g_var = True 

def ex1(var1=g_var): 
    pass 

def ex2(): 
    ex1() 

if __name__ == '__main__': 
    ex2() 

, кажется, что example 1 и example 3 это то же самое.

example 2 и example 3 работает хорошо. но example 1 дайте мне ошибку NameError: global name 'g_var' is not defined.

ответ

3

Значения по умолчанию оцениваются во время определения. В настоящее время g_var не определен в примере 1.

+1

Обратите внимание, что это тесно связано с общей «полученной» в python, [изменяемым аргументом по умолчанию] (http://stackoverflow.com/questions/1132941/least -astonishment-в-питона-The-изменяемый по умолчанию аргумент) –

Смежные вопросы