测试开发技术网站
博客
设计
设计
开发
Python
测试
unittest
运维
Linux基础应用
CI/CD
CI/CD
数据库
数据库
云计算
云计算
云原生
云原生
爬虫
爬虫
数据分析
数据分析
人工智能
人工智能
登录
注册
Python高级语法----探秘Python闭包与作用域
收藏本文
作者:redrose2100 类别: 日期:2023-11-07 23:45:51 阅读:417 次 消耗积分:0 分
[TOC] ![](https://redrose2100.oss-cn-hangzhou.aliyuncs.com/img/86eddc30-7c4e-11ee-beb1-0242ac110004.png) 在Python的世界里,理解闭包(Closure)和作用域(Scope)是提升编程技巧和深度的一大步。这篇文章将带你深入了解闭包的神秘面纱,掌握LEGB规则,并使用`nonlocal`与`global`关键字来巧妙控制变量作用域。 ### 闭包的定义与作用 闭包是一种特殊的对象,它由函数和该函数声明时的环境组成。当一个函数返回了一个内部函数,而这个内部函数引用了外部函数的变量,闭包就诞生了。闭包的威力在于它可以记住创建时的环境,即使离开了创建它的作用域。 **代码示例:** ```python def outer_function(msg): def inner_function(): print(msg) return inner_function my_closure = outer_function('Hello, World!') my_closure() ``` **运行结果:** ``` Hello, World! ``` 在这个例子中,`inner_function`是一个闭包,它记住了`msg`的值。 ### LEGB规则 LEGB是Python用来解析变量时的查找顺序:Local -> Enclosing -> Global -> Built-in。它定义了名字空间搜索变量的顺序: * **Local**(局部):函数或方法内部。 * **Enclosing**(嵌套的外部函数):包含当前函数的外部函数的作用域。 * **Global**(全局):当前脚本的最外层。 * **Built-in**(内建):Python语言自带的名字空间。 ### nonlocal与global关键字 当你想修改外部函数变量的值时,`nonlocal`关键字就派上用场了。而`global`关键字用于在函数内部修改全局变量。 **代码示例:** ```python def outer(): x = "local" def inner(): nonlocal x # 使用nonlocal声明 x = "nonlocal" print("Inner:", x) inner() print("Outer:", x) x = "global" def modify_global(): global x # 使用global声明 x = "modified global" print(x) outer() # 输出 Inner: nonlocal 和 Outer: nonlocal modify_global() # 输出 modified global print(x) # 输出 modified global ``` 在这里,我们看到`inner()`函数中的`nonlocal`声明使得`x`指向了嵌套的外部函数`outer()`中的`x`。而`modify_global()`函数中的`global`声明则允许我们修改全局变量`x`的值。 通过闭包和作用域的合理运用,你可以编写出更加强大、灵活和封装性更好的Python代码。掌握这些概念不仅能帮助你解决实际问题,还能让你更深入地理解Python的内部工作原理。
始终坚持开源开放共享精神,同时感谢您的充电鼓励和支持!
版权所有,转载本站文章请注明出处:redrose2100, http://blog.redrose2100.com/article/712
上一篇:
Python高级语法----Python装饰器的艺术
下一篇:
Python高级语法----Python中的上下文管理器和with语句
搜索
个人成就
出版书籍
《Pytest企业级应用实战》
测试开发技术全栈公众号
测试开发技术全栈公众号
DevOps技术交流微信群
加微信邀请进群
常用网站链接
开源软件洞察
云原生技术栈全景图
Python语言官方文档
Golang官方文档
Docker官方文档
Jenkins中文用户手册
Scrapy官方文档
VUE官方文档
Harbor官方文档
openQA官方文档
云原生开源社区
开源中国
Kubernetes中文文档
Markdown语法官方教程
Kubernetes中文社区
Kubersphere官方文档
BootStrap中文网站
JavaScript中文网
NumPy官方文档
Pandas官方文档
GitLink确实开源网站
数据库排名网站
编程语言排名网站
SEO综合查询网站
数学加减法练习自动生成网站
Kickstart Generator
文章分类
最新文章
最多阅读
特别推荐
×
Close
登录
注册
找回密码
登录邮箱:
登录密码:
图片验证码:
注册邮箱:
注册密码:
邮箱验证码:
发送邮件
注册邮箱:
新的密码:
邮箱验证码:
发送邮件