2017-09-15 4 views
0

()内のスコープ私は(グローバルに関する質問があります)グローバル機能

私のサンプルコード

b=9 
def a1(): 
'kkk' 

a1() 
print globals() 

bはグローバルなので、私はグローバル

として出力bを得た、私は私はどこでも それを修正することができ期待していますので、私は

b=9 
def a1(): 
'kkk' 
b=100 
a1() 
print globals() 

に私のコードを修正しました私のグローバル変数()は100をbとしています。

注:関数内にキーワードglobal bを追加すると、グローバルに変換されます。 私の質問は、globals()がグローバルとしてbを宣言しているときに、関数内でbが変更されていない理由です。

+0

あなたの質問ではありませんそのエラーについて直接的に説明していますが、事実上同じです:関数内で変数がローカルに割り当てられるのはなぜですか? –

答えて

2

詳細については、Python docsを参照してください。 URLが正しく動作しない場合のテキストのコピー

Pythonでは、関数内で参照される変数は暗黙的にグローバルです。変数に関数本体のどこにでも値が割り当てられている場合、グローバルとして明示的に宣言されていない限り、変数はローカルであるとみなされます。

最初は少し驚きましたが、瞬間的にこれを説明します。一方では、割り当てられた変数にグローバルを必要とすることは、意図しない副作用を防ぐことができます。一方、すべてのグローバル参照にグローバルが必要な場合は、常にグローバルを使用しています。組み込み関数またはインポートされたモジュールのコンポーネントへのすべての参照をグローバルとして宣言する必要があります。この混乱は、副作用を特定するためのグローバル宣言の有用性を打破するでしょう。あなたのコードbは、A1()内のローカル変数であるため、次のように

1

関数内では、キーワードglobalを使用しない限り、変更されたグローバル変数ではありません。代わりに、ローカル変数が作成され、範囲外になるとすぐに破棄されます。

1

、グローバル変数を使用するには、まず、それを使用し、その後のpythonに言うとすべきである:

b=9 
def a1(): 
'kkk' 
global b 
b=100 

a1() 
print globals() 
+0

私の質問は、関数内でグローバルキーワード 'global'を使用しなくても、pythonがbをグローバルとして報告した理由でしたか? – syam

+0

あなたは 'b'グローバルを定義しました。これは、関数またはクラスから外れていることを意味します。グローバルキーワードはグローバルを定義しません。 – Serjik

関連する問題