Python:如何使用函数递增全局变量
UnboundLocalError:赋值前引用了局部变量“counter” 每次运行此函数时,我都尝试进行计数器计数。我也尝试将计数器变量作为参数传入,但也不起作用。您需要:Python:如何使用函数递增全局变量,python,python-3.x,Python,Python 3.x,UnboundLocalError:赋值前引用了局部变量“counter” 每次运行此函数时,我都尝试进行计数器计数。我也尝试将计数器变量作为参数传入,但也不起作用。您需要: counter = 0 def addCounter(): counter = counter + 1 return counter 说明:在Python中,内部变量的声明是隐式的,赋值会自动声明左侧的值,但是该声明始终在局部范围内。这就是为什么如果你写这个: 计数器=0 def addCounter(
counter = 0
def addCounter():
counter = counter + 1
return counter
说明:在Python中,内部变量的声明是隐式的,赋值会自动声明左侧的值,但是该声明始终在局部范围内。这就是为什么如果你写这个:
计数器=0
def addCounter():
返回计数器
它可以很好地工作,但一旦你添加了作业
计数器=0
def addCounter():
计数器+=1
返回计数器
它中断了:assignment添加了一个隐式本地声明global
覆盖此选项,尽管它要求预先存在全局变量,但它不创建全局变量,它只是告诉函数这是一个可以重新分配的全局变量
我也尝试将计数器变量作为参数传入,但这也不起作用
事实并非如此。Python的评估策略有时被称为“通过共享传递”(或“通过值传递引用”),这在技术上是“通过值传递”,但该术语有点混淆,因为本例中的值是引用,引用是复制的,但引用的对象不是,因此最终行为与“通过值”期望值。使用类而不是全局:
处理(不使用)全局变量的另一种方法是将希望全局的函数和变量包装到类中
虽然这对于这个特定的案例来说有点沉重,但是类为项目添加了大量的功能和灵活性。(个人)强烈推荐
例如:
输出:
您应该使用global counter
另一个选项是将函数包装在一个类中,并将counter
作为一个类变量-该类中的所有函数都可以访问该类。当然最好使用一个类和类变量而不是全局变量。这是否回答了您的问题?Python语法允许这种“快捷方式”(如果您愿意)。计数器+=1
counter = 0
def addCounter():
global counter
counter = counter + 1
return counter
class Processor():
"""Class container for processing stuff."""
_counter = 0
def addcounter(self):
"""Increment the counter."""
# Some code here ...
self._counter += 1
# See the counter incrementing.
proc = Processor()
proc.addcounter()
print(proc._counter)
proc.addcounter()
print(proc._counter)
1
2