闭包之nonlocal关键字的作用
1.创建进程2.Process类语法详解3.进程间通信4.进程池5.进程间的锁和信号量6.根据进程编号杀死指定进程os.kill7.守护进程8.线程9.实现多线程多任务的步骤10.threading.Thread类详解11.守护线程&&threading.enumerate()12.python线程并行执行与java的线程并行执行的对比13.IO密集型任务与CPU密集型任务14.多线程共享全局变量的问题15.多线程共享资源之竞态条件16.互斥锁17.死锁18.线程池19.进程与线程的对比20.闭包
21.闭包之nonlocal关键字的作用
22.闭包之作用23.闭包之可能引起的问题24.弱引用25.装饰器26.装饰器示例27.property 属性28.with语句和上下文管理器详解、最佳实践、示例29.生成器30.深浅拷贝31.正则表达式nonlocal关键字在闭包中的作用
在Python中,默认情况下,内层函数只能访问外层函数的变量,但不能修改它们。如果希望在闭包函数中修改外层函数中的变量,可以使用nonlocal关键字来声明要修改的变量。
示例
1 # 外部函数 2 def func_out(num1): 3 # 内部函数 4 def func_inner(num2): 5 print("内部函数可以直接访问外部函数的变量,但是无法直接修改外部函数的变量",num1) 6 # 此句会报编译错误 7 # num1 = num1 + num2 8 9 10 11 12 print(num1) 13 func_inner(10) 14 print(num1) 15 16 return func_inner 17 18 19 # 外部函数 20 def func_outV2(num1): 21 # 内部函数 22 def func_inner(num2): 23 nonlocal num1 # 使用nonlocal关键字,内部函数就可以在其内部修改num1的值 24 num1 = num2 + 10 25 26 print(num1) 27 func_inner(10) 28 print(num1) # 内部函数的修改,对外部函数可见 29 30 return func_inner 31 32 num1 = 10 33 f = func_out(10) 34 # 调用闭包 = 内部函数 num2 = 10 35 f(10) 36 37 f = func_outV2(10) 38 # 调用闭包 = 内部函数 num2 = 10 39 f(10)
最佳实践
- 在闭包函数中使用
nonlocal
关键字时,应该避免将其滥用。在不需要修改外层变量的情况下,按照最小化原则,尽量不要使用nonlocal
关键字。 - 当需要在闭包函数中修改外层变量时,确保使用
nonlocal
关键字来明确声明要修改的变量,以避免意外修改其他变量。
1 def outer_function(): 2 x = 0 3 4 def inner_function(): 5 nonlocal x 6 x += 1 7 print(x) 8 9 return inner_function 10 11 closure = outer_function() 12 closure() # Output: 1
在上面的示例中,inner_function
只修改了外层函数中的x
变量,并打印出了修改后的值。这样可以避免意外修改其他变量,提高代码的可读性和可维护性。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能