5

これが私のコードです:

x = 1
def poi(y):
        # insert line here

def main():
    print poi(1)

if __name__ == "__main__":
    main()

次の4行を、一度に1つずつ、代わりに配置する場合 # insert line here

 Lines         | Output
---------------+--------------
1. return x    | 1 
2. x = 99      |
   return x    | 99
3. return x+y  | 2 
4. x = 99      | 99  

上記の行では、上記の関数で宣言されたグローバルxがケース1と3で使用されているようです。

だが 、

x = x*y      
return x

これは与える

error : local variable 'x' is reference before assignment

ここの何が問題になっていますか?

4

2 に答える 2

6

割り当てていることを Python が認識するとx、強制的にローカル変数名になります。xその関数でグローバルを見ることができなくなりました(globalキーワードを使用しない限り)

そう

ケース 1) local がないxため、global を取得します。

ケース 2) ローカルに割り当てているxため、関数内のすべての参照はローカルのものになりますx

ケース 3) 問題ありません。x再びグローバルを使用しています。

ケース 4) ケース 2 と同じ

于 2013-03-20T09:37:42.293 に答える
4

グローバル変数にアクセスする場合は、名前だけでアクセスできます。ただし、その値を変更する場合は、キーワードを使用する必要がありますglobal

試す :

global x
x = x * y      
return x

ケース2の場合、xはローカル変数として作成され、グローバルxは使用されません。

>>> x = 12
>>> def poi():
...   x = 99
...   return x
... 
>>> poi()
99
>>> x
12
于 2013-03-20T09:28:09.133 に答える