python命名空间问题
以下代码a=1deff():a=a+1f()如果在函数中直接打印a正确,但是上面的代码却出现UnboundLocalError异常,请问这是怎么回事?请问为什么可以正常打...
以下代码
a = 1
def f():
a = a+1
f()
如果在函数中直接打印a正确,但是上面的代码却出现UnboundLocalError异常,请问这是怎么回事?
请问为什么可以正常打印,但不能改变其中的值呢? 展开
a = 1
def f():
a = a+1
f()
如果在函数中直接打印a正确,但是上面的代码却出现UnboundLocalError异常,请问这是怎么回事?
请问为什么可以正常打印,但不能改变其中的值呢? 展开
5个回答
展开全部
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作为一个局部变量,没有先声明数值就被引用了,无从查找其值。
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作为一个局部变量,没有先声明数值就被引用了,无从查找其值。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在函数中如果不改变a的值,直接调用,就会自动当成全局变量。
如果改变了值的话,就会自动当成局部变量,所以这时a=a+1就会出错,认为调用了一个没有定义的变量,这时如果要当全书变量用的话必须加global a
它就是这么设计的,应该是为了区分局部变量和全局变量。如果都可以直接修改的话,你就没法知道哪个才是局部变量了,这时如果局部变量和全局变量名字相同就会混乱了。
如果改变了值的话,就会自动当成局部变量,所以这时a=a+1就会出错,认为调用了一个没有定义的变量,这时如果要当全书变量用的话必须加global a
它就是这么设计的,应该是为了区分局部变量和全局变量。如果都可以直接修改的话,你就没法知道哪个才是局部变量了,这时如果局部变量和全局变量名字相同就会混乱了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
对象:一切都是对象,类,实例,函数都是
类:系统内置类型或用class关系字定义的类,如果:int,str
特性:没有听过,是不是指property?
接口:没有这玩意,可以模似
命名空间:以文件名或包含__init__.py的文件夹
内省:是指可以动态的查询对象的类型信息
多态:动态判断和执行子类的方法
运行符载:就是以__xx__这类函数实现的,如果+运算符重载__add__就可以了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果你要调用全局变量a的话,需要加上global
a = 1
def f():
global a
a = a+1
f()
可以改变啊,你没运行一次f,全局变量a就会增一
a = 1
def f():
global a
a = a+1
f()
可以改变啊,你没运行一次f,全局变量a就会增一
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询