1、名前空間の名前空間
名前を格納する場所は、スタック領域の一部門です。あなたが名前空間を持っていたら、それはスタック領域に保存することができ
、同じ名前。
名前空間の詳細については、3つに分割されています
1.1ビルトイン名前空間
店舗名:ストアPythonインタプリタの内蔵名前
メモリスペースの生存期間:開始Pythonインタプリタが生成され、Pythonインタプリタが近いその後、破棄
例如:
>>> print #内置函数print
<built-in function print> #内存空间
>>> input
<built-in function input>
1.2グローバルネームスペース
店舗名:長い関数が内で定義されていない、また構築され、そして残りはグローバル名前空間名ですとして
のpythonファイルの実行が生成され、ファイルはPythonの破壊を実行し終えた後:生存期間
import os
x=10
if 13 > 3:
y=20
if 3 == 3:
z=30
func=函数的内存地址
def func(): #函数名对应的也是全局名称
a=111
b=222
class Foo:
pass
1.3ローカル名前空間
店舗名:あなたはの過程で生成されたコードを実行するために、関数本体中の関数名を関数を呼び出す
生存期間を:関数を呼び出すときに、生存、関数呼び出しは、破壊を完了しています
def func(a,b):
pass
func(10,1) #每调用一次都会产生一个局部名称空间
func(11,12)
func(13,14)
func(15,16)
1.4名前空間のロード順序
ビルトイン名前空間>グローバル名前空間>ローカル名前空間
1.5破壊の順序
ビルトイン名前空間のローカル名前空間>グローバル名前空間>
優先順位1.6の名前を探します
層の検索によってアップ層の現在位置
如果当前在局部名称空间:
局部名称空间—>全局名称空间->内置名称空间
input=333
def func():
input=444 #会优先找函数内的input参数,如果没有会去全局名称空间
#找,最后去内置名称空间找,如果都没有则报错
print(input)
func()
もし、現在のグローバルな名前空間
のグローバルネームスペース-ビルトイン名前空間>
input=333
def func():
input=444
func()
print(input)
示范1:
def func():
print(x)
x=111
func()
示范2:名称空间的"嵌套"关系是以函数定义阶段为准,与调用位置无关
x=1
def func():
print(x)
def foo():
x=222
func()
foo()
示范3:函数嵌套定义
input=111
def f1():
def f2():
# input=333
print(input)
input=222
f2()
f1()
示范4:
x=111
def func():
print(x) #
x=222
func()
2、スコープと名前検索の優先順位
グローバルスコープ:組み込みの名前空間、グローバル名前空間
1、グローバル生存
2、グローバルな有効:すべての機能が共有されています
x=111
def foo():
print(x,id(x))
def bar():
print(x,id(x))
foo()
bar()
print(x,id(x))
ローカルスコープ:ローカル名前空間の名前
1、一時的な生存
2、部分的に有効:有効な関数内で
def foo(x):
def f1():
def f2():
print(x)
LEGB #查找顺序
L —— Local(function);函数内的名字空间
E —— Enclosing function locals;外部嵌套函数的名字空间(例如closure)
G —— Global(module);函数定义所在模块(文件)的名字空间
B —— Builtin(Python);Python内置模块的名字空间
# builtin
# global
def f1():
# enclosing
def f2():
# enclosing
def f3():
# local
pass
globleと非ローカル
示范1:
x=111
def func():
x=222
func()
print(x)
示范2:如果再局部想要修改全局的名字对应的值(不可变类型),需要用global
x=111
def func():
global x # 声明x这个名字是全局的名字,不要再造新的名字了
x=222
func()
print(x)
示范3:
l=[111,222]
def func():
l.append(333)
func()
print(l)
nonlocal(了解): 修改函数外层函数包含的名字对应的值(不可变类型)
x=0
def f1():
x=11
def f2():
nonlocal x
x=22
f2()
print('f1内的x:',x)
f1()
def f1():
x=[]
def f2():
x.append(1111)
f2()
print('f1内的x:',x)
f1()