Python变量scope正确理解含义是什么,pythonscope,globe = 10de
Python变量scope正确理解含义是什么,pythonscope,globe = 10de
globe = 10def rdOnly(): print globe big = 50 def rdInner(): print globe print big rdInner()rdOnly()def wrOnly(): global globe print globe globe = 100 print globe big = 50 def wrInner(): global globe print globe globe = 200 print globe print big big = 500 print big wrInner()wrOnly()
这段代码中, 只读代码始终不会出错, 但是一旦对上层变量赋值或修改, 就会报错, 全局变量可以通过在每一层声明其变量全局性解决, 上层函数的局部变量就没有办法处理了?
求问这种问题如何解决, 以及为什么会发生这种问题, 内在机理是什么?即为什么只读时引用上层变量不会保存, 而修改时就会出现reference before define的问题?
python在执行函数之前,会预先处理函数。在这个过程中,会判断函数里的变量是局部变量,还是全局变量。如果出现赋值语句,比如globe = 200,它就认为globe是这个函数里的局部变量(前提是没有global globe),而不管这个语句出现在哪个位置,之后执行函数时,如果对globe 的操作出现在赋值语句之前,它会认为你这个局部变量还没有定义就开始使用,所以会出现reference before define的问题。而如果没有赋值语句时,它就会认为这个变量的定义不在这个函数里面,之后一切按闭包处理,在你这个例子里,它会向上找globe,找到了就可以正常使用。
解决的话,在每个函数重新声明一个变量,把上层的变量的值赋给它。
编橙之家文章,
相关内容
- 新手请问Python函数参数值传递问题,python函数,现在有两
- 如何用python实现openSSL的PHP代码?,pythonopenssl,function ge
- 我的网站爬虫python代码为什么不能正常运行,哪里写错了
- Python2.7 GBK阿拉伯文字转换问题,,简单说,想问如何把
- Py模块rrdtool导入问题时报undefined symbol: rrd_flushcached?,
- python mysql Commands out of sync相关的问题,pythoncommands,py
- Python能做C/S.exe计算器程序吗?,pythons.exe,大家好,我是
- python3编辑器sublime text 2输出中文字符UnicodeEncodeError,
- Python pylo文件发送怎么操作,pythonpylo文件发送,我在用
- python文档中源码看不懂求大神指导,python大神,在查看文
评论关闭