Python lambda函数返回元组时报generator object错误如何解决
问题原因
- 你在
print中传入的是生成器表达式(next(x ,t[i]) for t[i] in range(0,len(t))),print不会自动迭代生成器对象,只会直接打印其内存标识,也就是你看到的generator object输出。 - 原有逻辑本身存在多处错误:
next函数使用不符合场景,next用于从迭代器中取下一个值,你传入的第一个参数x是字符串,不是迭代器- 遍历逻辑错误,你需要遍历元组
t的成员,不需要通过索引遍历、也不应该在for循环的左值位置给t[i]赋值
修复方案
调整遍历逻辑,逐一把t的元素和第一个入参x拼接为元组后打印即可,以下是可直接运行的修改后代码:
# 写法1:列表推导式批量执行打印 val_by_vec = lambda x, t=(): [print((x, item)) for item in t] val_by_vec('Raj',((2,"Raj"),(3,"Amalu")))
也可以用生成器解包的写法实现相同效果:
# 写法2:生成器解包后指定分隔符打印 val_by_vec = lambda x, t=(): print(*((x, item) for item in t), sep='\n') val_by_vec('Raj',((2,"Raj"),(3,"Amalu")))
两种写法运行后的输出都符合你的预期:
('Raj', (2, 'Raj')) ('Raj', (3, 'Amalu'))
内容的提问来源于stack exchange,提问作者user16002771
相关产品推荐
相关产品推荐

