Python中有一个问题:
循环变量泄漏
-
第一种情况
构造一个实际的环境,当连上WiFi的时候,手机才能更新app,下面的是网络环境的判断
可以看到,这里的 x 是一个在for循环的局部变量,按照正常的理解,
在for循环外面调用 x 应该是报错的,
但是在Python中,
for循环里面声明的变量,在for循环结束后,会保留 x 的值。
上面的输出的结果,第一个 x 的值当然是 WiFi,
第二个值就是遍历完列表之后,列表最后一个值4G。
-
第二种情况
那如果我们直接声明一个全局变量呢,最后输出的会是最开始的值吗?
下面的代码只是加了第3行,初始化了一下全局变量 x:
输出的结果:
还是和第一种情况一样,
充分说明了Python中,for循环中声明的临时变量的值会保留下来,
坏处很明显,
一个局部变量没有被销毁,反而保留了下来,习惯其他语言的程序员写起来很别扭,
一个不注意,可能还会有bug,一个后面怎么都不会想到的会出问题的地方,
避免起来很简单,
注意好命名就行,不要随便命名,全局变量和局部变量同名本来也不是个好习惯。
-
语法上的规避方法
下面是Python中列表推导式,在Python3中被优化过,
其实看到下图的红色波浪线,就大概知道,x 在这种情况下,只是一个局部变量了。
输出结果:
显而易见,报错是 x 没有定义,x 已经被当作是局部变量了
- 我们再试一种情况
声明一个全局变量 x,值为WiFi,
输出结果:
输出都是WiFi,第4行的 x 已经没有影响了。
所以平时要注意Python中的一些坑,
Python易用的同时,也有难用的地方。
-
变量
+关注
关注
0文章
613浏览量
28368 -
for
+关注
关注
0文章
44浏览量
15811 -
python
+关注
关注
56文章
4797浏览量
84675
发布评论请先 登录
相关推荐
评论