我想像下面的代码一样使用map
创建一批目录,但是似乎失败了。请你帮助我好吗?
import os
dir_list = ['./aaa', './bbb']
map(os.makedirs, dir_list)
我尝试[os.makedirs(i) for i in dir_list]
并成功了,但是我真的想知道为什么map
无法工作。
答案 0 :(得分:1)
在Python 3中,map
返回一个生成器,该生成器被延迟计算。这意味着在迭代地图对象之前,os.mkdirs
的每个元素都不会被调用。
这很重要:dir_list
和您所显示的列表理解都不打算像这样使用。它们将用于将一个序列转换为另一个序列。它们不是不是旨在用于执行功能的功能(例如创建目录)。
只写一个简单的循环就不要变得聪明:
map
这是正确的,Python式的,可读的和可维护的。
答案 1 :(得分:0)
正如@乔纳森·赛义德(Jonathon Said)所说: 在Python 3中,map返回一个生成器,该生成器被延迟计算。这意味着,直到对map对象进行迭代,才会在dir_list的每个元素上调用os.mkdirs。
所以您需要遍历地图对象
您可以进行此破解:
list(map(os.makedirs, dir_list))