此代码:
my_num = 0
def my_func():
my_num = my_num + 1
my_func()
导致以下错误:
回溯(最近一次调用):文件"main.py",第 5 行,在 my_func() 文件 "main.py",第 4 行,my_func my_num = my_num + 1 UnboundLocalError:赋值前引用的局部变量"my_num">
为什么解释器不将表达式读作:
my_num = 0 + 1
因为您可以在不做任何特殊操作的情况下读取全局变量的值,但除非您使用global
关键字,否则不会写入它们。
在这一行中my_num = my_num + 1
您正在尝试读取和写入全局变量。由于您没有指定my_num
是函数中具有global my_num
的全局变量,因此解释器将赋值的左侧视为新的局部变量,因此右侧变量没有任何意义。
函数中赋值的任何值都被视为局部变量,除非存在显式global
语句。从文档中:
将对象分配给单个目标以递归方式定义为 遵循。
如果目标是标识符(名称):
- 如果名称未出现在
global
或nonlocal
语句中 当前代码块:名称绑定到当前 本地命名空间。
您需要将my_num声明为全局:
def my_func():
global my_num
my_num = my_num + 1