Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:如何使用函数递增全局变量_Python_Python 3.x - Fatal编程技术网

Python:如何使用函数递增全局变量

Python:如何使用函数递增全局变量,python,python-3.x,Python,Python 3.x,UnboundLocalError:赋值前引用了局部变量“counter” 每次运行此函数时,我都尝试进行计数器计数。我也尝试将计数器变量作为参数传入,但也不起作用。您需要: counter = 0 def addCounter(): counter = counter + 1 return counter 说明:在Python中,内部变量的声明是隐式的,赋值会自动声明左侧的值,但是该声明始终在局部范围内。这就是为什么如果你写这个: 计数器=0 def addCounter(

UnboundLocalError:赋值前引用了局部变量“counter”

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

您需要:

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