1

运行此代码:

import re
regex = re.compile("hello")
number = 0
def test():
  if regex.match("hello"):
    number += 1

test()

产生此错误:

Traceback (most recent call last):
  File "test.py", line 12, in <module>
    test()
  File "test.py", line 10, in test
    number += 1
UnboundLocalError: local variable 'number' referenced before assignment

为什么我可以regex从函数内部引用,但不能number

4

1 回答 1

2

因为您正在定义一个number在函数内部调用的新变量。

这是您的代码有效执行的操作:

def test():
    if regex.match("hello"):
        number = number + 1

当 Python 第一次编译这个函数时,它一看到number =,就会number变成一个本地的。number对该函数内部的任何引用,无论它出现在何处,都将引用新的本地。全局被遮蔽。因此,当函数实际执行并且您尝试计算number + 1时,Python 会查询尚未分配值的local 。 number

这完全是由于 Python 缺少变量声明:因为你没有显式声明局部变量,它们都是在函数顶部隐式声明的。

在这种情况下,您可以使用global number(在自己的行上)告诉 Python 您总是想引用全局number. 但首先避免需要它通常会更好。您想将某种行为与某种状态结合起来,而这正是对象的用途,因此您可以只编写一个小类并且只实例化一次。

于 2013-02-15T05:54:45.000 回答