2016-04-13 14 views
1

example1example 2example 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 1example 3は同じものであることを思われます。

example 2およびexample 3が正常に実行されます。しかしexample 1私にエラーNameError: global name 'g_var' is not definedを教えてください。

答えて

3

デフォルト値は定義時に評価されます。現時点では、g_varは例1では定義されていません。

+1

これはpythonの一般的な "gotcha"と密接に関連していることに注意してください。[可変デフォルト引数](http://stackoverflow.com/questions/1132941/least -astonishment-in-python-the-mutable-default-argument)は、 –

関連する問題