如何使用Lambda表达式打印字符串列表?
为什么
map(lambda x: print(x), listing)没有输出? 嘿,这绝对是Python新手刚接触map和lambda时会踩的小坑,我当初也懵过!
问题出在map函数的特性上:它返回的是一个惰性迭代器。也就是说,它不会立刻执行你传入的lambda函数,只是“准备好”了要执行的逻辑,只有当你主动去遍历这个迭代器的时候,才会逐个调用lambda里的print(x)。
你之前用普通for x in listing: print(x)能正常工作,是因为for循环会主动迭代列表里的每一个元素,直接触发了打印操作;但map只是给你一个“待执行”的对象,没被遍历的话就啥也不会做。
解决方法有这几种:
把map对象转成列表:强制触发迭代
listing = ["a", "b", "c"] list(map(lambda x: print(x), listing))不过要注意,因为
print()返回的是None,所以这个列表里会全是None,但这不影响打印效果。用for循环遍历map对象:更清晰的写法,因为我们不需要返回值
listing = ["a", "b", "c"] for _ in map(lambda x: print(x), listing): pass额外提一句:如果只是为了打印列表元素,其实用普通for循环或者列表推导式(
[print(x) for x in listing])会更易读,但既然你是在学习lambda和map,那搞懂惰性迭代器的特性就非常重要啦!
内容的提问来源于stack exchange,提问作者Toby
相关产品推荐
相关产品推荐

