3、global nonlocal

# 三、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
posted @ 2018-05-10 18:23  龙的传人123  阅读(54)  评论(0)    收藏  举报