Pythonでグローバル変数への代入がうまくいかないのはなぜですか?
2023-08-10 05:45:50
質問
Pythonのscopingルールを理解するのに大変苦労しています。
以下のスクリプトで。
a = 7
def printA():
print "Value of a is %d" % (a)
def setA(value):
a = value
print "Inside setA, a is now %d" %(a)
print "Before setA"
printA()
setA(42)
print "After setA"
printA()
という(私にとっては)予想外の出力をします。
setA の前に aの値は7 setA の内部では、a は現在 42 です。 setAの後 aの値は7
ここで、私はaの値の最後の印刷が7ではなく、42であることを期待します。Pythonのグローバル変数のスコープルールについて、私は何を見逃しているのでしょうか?
どのように解決するのですか?
グローバル変数は特殊です。 もし、変数に代入しようとすると
a = value
に代入しようとすると、たとえ同じ名前のグローバル変数があったとしても、関数の中に新しいローカル変数が作られます。 代わりにグローバル変数にアクセスするには
global
ステートメント
を関数内に記述します。
a = 7
def setA(value):
global a # declare a to be a global
a = value # this sets the global value of a
参照 ネーミングとバインディング を参照してください。
関連
-
[解決済み] 関数内でグローバル変数を使用する
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] 最小限の驚き」と「変更可能なデフォルトの引数
-
[解決済み] Python 3で「1000000000000000 in range(1000000000000001)」はなぜ速いのですか?
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] Pythonの@propertyデコレーターはどのように機能するのでしょうか?
-
[解決済み】Pythonのforループのスコープについて
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み】JavaScriptのクロージャと無名関数の比較
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Pythonの構文に新しいステートメントを追加することはできますか?
-
[解決済み] Pythonでコード行間にかかる時間を測定するには?
-
[解決済み] 辞書のキーと値を交換するにはどうすればよいですか?
-
[解決済み] Django Rest Framework ファイルアップロード
-
[解決済み] Django で全てのリクエストヘッダを取得するにはどうすれば良いですか?
-
[解決済み] matplotlib でプロットの軸、目盛、ラベルの色を変更する方法
-
[解決済み] Pandasを使って、既存のExcelファイルに新しいシートを保存する方法は?
-
[解決済み] Pythonの検索パスを他のソースに展開する
-
[解決済み] Pythonでランダムなファイル名を生成する最良の方法
-
[解決済み] あるメソッドが複数の引数のうち1つの引数で呼び出されたことを保証する