#全局变量;顶头写的就是全局变量,就是没有缩进的变量;在任何位置都能调用
#局部变量;在子程序中定义的变量
name = "test" #全局变量
def func(): #这个函数里面就是局部作用域
global name #定义全局变量;上面的test就会被修改,下面多name修改都是修改的全局name(申明,name 就是全局那个name)
name = "多对多" #局部变量
print(name)
func()
print(name)
# 如果函数中无global的时候;优先读取局部变量;如果无局部变量,就读取全局变量;但是无法对全局变量重新赋值;但是对于可变类型;可以对它进行内部操作
# 如果有global 可以赋值,可以修改,但是修改就是原来的变量的值
s = ["a","b"]
def func1():
s.append('c') #对于可变类型;可以对它进行内部操作
print(s) #['a', 'b', 'c']
func1()
print(s) #['a', 'b', 'c']
def test1():
name = "test1"
print(name) #test1
def test2():
name = "test2"
print(name) #test2
def test3():
name = "test3"
print(name) #test3
print(name) #test2
test3()
test2()
test1()
#nonlocal 是改变上一层的值
def js():
val = "aaa" #修改成了bbb
def jp():
nonlocal val #修改上层val为下面这个bbb的值
val = "bbb"
print(val) #bbb
jp()
print(val) #bbb
js()
def js():
val = "aaa"
def jp():
val = "bbb"
print(val)
return jp
return jp
js()()