首页 > 解决方案 > Python:如何使用函数增加全局变量

问题描述

counter = 0

def addCounter():
    counter = counter + 1
    return counter

UnboundLocalError:分配前引用的局部变量“计数器”。

每次运行此功能时,我都会尝试进行计数器计数。我也尝试将计数器变量作为参数传递,但这也不起作用。

标签: pythonpython-3.x

解决方案


你需要:

counter = 0

def addCounter():
     global counter
     counter = counter + 1
     return counter

说明:在 Python 中,内部变量的声明是隐式的,赋值会自动声明左侧的值,但该声明始终在本地范围内。这就是为什么如果你写这个:

counter = 0
def addCounter():
    return counter

它会正常工作,但只要您添加作业

counter = 0
def addCounter():
    counter += 1
    return counter

它打破了:分配添加了一个隐式的本地声明。global覆盖它,虽然它要求全局预先存在,但它不会创建全局,它只是告诉函数这是一个可以重新分配的全局变量。

我也尝试将计数器变量作为参数传递,但这也不起作用。

确实不是。Python 的评估策略有时被称为“按共享传递”(或“按值传递引用”),这在技术上是“按值传递”,但该术语有点令人困惑,因为在这种情况下,值是引用,引用被复制但所指的对象不是,因此最终行为偏离了“通过价值”预期的正常预期。


推荐阅读