[解決済み] Pythonのネストされた関数の変数のスコープ [重複] [重複
2022-05-30 20:15:34
質問
私はこのトピックに関する他の質問をほとんどすべて読みましたが、私のコードはまだ動作しません。
私はpythonの変数スコープについて何かを見逃していると思います。
以下は私のコードです。
PRICE_RANGES = {
64:(25, 0.35),
32:(13, 0.40),
16:(7, 0.45),
8:(4, 0.5)
}
def get_order_total(quantity):
global PRICE_RANGES
_total = 0
_i = PRICE_RANGES.iterkeys()
def recurse(_i):
try:
key = _i.next()
if quantity % key != quantity:
_total += PRICE_RANGES[key][0]
return recurse(_i)
except StopIteration:
return (key, quantity % key)
res = recurse(_i)
そして、私は
"グローバル名 '_total' は定義されていません"
問題があるのは
_total
の割り当てにあることは分かっていますが、なぜなのかが分かりません。
本来なら
recurse()
は親関数の変数にアクセスできるはずではありませんか?
pythonの変数スコープについて、私が何を見逃しているのか、誰か説明してくれませんか?
どのように解決するのですか?
あなたのコードを実行すると、このエラーが発生します。
UnboundLocalError: local variable '_total' referenced before assignment
この問題は、この行が原因です。
_total += PRICE_RANGES[key][0]
スコープと名前空間に関する文書 にはこのように書かれています。
Pythonの特別な癖として、もし
global
ステートメントが有効でない場合 - の代入は常に最も内側のスコープに入ることです。 . 代入はデータをコピーしません - 名前とオブジェクトを結びつけるだけです。
ということで、この行は事実上言っているので
_total = _total + PRICE_RANGES[key][0]
を作成します。
_total
の名前空間に
recurse()
. ということは
_total
は新しいものであり、割り当てられていないので、追加で使用することはできません。
関連
-
[解決済み】「SyntaxError.Syntax」は何ですか?Missing parentheses in call to 'print'」はPythonでどういう意味ですか?
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] 変数を参照渡しする方法を教えてください。
-
[解決済み] 環境変数の値にアクセスする方法
-
[解決済み] 変数が「未定義」または「NULL」であるかどうかを判断するにはどうすればよいですか?
-
[解決済み] JavaScriptで変数が存在するか(定義されているか/初期化されているか)をチェックする
-
[解決済み] Bashで変数が設定されているかどうかを確認する方法は?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
最新
-
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サイクルタスクスケジューリングツール スケジュール詳解
-
python implement mysql add delete check change サンプルコード
-
PyQt5はユーザーログインGUIインターフェースとログイン後のジャンプを実装しています。
-
Pythonコードの可読性を向上させるツール「pycodestyle」の使い方を詳しく解説します
-
Pythonショートビデオクローラーチュートリアル
-
Pythonの@decoratorsについてまとめてみました。
-
[解決済み】終了コード -1073741515 (0xC0000135)でプロセス終了)
-
[解決済み】「SyntaxError.Syntax」は何ですか?Missing parentheses in call to 'print'」はPythonでどういう意味ですか?
-
[解決済み】ValueError: xとyは同じサイズでなければならない