[解決済み] スコーピングルールの簡単な説明?
質問事項
何 まさに は、Pythonのスコーピングルールですか?
コードがあれば
code1
class Foo:
code2
def spam.....
code3
for code4..:
code5
x()
はどこですか?
x
が見つかりましたか? 考えられるのは、以下のリストです。
- 付属のソースファイル内
- クラスの名前空間内
- 関数定義内
- forループのインデックス変数に
- forループの内部
また、実行中のコンテキストがあり、関数
spam
がどこかに渡される。また、もしかしたら
ラムダ関数
は少し違った形で渡すのでしょうか?
どこかに簡単なリファレンスやアルゴリズムがあるはずです。 Pythonの中級プログラマーにとっては、混乱の世界です。
どのように解決するのか?
実は、PythonのScope解決のための簡潔なルールは、以下の通りです。 ラーニングPython, 3rd. Ed. . (これらのルールは属性ではなく、変数名に特有のものです。ピリオドなしで参照した場合、これらのルールが適用されます)。
LEGBルール
-
L ocal - 関数内で任意の方法で割り当てられた名前 (
def
またはlambda
) で、その関数の中でグローバルに宣言されていない -
E nclosing-function - 静的に囲まれているすべての関数のローカルスコープに割り当てられた名前 (
def
またはlambda
) 、内側から外側へ -
G lobal (module) - モジュールファイルのトップレベルで割り当てられる名前、または
global
文の中でdef
ファイル内の -
B uilt-in (Python) - 組み込み名モジュールであらかじめ割り当てられている名前。
open
,range
,SyntaxError
など
ということで
code1
class Foo:
code2
def spam():
code3
for code4:
code5
x()
は
for
ループは独自の名前空間を持っていません。LEGB順に並べると、スコープは次のようになります。
-
L:ローカルで
def spam
(このcode3
,code4
およびcode5
) -
E: 囲む関数 (例全体が別の
def
) -
G:何かありましたか?
x
モジュール内でグローバルに宣言された(code1
)? -
B: 任意のビルトイン
x
を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 string splicing.join()とsplitting.split()の説明
-
Python jiabaライブラリの使用方法について説明
-
FacebookオープンソースワンストップサービスpythonのタイミングツールKats詳細
-
[解決済み】「RuntimeError: dictionary changed size during iteration」エラーを回避する方法とは?
-
[解決済み】numpyの配列連結。"ValueError:すべての入力配列は同じ次元数でなければならない"
-
[解決済み】TypeError: re.findall()でバイトのようなオブジェクトに文字列パターンを使用することはできません。)
-
[解決済み】 AttributeError: モジュール 'matplotlib' には属性 'plot' がない。
-
[解決済み】syntaxError: 'continue' がループ内で適切に使用されていない
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み】Python - "ValueError: not enough values to unpack (expected 2, got 1)" の修正方法 [閉店].