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的值? 解决方法
不,这不是内存泄漏,因为通常会定义该术语.在Python 2.x中,列表推导不是一个单独的范围,因此您在列表推导中使用的变量位于包含它的函数的范围内.通过在列表理解之前设置k,您可以轻松地看到这一点; listcomp会破坏它.
因为存在有效引用,所以对象k指向(正确)不是垃圾收集. 在Python 3.x中,这已经改变了;所有理解都会创建自己的范围,并且不会“泄漏”到封闭范围内. 在Python 2.x中,生成器表达式确实有自己的作用域,所以如果你想要那个行为,就这样写它: m = list(k**2 for k in range(7)) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |