2017-11-10 21 views
-2

私はPythonでグローバル変数の答えを見ましたが、私は2つの同様のスクリプトを書くときに、それらの違いを認識することができません。違いを理解するのを助けてください。私が言ったように、私はそれについて多くの記事を読んでいましたが、私の頭の中には常に疑わしいものがあり、これは時々間違いを引き起こします。違いは何ですか?

total = 0 
def sum(a,b): 
    total = a+b 
    print ("inner total is:",total) 
return total 

sum(19,21) 
print ("outter total is:",total) 

OUTPUT

inner total is: 40 outter total is: 0

i = 2 

def a(): 
    i = i + 2 
    print (i) 
    pass 

a() 

OUTPUT


UnboundLocalError Traceback (most recent call last) in() 6 pass 7 ----> 8 a(9)

in a(x) 2 3 def a(x): ----> 4 i = i +x 5 print (i) 6 pass

UnboundLocalError: local variable 'i' referenced before assignment

答えて

0

I = I + 2にすることにより、あなたは実際にはRですeferencing変数 'i'は、値が割り当てられる前に参照されます。

def a(): 
    i = i + 2 
    print (i) 
    pass 

以下の変数では、 'total'に値が割り当てられています。だからあなたはエラーを受け取りません。

def sum(a,b): 
    total = a+b 
    print ("inner total is:",total) 
return total 
0

外側の合計変数はグローバル変数です。内側のグローバル変数はその関数sum()内にスコープを持っていますが、これはエラーを示します。あなたの関数内の合計がグローバルにアクセスしたい場合は

その後、次の操作を行います。

total = 0 
def sum(a,b): 
    global total 
    total = a+b 
    print ("inner total is:",total) 
    return total 

sum(19,21) 
print ("outer total is:",total)