在刷leetcode的时候,定义全局变量后在函数中调用总是会出现这个错误,一直没搞明白,现在记录一下
问题原因- 变量声明之前未定义
如以下代码段:
def tmp(): print(a)
报错,只需声明一下即可解决
def tmp(): a = 1 print(a)
- 在函数中修改全局变量
a = 0 def tmp(): print(a) a+=1
此时会报错,因为在tmp函数中修改了全局变量a的值,此时,只需加入global声明,即可解决
a = 0 def tmp(): global a print(a) a+=1global和nonlocal的区别
但是,若在函数中声明变量,在函数的子函数中嵌套的修改全局变量,使用global也会报错,未找到变量xxx,因为在子函数中修改父函数声明的变量,需要使用nonlocal声明,如:
class A(self): def tmp1(): a = 0 def tmp2(): global a print(a) a+=1
此时会报错,修改为:
class A(self): def tmp1(): a = 0 def tmp2(): nonlocal a print(a) a+=1
成功运行
PS:若全局变量为list等类型,采用append pop操作不会报错,不需要声明,而int str等类型则需要,在LeetCode中也可以采用__init__的方式将变量作为类属性声明,然后使用。


