# 三、global nonlocal
#1、 global:在全局名称空间里得到局部名称空间的变量
# 1、在局部作用域中声明一个全局变量
# 2、在局部作用域中更改一个全局变量
# 补充:对于一个可变的数据类型,在函数中如果对其进行操作,改变全局不用引用global
# name = "老男孩"
# def func1():
# global name #将函数中的name 变量 应用到全局作用域中
# name = 'gelong'
# print(name)
# func1()
# print(name)
# 结果: gelong
# gelong
# l1 = [1,2,3,4]
# def func():
# l1.append(666) #对于可变的的数据类型,函数中对其增加666, 不用引用global
# func()
# print(l1)
# 结果:[1, 2, 3, 4, 666]
# 2、nonlocal:
# 1、不能改变一个全局变量
# 在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)进行引用和更改
# 并且引用的哪层,那层及以下的变量全部发生改变
# def func1():
# name = 'alex'
# print(name) # 1, alex
# def inner():
# nonlocal name
# name = '老男孩'
# print(name) # 2 老男孩
# inner()
# print(name) # 3, 老男孩
# func1()
# name = 'sb'
# def fucn1():
# global name
# name = 'gelong'
# print(name)
# def fucn2():
# global name
# name = 'haoren'
# print(name)
# print(name)
# fucn2()
# fucn1()
# print(name)
# name = 'sb'
# def fucn():
# name = 'sb2'
# def fucn1():
# nonlocal name
# name = 'gelong'
# fucn1()
# print(name)
# fucn()
# print(name)
# 结果:gelong
# sb
# def func():
# def func1():
# name ="老男孩"
# def func2():
# nonlocal name
# name = "alex"
# def func3():
# global name
# name = "太白"
# name = "日天"
#
# func1()
# print(name) # 1 日天
# func2()
# print(name) # 2,alex
# func3()
# print(name) # 3,alex
# func()
# print(name) # 4,太白
# 内层函数引用变量补充知识点
# count = 1
# def func4():
# count = count +1
# print(count)
#
# func4()
#结果:报错
#解释: 局部只能引用全局的变量,不能修改,如果修改用global
# def func4():
# count = 4
# def inner():
# nonlocal count
# count = count +1
# print(count)
#
# func4()
#子函数只能引用父函数的变量,不能修改,如果修改 用nonlocal