我的python菜鸟之路8

----------------------------------作用域-----------------------------------------

  • 一个函数是一个作用域

  • 作用域内部数据独享,制造作用域之间的数据隔离,但是可以利用全局的数据(上下均可)>>>父级>>父级>>.....>>全局,全局没有便报错

  • 全局不能利用作用域的数据

    a = 1
    def funs():
        x = 666
        print(x)
        print(a)
        print(b)
    b = 2
    s = funs()
    #此时函数也可以利用b的值
    a = 1
    def funs():
        x = 666
        print(x)
        print(a)
        print(b)
    s = funs()
    b = 2
    #此时便不可以利用b的值
    
  • 函数内部可以调用函数,前提是被调用的函数在全局中被定义(函数中再嵌套函数则不可以)

  • def funs():
        x = 666
        print(x)
        def fun():
            print(555)
        print(999)
        fun()
    funs()
    #结果为
    666
    999
    555
    
  • 子作用域只能找到全局的数据,不能重新赋值

  • 但列表、集合、字典可被修改类的类型,能被子作用域在全局修改

    name=[1,2,3,4]
    def funs():
        name.append(55)
        print(name)
    funs()
    print(name)
    
  • 如果非要在子作用域对全局进行赋值可选用global语句(只用于全局)

  • name='杨子列'
    def funs():
        global name
        name = '扬子鳄'
    funs()
    print(name)
    
  • nonlocal,修改上一层的父级

  • ame='杨子列'
    def funs():
        name = '扬子鳄'
        def fun():
            nonlocal name
            name = 'yangziq'
            print(name)
        fun()
    funs()
    print(name)
    #结果为
    yangziq
    杨子列
    

    补充

    • 全局变量必须是大写(一个程序员的修养)
  • 作用域补充

for item in range(10):
    pass
print(item)
#输出结果为:
#9
  • 作用域补充
item = 10
def func():
    item = 2
    def inner():
        print(item)
    for item in range(10):
        pass
    inner()
func()
#结果为:
#9

作用域补充

原文地址:https://www.cnblogs.com/yangzilaing/p/13193692.html