全局变量与局部变量
从字面意义也可发现全局是针对全部的,而局部变量是针对部分的也就是局部。
一、变量、函数等等都必须先声明后调用,如:
1、 print(NAME)
NAME = "alex"
2、test()
def test()
pass
以上都是错误的,违反先声明后调用原则。
二、全局变量与局部变量的判断
三、global与nonlocal
无缩进可以声明全局变量,global可以在任何位置定义全局变量,有缩进的为局部变量,另外还有nonlocal定义局部变量,但也可理解为介于全局与局部变量之间的。如
四、怎么找变量的值,遵循”就近“原则
本级有,用本级的,本级没有找上一级的,直到找到为止,否则报错。如看两段代码执行结果
NAME = ['ab','cd']
def test1():
NAME = "erbi"
def test():
nonlocal NAME
NAME = "sb"
print(NAME)
test()
print(NAME)
print(NAME)
test1()
print(NAME)
NAME = ['ab','cd']
def test1():
NAME = "erbi"
def test():
nonlocal NAME
NAME = "sb"
print(NAME)
test()
print(NAME)
print(NAME)
test1()
print(NAME)
注意两个执行结果的区别
五、局部变量无法修改全局变量,但可追加、删除,但只针对可变类型如list,dict
NAME = ['ab','cd']
def test1():
def test():
NAME.append("sb")
print(NAME)
test()
print(NAME)
print(NAME)
test1()
print(NAME)
注:变量和函数是全局还是局部,关键是看定义的位置而不是被调用的位置。
name='root'
def out(func):
name='jordan'
def inner():
print(name)
func()
return inner
def show():
print(name)
out(func)()
结果为:jordan,root