Python匿名函数问题
Python循环调用匿名函数产生的问题
Python循环调用匿名函数产生的问题
问题描述
我有三个字典类型变量和一个接收一个字符串参数的函数,
经过如下操作之后,我希望我的三个字典中每个name对应一个这个函数,
但是这样运行后发现所有的函数接收的path字符串全都是最后一个name对应的path
1 | # 有三个字典,字典键值对都为字符串类型 name: path, |
期望结果:
1 | Gui_Dir1 = {name1: path1, name2: path2, name3: path3} # 原本字典变量 |
实际结果:
1 | Gui_Dir1 = {name1: path1, name2: path2, name3: path3} # 原本字典变量 |
问题产生原因:
来自GPT3.5的回答:
这是因为在循环中,lambda 函数中的
path是一个变量的引用,而不是一个新的局部变量。所以在每次循环中,lambda函数都会捕获循环最后一次的path值,导致所有的lambda函数实际上引用同一个path变量。为了解决这个问题,可以在循环内部创建一个新的作用域,使每个
lambda函数都引用自己独立的path变量。可以通过在循环内部定义一个参数默认值来实现这一点。
修改后代码
1 | Gui_Dir1, Gui_Dir2, Gui_Dir3 = {},{},{} |
出现问题2:
1 | # 传入的参数变成了bool类型变量 |
这个问题小明调试了一段时间也没找到原因,如果有大佬找到原因希望留言给我嗷!万分感谢
最终修改(问题解决):
1 | Gui_Dir1, Gui_Dir2, Gui_Dir3 = {},{},{} |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.





