local variable 'xxx' referenced before assignment

         
a=3
def t2():
    print "ggg"
    print a
    a=4

def t3(vv):
    if vv:
        a=4
    else:
        print "haha"
    return a

t2()
t3(0)#虽然t3(1)不会报错,但是这个函数已经失去了判断的意义了,因为我们要的是不管判断语句执行哪一句都不会报错。

 以上两个函数报的错误全是,本地变量在未分配前引用了

调用这个函数时,Python解释器会先生成命名空间。当发现有条语句对a进行了赋值操作,pytgon就认为这个a是局部变量,就会把a这个变量添加到自己的局部命名空间。任何变量,都要先赋值然后才能引用,否则报错。就像下面这个

print (sss)
sss=32

 

 

当然了,可以事先加global关键字声明函数内的变量是全局变量

 

 

关于局部变量的说明,请见https://www.cnblogs.com/windlaughing/archive/2013/05/26/3100362.html

posted @ 2018-05-04 07:53  扫驴  阅读(1827)  评论(0)    收藏  举报