Pythonネーミングスペースと役割ドメイン
2062 ワード
ネームスペース名前空間(namespaces):名前とメモリアドレスのバインド関係を格納する場所であり、スタック領域の区分 である.の役割:名前空間はスタック領域に同じ名前を格納し、名前の競合 を解決することができる.名前空間は3種類に分けられます. 内蔵ネームスペース グローバルネームスペース ローカルネームスペース
内蔵ネームスペース内蔵ネームスペース:Pythonインタプリタに内蔵された名前を格納するための ライフサイクル:Pythonインタプリタが起動すると生成され、Pythonインタプリタが閉じると が破棄されます.例えば、
グローバルネームスペースグローバルネームスペース:トップコードを実行することによって生成された名前、または関数内の定義および内蔵を除いて、残りはグローバルネームスペース である.ライフサイクル:Pythonファイルの実行時に発生し、Pythonファイルの実行が完了すると が破棄されます.例えば
ローカルネームスペースローカルネーミングスペース:関数を呼び出すときに、関数体コードを実行するときに生成される関数内の名前 ライフサイクル:関数呼び出し時に発生し、関数呼び出しが完了すると が破棄されます.例えば
ネームスペースの優先順位ネームスペースのロード順序:内蔵ネームスペース->グローバルネームスペース->ローカルネームスペース ネームスペース破棄順序:ローカルネームスペース->グローバルネームスペース->内蔵ネームスペース 名前の検索優先度:現在の場所から上のレベルへ を検索
アクティブドメイン
グローバル役割ドメイングローバル役割ドメイン:内蔵ネームスペース、グローバルネームスペース 特徴: グローバル生存 グローバル有効:すべての関数によって共有される
ローカルスコープローカル役割ドメイン:ローカル名空間 特徴: 仮生存 ローカル有効:関数内有効
LEGB原則
変数の呼び出し順序を探すにはLEGB原則(すなわち近接原則)B-Builtin(Python)を採用する.Python内蔵モジュールのネーミングスペース(内蔵ドメイン)G-Global(module);関数の外部にあるネーミングスペース(グローバル役割ドメイン)E--Enclosing function locals;外部ネスト関数の作用域(ネスト作用域)L——Local(function);現在の関数内の役割ドメイン(局所役割ドメイン)は,近接の原則に基づいて,下から上へ内側から外側へ順次探す.
globalとnonlocal global:グローバル変数の変更を宣言する グローバル変数 nonlocal:ローカル変数(現在の関数の上のレイヤのローカル変数) を変更する
まとめ名前空間はスタックの区分であり、本当に存在するのはスタック領域である.ネームスペースは仮想的な区分 にすぎません名前空間は優先度の区分のみであり、ネスト関係はない 名前空間の「ネスト関係」は名前の検索順序 を決定する.ネームスペースのネスト関係は、関数定義フェーズに準拠する です.
内蔵ネームスペース
print
、input
、int
…グローバルネームスペース
# a
a = 1
# func
def func():
pass
# MyClass
class MyClass:
pass
ローカルネームスペース
def func(x, y):
pass
func(1, 2)
ネームスペースの優先順位
アクティブドメイン
グローバル役割ドメイン
ローカルスコープ
LEGB原則
変数の呼び出し順序を探すにはLEGB原則(すなわち近接原則)B-Builtin(Python)を採用する.Python内蔵モジュールのネーミングスペース(内蔵ドメイン)G-Global(module);関数の外部にあるネーミングスペース(グローバル役割ドメイン)E--Enclosing function locals;外部ネスト関数の作用域(ネスト作用域)L——Local(function);現在の関数内の役割ドメイン(局所役割ドメイン)は,近接の原則に基づいて,下から上へ内側から外側へ順次探す.
globalとnonlocal
# global
x = 1
def func():
global x
x = 2
func()
print(x)
# nonlocal
def func1():
x = 1
def func2():
nonlocal x
x = 2
func2()
print(x)
func1()
まとめ