加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 为什么在操作完成后可以访问列表推导变量?

发布时间:2020-12-20 12:37:44 所属栏目:Python 来源:网络整理
导读:参见英文答案 List comprehension rebinds names even after scope of comprehension. Is this right?????????????????????????????????????5个 作为另一种体验的一部分,我在列表理解中遇到了一个问题.为了简单起见,如果我尝试以下代码: m = [ k**2 for k i
参见英文答案 > List comprehension rebinds names even after scope of comprehension. Is this right?????????????????????????????????????5个
作为另一种体验的一部分,我在列表理解中遇到了一个问题.为了简单起见,如果我尝试以下代码:

m = [ k**2 for k in range(7)]
print m
[0,1,4,9,16,25,36]
print k
6

>我的问题是如何在列表理解之外获取k的值?
>为什么k不是垃圾收集?
>这不是内存泄漏吗?

解决方法

不,这不是内存泄漏,因为通常会定义该术语.在Python 2.x中,列表推导不是一个单独的范围,因此您在列表推导中使用的变量位于包含它的函数的范围内.通过在列表理解之前设置k,您可以轻松地看到这一点; listcomp会破坏它.

因为存在有效引用,所以对象k指向(正确)不是垃圾收集.

在Python 3.x中,这已经改变了;所有理解都会创建自己的范围,并且不会“泄漏”到封闭范围内.

在Python 2.x中,生成器表达式确实有自己的作用域,所以如果你想要那个行为,就这样写它:

m = list(k**2 for k in range(7))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读