Python:在函数内部修改全局变量

目的:想要num=10之后,将全局的num0变为1

1. 错误

num = 0

def count_num(num):
    print('do sth')
    for i in range(20):
        num += 1
        
### 在 Python 函数内部修改全局变量的简单示例 以下是一个在函数内部修改全局变量 `counter` 的完整示例。为了实现这一目标,必须使用 `global` 关键字来声明变量是全局作用域中的变量[^1]。 ```python # 定义一个全局变量 counter = 0 def increment_counter(): global counter # 声明 counter 是全局变量 counter += 1 # 修改全局变量的值 # 调用函数并查看结果 print(f"初始值: {counter}") # 输出: 初始值: 0 increment_counter() print(f"修改: {counter}") # 输出: 修改: 1 ``` #### 示例解析 - 全局变量 `counter` 在函数外部定义,并初始化为 `0`。 - 在函数 `increment_counter` 内部,通过 `global counter` 声明该变量为全局变量。如果不使用 `global`,Python 将认为 `counter` 是局部变量,从而导致 `UnboundLocalError` 错误。 - 函数调用后,全局变量 `counter` 的值被成功修改为 `1`。 #### 注意事项 尽管可以使用 `global` 关键字修改全局变量,但这种方法存在潜在问题。例如,共享数据不透明和不可控副作用可能导致代码难以维护[^1]。此外,在多线程环境中,竞争条件(Race Condition)可能引发严重问题。 #### 替代方案:闭包 为了避免直接修改全局变量,可以使用闭包来封装状态。以下是一个使用闭包的示例[^2]: ```python def create_counter(): count = 0 # 局部变量 def increment(): nonlocal count # 声明 count 是外部函数的局部变量 count += 1 return count return increment # 创建计数器 counter = create_counter() # 调用闭包并查看结果 print(counter()) # 输出: 1 print(counter()) # 输出: 2 ``` #### 替代方案解析 - 使用闭包可以避免污染全局命名空间。 - `nonlocal` 关键字用于声明 `count` 是外部函数的局部变量,而不是当前函数的局部变量。 - 每次调用 `counter()` 都会返回递增的值,而无需直接操作全局变量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值