python - 为什么我无法访问使用 lambda 函数传递的迭代值?
问题描述
我预计会看到“0”值,它代表该迭代的信息,打印到屏幕上。
但是,它只显示了 for 循环的最后一个“i”值,在我的例子中是“2”。
我已经尝试了很长时间来找出答案。在测试过程中,我发现它可能与变量“i”的变化有关,但我仍然不知道如何修复它。
那么如何访问该迭代的 i 值呢?
这是我的代码:
class A:
def __init__(self, func):
self.func = func
def call(self):
self.func()
xs = []
for i in range(3):
x = A(lambda: print(i))
xs.append()
xs[0].call()
我得到的结果:2
我想要的结果:0
解决方案
我修改了你的代码并得到 0 作为输出。
class A:
def __init__(self, func):
self.func = func
def call(self):
self.func()
xs = []
for i in range(3):
y= A(lambda x=i: print(x)) #== changes here
xs.append(y)
xs[0].call()
推荐阅读
- json - 使用flutter和php创建用户登录时解析json数据的类型错误
- python - 如何在 Pandas 中查询字符串
- logging - 如何从 Azure Blob 存储配置 Fluentbit / Fluentd 输入?什么输入类型?
- php - 如何在电报上分享网站上的图像?
- node.js - 无法在节点 js 中从 fb 下载视频
- typescript - 在 TypeScript 中将类型作为函数返回
- javascript - for(var key in object) Javascript 中的条件语句
- c# - 我收到 C# AES 解密“输入数据不是完整块”错误,但仅在解密时出现?
- python - Python 中 PyQt 中的问题 - WebBrowser 项目
- java - 使用一个值作为 Thymeleaf 中另一个值的参数