zoukankan      html  css  js  c++  java
  • python中全局global和局部nonlocal命名空间

    python中全局global和局部nonlocal命名空间

    局部名称空间对全局名称空间的变量可以引用,但是无法改变。

    count = 1
    def func1():
        count = 2
        print(count)
    func1()
    count = 1
    def func1():
        # count = 3
        count = count + 1  # local variable 'count' referenced before assignment
        print(count)
    func1()
    

    报错原因:如果你在局部名称空间 对一个变量进行修改,那么解释器会认为你的这个变量在局部中已经定义了,但是对于上面的例题,局部中没有定义,所以他会报错。

    一. global

    global关键字修饰变量后标识该变量是全局变量,对该变量进行修改就是修改全局变量

    count = 1
    def func1():
        global count	#在局部名称空间声明一个全局变量。
        count = count + 1	#在局部名称空间声明可以对全局变量进行修改。
        print(count)
    func1()
    print(count)
    

    输出:

    2
    2
    

    二. nonlocal

    1. 子函数对父函数的变量进行修改
    2. 此变量不能是全局变量
    3. 在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,并且引用的哪层,从那层及以下此变量全部发生改变。

    def func1():
        count = 666
        def inner():
            print(count)
            def func2():
                nonlocal count
                count += 1
                print("func2",count)
            func2()
            print("inner",count)
        inner()
        print("funcl",count)
    func1()
    

    输出:

    666
    func2 667
    inner 667
    funcl 667
    
  • 相关阅读:
    函数式编程
    JSONP
    用javascript实现base64编码器
    图片Ping
    CORS
    深入理解ajax系列第五篇——进度事件
    文件File
    深入理解ajax系列第四篇——FormData
    Blob
    深入理解ajax系列第三篇——响应解码
  • 原文地址:https://www.cnblogs.com/vito-lee/p/11940165.html
Copyright © 2011-2022 走看看