python命名空间问题

以下代码a=1deff():a=a+1f()如果在函数中直接打印a正确,但是上面的代码却出现UnboundLocalError异常,请问这是怎么回事?请问为什么可以正常打... 以下代码
a = 1
def f():
a = a+1
f()
如果在函数中直接打印a正确,但是上面的代码却出现UnboundLocalError异常,请问这是怎么回事?
请问为什么可以正常打印,但不能改变其中的值呢?
展开
 我来答
籍好洁彤山
2020-03-24 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:27%
帮助的人:880万
展开全部
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
这两个属性
名扬剑仙
2011-06-07 · TA获得超过222个赞
知道小有建树答主
回答量:227
采纳率:0%
帮助的人:169万
展开全部
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作为一个局部变量,没有先声明数值就被引用了,无从查找其值。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Gerald_Bond
2011-06-06 · TA获得超过1003个赞
知道小有建树答主
回答量:590
采纳率:0%
帮助的人:601万
展开全部
在函数中如果不改变a的值,直接调用,就会自动当成全局变量。
如果改变了值的话,就会自动当成局部变量,所以这时a=a+1就会出错,认为调用了一个没有定义的变量,这时如果要当全书变量用的话必须加global a
它就是这么设计的,应该是为了区分局部变量和全局变量。如果都可以直接修改的话,你就没法知道哪个才是局部变量了,这时如果局部变量和全局变量名字相同就会混乱了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kycs5mtp0
2011-06-08 · TA获得超过519个赞
知道小有建树答主
回答量:615
采纳率:0%
帮助的人:382万
展开全部

对象:一切都是对象,类,实例,函数都是
类:系统内置类型或用class关系字定义的类,如果:int,str
特性:没有听过,是不是指property?
接口:没有这玩意,可以模似
命名空间:以文件名或包含__init__.py的文件夹
内省:是指可以动态的查询对象的类型信息
多态:动态判断和执行子类的方法
运行符载:就是以__xx__这类函数实现的,如果+运算符重载__add__就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
蒲公英随风飘舞哈
2011-06-05 · TA获得超过1431个赞
知道小有建树答主
回答量:324
采纳率:0%
帮助的人:522万
展开全部
如果你要调用全局变量a的话,需要加上global
a = 1
def f():
global a
a = a+1
f()

可以改变啊,你没运行一次f,全局变量a就会增一
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式