python局部变量引用问题

这里写图片描述
在python3中,若在局部中有改变不可变类型的全局变量的值的操作,无论先后顺序,系统会默认为将该变量作为局部变量,不会再去全局寻找该变量的值,因此如上图的代码,会报错:这里写图片描述
解决办法是使用global将该变量变为全局变量。
在局部中增,删,改可变类型的全局变量的元素,不存在这个问题

### Python局部变量与全局变量的定义 #### 定义 在 Python 中,**局部变量**是指在函数内部定义并仅限于该函数作用域内的变量[^2]。而 **全局变量** 则是在函数外部定义的变量,其作用范围覆盖整个程序文件,只要函数调用发生在全局变量定义之后即可访问它[^3]。 --- ### 区别 1. **作用域** - 局部变量的作用域局限于定义它的函数内部,无法在函数外部或其他函数中使用。 - 全局变量在整个脚本范围内有效,可以在任意位置被读取或修改(前提是遵循特定规则)[^3]。 2. **生命周期** - 局部变量只存在于函数执行期间,当函数结束时会被销毁。 - 全局变量则会在整个程序运行过程中持续存在,直到程序终止[^3]。 3. **赋值与声明** - 如果希望在一个函数内为定义在函数外的变量重新赋值,则需要显式地通过 `global` 关键字声明此变量为全局变量[^1]。否则,默认情况下,Python 将视之为一个新的局部变量。 - 函数内部首次出现在等号右侧的未声明变量默认被认为是全局变量的一部分;但如果在同一表达式的左侧再次出现相同名称的新变量名,则会导致错误,因为此时解释器认为这是试图引用尚未初始化的本地副本[^3]。 --- ### 使用方法 以下是关于如何正确处理局部和全局变量的一些示例: #### 示例 1: 正确操作全局变量 如果要在函数内部更改已存在的全局变量值,需先利用 `global` 进行声明: ```python x = 10 # 全局变量 def modify_global(): global x # 告诉编译器我们正在使用的 'x' 是全局的那个 x += 5 modify_global() print(x) # 输出将是 15 ``` #### 示例 2: 错误尝试直接修改全局变量而不加声明 如果没有提前指定某个变量作为全局对象对待,那么即使同名也会创建新的局部实例而非影响原始数据结构: ```python y = 20 # 另一全局变量 def try_modify_without_global(): y *= 2 # 这里实际上创建了一个名为'y'的新局部变量而不是更新原有的那个 # 导致 UnboundLocalError 报错,除非加上 global y try_modify_without_global() # 上述代码会抛出异常:"UnboundLocalError" ``` #### 示例 3: 避免混淆的情况——安全引用全局变量 可以通过简单地读取全局变量的内容来避免潜在冲突: ```python z = 30 def safely_use_global(): result = z * 3 # 不涉及重命名或者再分配给新实体的操作都是允许的 return result output = safely_use_global() print(output) # 成功打印90 ``` #### 示例 4: 结合局部与全局变量 有时可能既想保留原有全局状态又生成临时计算结果存入独立空间存储下来供后续单独处置: ```python w = 40 def combine_local_and_global(): local_w = w + 7 # 创建一个基于当前全局‘w’值得到增强版版本保存至local_w之中 return local_w new_value = combine_local_and_global() print(new_value) # 显示数值应等于47 print(w) # 而原初设定保持不变依旧显示为40 ``` --- ### 总结 理解并掌握好局部变量与全局变量的概念及其相互关系对于编写清晰高效的 python 应用至关重要。合理运用这些特性可以帮助开发者更好地管理复杂项目中的资源分布状况以及提升整体性能表现水平。 问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值