python局部变量和全局变量的问题
怪我咯
怪我咯 2017-04-17 17:18:36
[Python讨论组]

fengfeng@fengfeng-Lenovo-XiaoXin-700-15ISK:~$ cat -n test1.py
1 a = 1
2 def do_something():
3 print a
4
5 do_something()
fengfeng@fengfeng-Lenovo-XiaoXin-700-15ISK:~$ python test1.py
1
fengfeng@fengfeng-Lenovo-XiaoXin-700-15ISK:~$ cat -n test2.py
1 a = 1
2 def do_something():
3 print a
4 a = 3
5
6 do_something()
fengfeng@fengfeng-Lenovo-XiaoXin-700-15ISK:~$ python test2.py
Traceback (most recent call last):
File "test2.py", line 6, in <module>
do_something()
File "test2.py", line 3, in do_something
print a

UnboundLocalError: local variable 'a' referenced before assignment

为什么test2.py给a赋了一个值就出错了呢?

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(1)
迷茫

当执行一个函数do_something引用变量a的时候,python会首先查找函数体内是否有这个变量的声明(python的变量声明和赋值是混在一起的),除非显式用global限定,这个查找的范围是整个函数体内,而不仅仅是引用这个变量的print a语句的前面。有两种情况:

  1. python在这个函数内找到了变量a的声明。那么a就被视为一个局部变量。

  2. python没有在函数体内找到。那么就到全局去找,找到了就视为全局变量,还找不到就出错了。

对于test1.py而言,函数内没有a的声明,就用全局变量,不会出错。

对于test2.py而言,函数内找到了a的声明,尽管是在print a的后面。但是它还没有初始值,试图引用它的值就会出错。

参考:http://www.codesec.net/view/185772.html

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号