Python 的nonlocal使用

文章目录

  • 前言
    • nonlocal
    • 二、使用步骤
        • nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量
    • 代码示例
        • 每次调用函数test2(),用的还是那个实例vald内存空间(nonlocal_test())。每次都改变了count的值下一次调用是上一次的值。内存空间(nonlocal_test())并没有释放。有点像c里面的static int c=1;
    • 代码示例2
        • 每次重新创建函数nonlocal_test1()。


前言

Python 的nonlocal使用


提示:以下是本篇文章正文内容,下面案例可供参考

nonlocal

我先说一下官网的nonlocal的用法:

非局部声明变量指代的已有标识符是最近外面函数的已声明变量,但是不包括全局变量。这个是很重要的,因为绑定的默认行为是首先搜索本地命名空间。nonlocal声明的变量只对局部起作用,离开封装函数,那么该变量就无效。

非局部声明不像全局声明,我们必须在封装函数前面事先声明该变量

非局部声明不能与局部范围的声明冲突

二、使用步骤

nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量

代码示例

代码如下(示例):

count = 9
def nonlocal_test():
    count = 1
    def test2():
        nonlocal count
        count += 1
        return count
    return test2
    
val = nonlocal_test()
print(val())
print(val())
print(val())
#结果
#2
#3
#4

每次调用函数test2(),用的还是那个实例vald内存空间(nonlocal_test())。每次都改变了count的值下一次调用是上一次的值。内存空间(nonlocal_test())并没有释放。有点像c里面的static int c=1;


代码示例2

代码如下(示例):

count = 9
def nonlocal_test1():
    count = 1
    def test2():
        nonlocal count
        count += 1
        return count
    return test2()
    
val = nonlocal_test1()
print(val)
print(val)
print(val)
#结果
#2
#2
#2

每次重新创建函数nonlocal_test1()。


# 总结 global关键字用来在函数或其他局部作用域中使用全局变量。 如果局部要对全局变量修改,应在局部声明该全局变量。不申明,不创建且修改全局变量则会报错。
count = 0
def global_test():
    global count
    count += 1
    print(count)
global_test()

如果局部不声明全局变量,并且不修改全局变量,则可以正常使用。

count = 0
def global_test():
    print(count)
global_test()

nonlocal只能在封装函数中使用,在外部函数先进行声明,在内部函数进行nonlocal声明

a = 100
def outer():
    b = 10
    def inner():
        nonlocal b  # 声明外部函数的局部变量
        print(r"inner b:", b)
        b = 20
        global a  # 声明全局变量
        a = 1000
        print("a :", a)
    inner()
    print(r"outer b:", b)
outer()
print("a :" ,a)
#结果
#inner b: 10
#a : 1000
#outer b: 20
#a : 1000

你可能感兴趣的:(Python,nonlocal,python)