ホームページ  >  記事  >  バックエンド開発  >  Python での名前空間の 3 つの方法の紹介 (例付き)

Python での名前空間の 3 つの方法の紹介 (例付き)

不言
不言転載
2018-10-09 16:48:473148ブラウズ

この記事では、Python の名前空間の 3 つの方法を紹介します (例付き)。一定の参考価値があります。必要な友人は参照できます。お役に立てれば幸いです。

Python には 3 種類の名前空間があります:

組み込み名前空間は、print、input などのインタープリターの開始時にさまざまな名前が自動的にメモリにロードされる空間です。 . 定義されていれば使える名前

グローバル名前空間とは、定義した変数名や関数名が上から下まですべて配置される空間で、実行時にメモリにロードされます。プログラムの上から下へ。

ローカル名前空間は、関数実行時に開かれる空間など、関数内で定義されたさまざまな名前を格納しており、関数の実行が終了すると消滅します。

グローバル名前空間の名前とローカル名前空間の組み込み名前空間の名前を使用できます

組み込み名前空間の名前をグローバル名前空間で使用できますが、ローカル名前空間内の名前。

グローバル名とローカル名は、組み込みの名前空間では使用できません。

組み込み名前空間が最上位で定義なしで使用でき、次にグローバル名前空間、最下位レベルがローカル名前空間であることがよくわかります。

下位レベルの名前空間が名前を使用する場合、最初にそれ自体の名前空間を検索します。存在する場合はそれが使用されます。存在しない場合は、上位レベルの名前空間が検索されます。存在する場合は、 , それが使用されます。存在しない場合は、次のレベルに進みます。最上位の組み込み名前空間まで上位レベルのスペースを検索します。存在する場合はそれを使用します。存在しない場合は、エラーが報告されます。

例は次のとおりです:

num = 1 #这是全局命名空间内定义的num = 1
def func1(): #这个函数会创建一个局部命名空间1
    num = 2  #这是在局部命名空间1定义的num = 2
    def func2(): #这个函数会创建一个局部命名空间2
        num = 3 #这是在局部命名空间2 内 定义的num = 3
        print(num) #这是在局部命名空间2内 使用num 变量
    func2() # 调用函数func2时 会执行该命令创建局部命名空间2
func1()  #调用函数func1时会创建局部命名空间1,
#这几个命名空间的级别顺序是:内置>全局>局部1>局部2
#当print(num)指令执行时它会在局部2内查找是否有num,发现有则直接引用,如果没有则会到上一级(局部1)中查找,局部1没有则继续到上一级(全局)查找

別の例を見てください:

#max()函数是内置的函数,如果我们在全局命名空间中定义了函数名为max的函数时,则该函数就失效了,也就是说在自身空间内找到了max()后就不去内置命名空间查找了
def max(a,b,c):
    return 'max失效了?'
print(max(1,2,3))#
正常情况下应该输出3(max函数功能是返回最大值),但是因为我们把max这个名字占用了,所以当使用时程序就不去上一级空间(内置命名空间)去查找了

名前空間に関連する 2 つの関数 globals() と locals()
used globals() グローバル名前空間内のすべての定義名を表示します
現在の名前空間内のすべての定義名を表示するには、locals() を使用できます。グローバルの場合はグローバルを返し、ローカルの場合はグローバルを返します。ローカルを返します
これら 2 つの関数の戻り値 値は辞書と見なすことができ、形式は {key1:value1,key2:value2,...}

関数 1 が関数内にネストされている場合2、関数 1 の不変データ型の場合 変数は関数 2 で参照できますが、変更できません

def func1():
    a = 1
    def func2():
        a = a + 1 
#此处会报一个严重错误,因为a同时出现在等号两边,Python会先执行等号右边的表达式,
#发现你在引用a,然后它会先在本空间查找a,结果找到了等号左边的a,其结果就是“在定义变量前引用变量”
        pass      
    func2()
func1()
#如果想要修改,可以使用nonlocal(python3中新增)
def func1():
    a = 1
    def func2():
        nonlocal a
        a = a + 1
    func2()
    print(a) 
func1()
#我们可以看出,执行func2()后再输出a,a已经变成2了
    2

nonlocal はローカル変数にのみ作用します。使用すると、上位レベルの変数かどうかが自動的に検索されます。ローカル名前空間には変数があります。そうでない場合は、最上位の「ローカル名前空間」

# まで上方向に検索を続けます。

以上がPython での名前空間の 3 つの方法の紹介 (例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。