浅析Python中global和nonlocal关键字的妙用

 更新时间:2024年04月19日 09:25:15   作者:Sitin涛哥  
这篇文章主要来和大家一起深入探讨Python中关键词global和nonlocal的用法,包括详细的示例代码和实际应用场景,感兴趣的可以了解下

在 Python 中编写函数时,经常会遇到需要在函数内部访问和修改外部变量的情况。在这种情况下,我们可以使用 global 和 nonlocal 关键字来声明变量的作用域,以便正确地访问和修改这些变量。本文将深入探讨 global 和 nonlocal 的用法,包括详细的示例代码和实际应用场景。

global 关键字

在 Python 中,global 关键字用于在函数内部声明全局变量。当在函数内部使用一个变量,并且希望该变量在函数外部也可见和修改时,就需要使用 global 关键字。

示例代码:

x = 10

def increment_global():
    global x
    x += 1
    print("函数内部 x 的值:", x)

increment_global()
print("函数外部 x 的值:", x)

在上面的示例中,使用 global 关键字声明了变量 x 是全局变量,因此在 increment_global 函数内部可以对其进行修改。

nonlocal 关键字

与 global 关键字不同,nonlocal 关键字用于在嵌套函数中声明外部嵌套作用域中的变量。当在一个函数内部定义了另一个函数,并且希望内部函数可以访问外部函数的变量时,就需要使用 nonlocal 关键字。

示例代码:

def outer_function():
    y = 20

    def inner_function():
        nonlocal y
        y += 1
        print("内部函数 y 的值:", y)

    inner_function()
    print("外部函数 y 的值:", y)

outer_function()

在上面的示例中,使用 nonlocal 关键字声明了变量 y 是外部函数 outer_function 中的变量,因此在 inner_function 内部可以对其进行修改。

实际应用场景

1. 在函数内部修改全局变量

有时候需要在函数内部修改全局变量,例如计数器等应用场景。

count = 0

def increment_counter():
    global count
    count += 1
    print("当前计数器值:", count)

increment_counter()
increment_counter()

2. 在嵌套函数中访问外部函数的变量

当在一个函数内部定义了另一个函数,并且需要内部函数访问外部函数的变量时,可以使用 nonlocal 关键字。

def outer_function():
    result = 0

    def inner_function():
        nonlocal result
        result += 10
        print("内部函数计算结果:", result)

    inner_function()
    print("外部函数计算结果:", result)

outer_function()

3. 在闭包中使用外部变量

闭包是一种特殊的函数,可以访问其外部作用域中定义的变量。使用 nonlocal 关键字可以在闭包中修改外部变量的值。

def outer():
    x = 10

def inner():
    nonlocal x
    x += 5
    return x

  return inner

closure = outer()
print("闭包中的值:", closure())

示例代码

1. 使用 global 关键字管理全局变量

global_var = 100

def modify_global():
    global global_var
    global_var += 50

modify_global()
print("修改后的全局变量值:", global_var)

上述代码中,声明了一个全局变量 global_var,然后在函数内部使用 global 关键字来修改它的值,从而实现对全局变量的管理。

2. 使用 nonlocal 关键字访问外部函数的变量

def outer_function():
    outer_var = 10

    def inner_function():
        nonlocal outer_var
        outer_var += 5
        print("内部函数中的外部变量值:", outer_var)

    inner_function()
    print("外部函数中的外部变量值:", outer_var)

outer_function()

在这个示例中,定义了一个外部函数 outer_function,其中包含一个变量 outer_var。在内部函数 inner_function 中,使用 nonlocal 关键字访问并修改了外部函数中的变量 outer_var,并打印了修改后的值。

3. 使用 global 和 nonlocal 关键字的组合

global_var = 100

def outer_function():
    nonlocal_var = 50

    def inner_function():
        global global_var
        nonlocal nonlocal_var

        global_var += 10
        nonlocal_var += 20

        print("全局变量值:", global_var)
        print("外部函数中的非局部变量值:", nonlocal_var)

    inner_function()
    print("全局变量值(外部函数中修改后):", global_var)
    print("外部函数中的非局部变量值(外部函数中修改后):", nonlocal_var)

outer_function()

这个示例演示了在嵌套函数中同时使用 global 和 nonlocal 关键字的情况。在内部函数 inner_function 中修改了全局变量 global_var 和外部函数中的非局部变量 nonlocal_var,并打印了它们的值。同时,在外部函数中也打印了这些变量的修改后的值。

总结

Python 中的 global 和 nonlocal 关键字在变量作用域和值传递方面发挥着重要作用。global 关键字用于在函数内部声明全局变量,使得函数内部可以访问和修改全局变量的值。而 nonlocal 关键字则用于在嵌套函数中声明外部嵌套作用域中的变量,使得内部函数可以访问和修改外部函数中的变量。

到此这篇关于浅析Python中global和nonlocal关键字的妙用的文章就介绍到这了,更多相关Python global nonlocal内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用虚拟环境打包python为exe 文件的方法

    使用虚拟环境打包python为exe 文件的方法

    这篇文章主要介绍了关于使用虚拟环境打包python为exe 文件的方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • 详解Python中Pandas read_csv参数使用

    详解Python中Pandas read_csv参数使用

    在使用 Pandas 进行数据分析和处理时,read_csv 是一个非常常用的函数,本文将详细介绍 read_csv 函数的各个参数及其用法,希望对大家有所帮助
    2022-10-10
  • python作图基础之plt.contour实例详解

    python作图基础之plt.contour实例详解

    contour和contourf都是画三维等高线图的,下面这篇文章主要给大家介绍了关于python作图基础操作之plt.contour的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • 利用Python中xlwt模块操作excel的示例详解

    利用Python中xlwt模块操作excel的示例详解

    在开发中,我们最常见的数据问题之一,就是对数据进行导出整理给运营人员,所以操作excel就显得重中之重,在python中操作excel可以借助xlwt模块。感兴趣的可以跟随小编一起学习一下这篇文章
    2022-01-01
  • python不使用for计算两组、多个矩形两两间的iou方式

    python不使用for计算两组、多个矩形两两间的iou方式

    今天小编就为大家分享一篇python不使用for计算两组、多个矩形两两间的iou方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • 使用APScheduler3.0.1 实现定时任务的方法

    使用APScheduler3.0.1 实现定时任务的方法

    今天小编就为大家分享一篇使用APScheduler3.0.1 实现定时任务的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • 极速整理文件Python自动化办公实用技巧

    极速整理文件Python自动化办公实用技巧

    当涉及到自动化办公和文件整理,Python确实是一个强大的工具,在这篇博客文章中,将深入探讨极速整理文件!Python自动化办公新利器这个话题,并提供更加丰富和全面的示例代码,以便读者更好地理解和运用这些技巧
    2024-01-01
  • 详解Python中四种关系图数据可视化的效果对比

    详解Python中四种关系图数据可视化的效果对比

    python关系图的可视化主要就是用来分析一堆数据中,每一条数据的节点之间的连接关系从而更好的分析出人物或其他场景中存在的关联关系。本文将制作四个不同的关系图的可视化效果,感兴趣的可以了解一下
    2022-11-11
  • python字符串替换re.sub()实例解析

    python字符串替换re.sub()实例解析

    这篇文章主要介绍了python字符串替换re.sub()实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • python正向最大匹配分词和逆向最大匹配分词的实例

    python正向最大匹配分词和逆向最大匹配分词的实例

    今天小编就为大家分享一篇python正向最大匹配分词和逆向最大匹配分词的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11

最新评论