python中变量作用域及嵌套作用域扫描.pdf
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
Python中的变量作用域是编程中一个非常重要的概念,它决定了变量在何处可见和可访问。在Python中,变量的查找遵循LEGB(Local, Enclosing, Global, Built-in)原则,也就是从局部作用域开始查找,如果找不到再向外扩展到包含它的函数或类的外部作用域,接着是全局作用域,最后是内建作用域。如果在所有这些作用域中都找不到变量,程序会抛出`NameError`异常。 局部作用域主要由`def`、`lambda`等语句创建,如函数或匿名函数内部。在这个作用域内定义的变量只在该函数内部有效,离开函数后就无法访问。例如: ```python def f(): a = 2 # a 是局部变量,在f函数内部有效 f() print(a) # 这里会抛出NameError,因为在全局作用域找不到a ``` 全局作用域通常是在模块级别定义的变量,可以被模块内的所有函数访问。不过,如果在函数内部试图修改全局变量,需要使用`global`关键字来声明: ```python a = 1 def f(): global a a = 2 # 使用global声明后,a成为全局变量 f() print(a) # 输出2,因为f函数内的a是全局变量 ``` 内建作用域包含Python解释器预定义的一些特殊名称,如`len`, `print`, `range`等。 当涉及到嵌套作用域,例如在一个函数内部定义另一个函数,就会出现外部作用域。这种情况下,内部函数可以访问外部函数的局部变量,但外部函数不能直接访问内部函数的局部变量。这就是所谓的闭包现象。闭包是一种特殊的函数,它可以记住定义它的环境,即使函数已经返回,仍然能访问那个环境中的变量。下面是一个闭包的例子: ```python def outer(): x = 1 def inner(): print(x) return inner func = outer() func() # 输出1,因为inner函数记住了outer函数的局部变量x ``` 在Python中,`if`、`try`、`for`、`while`等语句并不创建新的作用域,它们内部定义的变量仍然属于它们所在的作用域。例如: ```python while True: newvar = 8 print(newvar) break print(newvar) # 输出8,因为while循环内部定义的newvar在循环外部依然可见 ``` 在`try`/`except`块中,异常处理部分可以访问`try`块中的变量,即使`try`块没有正常执行完: ```python try: newlocal = 7 raise Exception except: print(newlocal) # 输出7,因为异常处理可以访问try块中的变量 ``` Python的变量作用域是理解其代码逻辑的关键部分,了解LEGB规则和闭包的概念有助于编写更加清晰和可控的代码。在编写程序时,合理利用作用域可以提高代码的复用性和可维护性。
- 粉丝: 0
- 资源: 11万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于Spring Boot和Vue的后台管理系统.zip
- 用于将 Power BI 嵌入到您的应用中的 JavaScript 库 查看文档网站和 Wiki 了解更多信息 .zip
- (源码)基于Arduino、Python和Web技术的太阳能监控数据管理系统.zip
- (源码)基于Arduino的CAN总线传感器与执行器通信系统.zip
- (源码)基于C++的智能电力系统通信协议实现.zip
- 用于 Java 的 JSON-RPC.zip
- 用 JavaScript 重新实现计算机科学.zip
- (源码)基于PythonOpenCVYOLOv5DeepSort的猕猴桃自动计数系统.zip
- 用 JavaScript 编写的贪吃蛇游戏 .zip
- (源码)基于ASP.NET Core的美术课程管理系统.zip