变量的作用域:变量的有效范围
分类:
全局变量:在函数内外都有效的变量就是全局变量(使用global关键字声明)
局部变量:仅仅在函数内部有效的变量就是局部变量
num = 1 # 暂且称呼num 为全局变量
def func():
print(num)
func()
print(num)
# def func():
# num = 1 #局部变量
# print(num)
# func()
# print(num)
- 手术麻醉:
- 全身麻醉:相当于全局变量
- 局部麻醉:相当于局部变量
全局变量(特征):
1.在函数外部可以正常访问
2.在函数内部也可以正常访问
局部变量(特征):
1.在函数外部不可以访问
2.在函数内部可以访问
locals() 获取当前作用域的变量(在局部中,是获取locals()之前的所有变量)
def func():
num = 1
num2 = 2
print(locals())
func()
globals() 获取当前位置的全部全局变量。
globals() 获取全局变量
num = 1
def func():
num2 = 2
print(globals())
func()
- 将局部变量提升为真正的全局变量
- global 变量1,变量2,…
- global 提升的全局变量是真正的全局变量
def func():
global num,num2
num2 = 2
num = 1
func()
print(num)
print(num2)
num = 3
def func():
global num
num = 2
print(num)
func()
print(num)
#结果为2 2
# 函数的嵌套
def out(): # 外层的函数
print("外层函数的打印结果:") # 1
def inner(): # 内层的函数
num1 = 1
print("内层函数的打印结果:") #2
inner()
out()
# 定义一个函数
num = 1
def func():
global num
num = 1
print(num) # 1 == > 1
func()
num += 1
print(num) # 2 ==> 2
- nonlocal
- 适用于在局部函数中的局部函数, 把内层的局部变量设置成上一个外层局部可用,但是还不是全局的。他与global可以混合使用.
def out():
num = 1
def inner():
nonlocal num
num += 1
print(num)
inner()
out()
#三层函数
def out():
num = 3
def middule():
num = 1
def inner():
nonlocal num
num += 1
print(num)
inner()
print(num)
middule()
print(num)
out()
#结果2 2 3
num = 1 # === 2
def out():
global num
num += 1 # num === 2
def middle():
num = 4 # ====5
def inner():
nonlocal num
num += 1 # ====5
print(num) # 1 ==>5
inner()
print(num) # 2 == > 5
middle()
print(num) # 3 ==>2
out()
print(num) # 4 ==> 2
#结果5 5 2 2
def scope_test():
def do_local():
spam = "局部变量" # 1
def do_nonlocal():
nonlocal spam # 使用外层的spam变量
spam = "nonlocal 变量" # 2
def do_global():
global spam
spam = "global 变量" # 3
spam = "test spam" # 4
do_local()
print("本地分配后:", spam) # 4
do_nonlocal()
print("nonlocal分配后:", spam) # 2
do_global()
print("global分配后:", spam) # 2
scope_test()
print("全局范围:", spam)
#结果:
本地分配后: test spam
nonlocal分配后: nonlocal 变量
global分配后: nonlocal 变量
全局范围: global 变量
710

被折叠的 条评论
为什么被折叠?



