三、名称空间
-
-
全局名称空间,当前的py文件
-
局部名称空间,函数,函数执行时才开辟
-
内置名称空间,builtins.py
-
-
加载顺序,取值顺序
-
加载顺序:内置名称空间——> 全局名称空间 ——>局部名称空间
-
取值顺序(就近原则)(LEGB):单项不可逆
(从局部找时)局部名称空间——> 全局名称空间——>内置名称空间
-
-
作用域
两个作用域:
-
全局作用域:内置名称空间、全局名称空间
-
局部作用域:局部名称空间
-
局部作用域可以引用全局
-
局部作用域不能改变全局作用域的变量,当Python解释器读取到局部作用域时,发现你对一个变量进行修改的操作,解释器会认为你在局部已经定义过这个局部变量了,他就从局部找这个局部变量,报错了
-
-
-
-
# 作用域:
# 两个作用域:
# 全局作用域 :内置名称空间 全局名称空间
# 局部作用域:局部名称空间
# 局部作用域可以引用全局作用域的变量
# date = '周五'
# def func():
# a = 666
# print(date)
# print(a)
# func()
# print(a)
# 局部作用域不能改变全局变量。
# count = 1
# # def func():
# # count += 2
# # print(count)
# # func() # local variable 'count' referenced before assignment
# 局部作用域不能改变全局作用域的变量,当python解释器读取到局部作用域时,发现了你对一个变量进行修改的操作,
# 解释器会认为你在局部已经定义过这个局部变量了,他就从局部找这个局部变量,报错了。
# 使用可以,不能改变
# def func():
# count = 1
# def inner():
# print(count)
# inner()
# func()
def func():
count = 1
def inner():
count += 1
print(count)
inner()
func()
-
-
函数的嵌套(高阶函数)
# 例1:
def func1():
print('in func1')
print(3)
def func2():
print('in func2')
print(4)
func1()
print(1)
func2()
print(2)
# in func1 3 1 in func2 4 2
# 例2:
def func1():
print('in func1')
print(3)
def func2():
print('in func2')
func1()
print(4)
print(1)
func2()
print(2)
#1 in func2 in func1 3 4 2
# 例3:
def fun2():
print(2)
def fun3():
print(6)
print(4)
fun3()
print(8)
print(3)
fun2()
print(5)
#3 2 4 6 8 5
# 作用域:# 两个作用域: # 全局作用域 :内置名称空间 全局名称空间 # 局部作用域:局部名称空间
# 局部作用域可以引用全局作用域的变量# date = '周五'# def func():# a = 666# print(date)# print(a)# func()# print(a)
# 局部作用域不能改变全局变量。# count = 1# # def func():# # count += 2# # print(count)# # func() # local variable 'count' referenced before assignment# 局部作用域不能改变全局作用域的变量,当python解释器读取到局部作用域时,发现了你对一个变量进行修改的操作,# 解释器会认为你在局部已经定义过这个局部变量了,他就从局部找这个局部变量,报错了。
# 使用可以,不能改变# def func():# count = 1# def inner():# print(count)# inner()# func()
def func(): count = 1 def inner(): count += 1 print(count) inner()func()