您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python中的奇怪的关闭行为

python中的奇怪的关闭行为

闭包不是指 变量 ,而是 范围 。由于i范围内的最后一个值为‘3’,因此所有三个闭包均返回相同的值。要“锁定”变量的当前值,只需为其创建一个新的作用域:

def get() : return [ (lambda x: lambda: x)(i) for i in [ 1, 2, 3 ] ]
for f in get() : print( f() )
@H_403_11@
 

          

解决方法

我有以下简单代码:

def get():
    return [lambda: i for i in [1,2,3]]

for f in get():
    print(f())

正如我的python知识所期望的那样,输出为3-整个列表将包含的最后一个值i。但是,这在内部如何运作?

AFAIK,python变量只是对对象的引用,因此第一个闭包必须包含对象的第一个i引用-并且此对象肯定是1,而不是3
O_O。python闭包如何将变量本身而不是对象作为变量引用的对象?它是否将变量名另存为纯文本,一些“对变量的引用”或什么?

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!
def get():
    return [lambda: i for i in [1,2,3]]

for f in get():
    print(f())

我有以下简单代码:

正如我的python知识所期望的那样,输出为3-整个列表将包含的最后一个值i。但是,这在内部如何运作?

AFAIK,python变量只是对对象的引用,因此第一个闭包必须包含对象的第一个i引用-并且此对象肯定是1,而不是3
O_O。python闭包如何将变量本身而不是对象作为变量引用的对象?它是否将变量名另存为纯文本,一些“对变量的引用”或什么?

python 2022/1/1 18:52:40 有321人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶