python命名空间问题

以下代码
a = 1
def f():
a = a+1
f()
如果在函数中直接打印a正确,但是上面的代码却出现UnboundLocalError异常,请问这是怎么回事?
请问为什么可以正常打印,但不能改变其中的值呢?

createplot.ax1
是表示:
ax1
是函数
createplot
的一个属性,这个可以在函数里面定义也可以在函数定义后加入也可以
example:
def
fun():
fun.x
=1
当你在python的命令窗口下,运行一次fun()后,x
就是
fun()的一个属性,你在命令窗口下输入
fun.x
后面会显示
1
也可以

函数定义完后加入
属性

fun.y
=
2,在使用
dir(fun),你就会发现fun有
x,y
这两个属性
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-06-07
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
f()
File "<pyshell#6>", line 2, in f
a = a+1
UnboundLocalError: local variable 'a' referenced before assignment
首先,在f()这个函数里,a是个局部变量。原因:没加global a这一句。
然后,函数内容一上来就调用了a本身的值。对于python来说,它这时还不知道a是什么呢。
所以,这个错误的意思是说,a作为一个局部变量,没有先声明数值就被引用了,无从查找其值。本回答被提问者采纳
第2个回答  2011-06-06
在函数中如果不改变a的值,直接调用,就会自动当成全局变量。
如果改变了值的话,就会自动当成局部变量,所以这时a=a+1就会出错,认为调用了一个没有定义的变量,这时如果要当全书变量用的话必须加global a
它就是这么设计的,应该是为了区分局部变量和全局变量。如果都可以直接修改的话,你就没法知道哪个才是局部变量了,这时如果局部变量和全局变量名字相同就会混乱了。
第3个回答  2011-06-08

对象:一切都是对象,类,实例,函数都是
类:系统内置类型或用class关系字定义的类,如果:int,str
特性:没有听过,是不是指property?
接口:没有这玩意,可以模似
命名空间:以文件名或包含__init__.py的文件夹
内省:是指可以动态的查询对象的类型信息
多态:动态判断和执行子类的方法
运行符载:就是以__xx__这类函数实现的,如果+运算符重载__add__就可以了
第4个回答  2011-06-05
如果你要调用全局变量a的话,需要加上global
a = 1
def f():
global a
a = a+1
f()

可以改变啊,你没运行一次f,全局变量a就会增一
相似回答