我开始学习如何以函数式的方式使用Python,但我遇到了一个无法解决的问题。
我有以下代码(部分取自这个问题),它完全符合我的要求:
url = "www.testpage.com/"
def gen_url(prefix, suffix, places=3):
pattern = "{}{{:0{}d}}{}".format(prefix, places, suffix)
for i in count(1):
yield pattern.format(i)
list_of_urls = []
for c in "xyz":
g = gen_url(url+c,"&show=more")
for x in range(2):
list_of_urls.append(next(g))
而它生成的结果类似于这样:
www.testpage.com/x001&show=more
www.testpage.com/y001&show=more
www.testpage.com/z001&show=more
www.testpage.com/x002&show=more
www.testpage.com/y002&show=more
www.testpage.com/z002&show=more
如您所见,它停在002是因为:
...
for x in range(2):
list_of_urls.append(next(g))
...
每次我都从一个空列表开始,使用for循环并填充它。我正在尝试以这种方式使用map,并摆脱for循环:
urls = map(lambda x:next(gen_url(url+x,"&show=more")),"xyz")
它可以正常工作。但是我只能到达001。假设我想要到达002;我尝试了以下内容,但是它不起作用:
urls = imap((lambda x:next(gen_url(url+x,"&show=more")),"xyz"),2)
这个也不起作用:
urls = map((lambda x:next(gen_url(url+x,"&show=more")),"xyz"),repeat(2))
有人能向我解释一下如何在这种情况下正确使用迭代器吗?