for循环中的局部变量引起的是什么问题

描述

Python中有一个问题:

循环变量泄漏

  • 第一种情况

构造一个实际的环境,当连上WiFi的时候,手机才能更新app,下面的是网络环境的判断

python

可以看到,这里的 x 是一个在for循环的局部变量,按照正常的理解,

在for循环外面调用 x 应该是报错的,

但是在Python中,

for循环里面声明的变量,在for循环结束后,会保留 x 的值。

python

上面的输出的结果,第一个 x 的值当然是 WiFi,

第二个值就是遍历完列表之后,列表最后一个值4G。

  • 第二种情况

那如果我们直接声明一个全局变量呢,最后输出的会是最开始的值吗?

下面的代码只是加了第3行,初始化了一下全局变量 x:

python

输出的结果:

python

还是和第一种情况一样,

充分说明了Python中,for循环中声明的临时变量的值会保留下来,

坏处很明显,

一个局部变量没有被销毁,反而保留了下来,习惯其他语言的程序员写起来很别扭,

一个不注意,可能还会有bug,一个后面怎么都不会想到的会出问题的地方,

避免起来很简单,

注意好命名就行,不要随便命名,全局变量和局部变量同名本来也不是个好习惯。

  • 语法上的规避方法

下面是Python中列表推导式,在Python3中被优化过,

其实看到下图的红色波浪线,就大概知道,x 在这种情况下,只是一个局部变量了。

python

输出结果:

python

显而易见,报错是 x 没有定义,x 已经被当作是局部变量了

  • 我们再试一种情况

声明一个全局变量 x,值为WiFi,

python

输出结果:

python

输出都是WiFi,第4行的 x 已经没有影响了。

所以平时要注意Python中的一些坑,

Python易用的同时,也有难用的地方。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分