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