0

标题有点误导,但相关。

考虑以下代码:

def add_page_to_index(index, url, content):
    words = content.split()
    for word in words:
        add_to_index(index, word, url)

我想将 for 循环更改为类似于以下内容:

[add_to_index(index, word, url) for word in words]

我很确定上述行实际上不起作用,并且可能会使人们感到恐惧,但是,我认为它给出了我想要实现的目标的要点。理想情况下,我想在这里使用 map() 函数,但我无法看到如何使用 map(),因为 args 'index' 或 'url' 都不会改变(它们不是序列),只有 'word in words' 将为函数提供一个序列。那么我的问题是,如果可能的话,我如何在这里使用地图功能。另外,关于我上面的(可能是可恶的)代码行,我怎样才能使这样的行工作......我猜如果我将它分配给一个名称,我可以将它变成一个列表理解,但这不会在这种情况下真的很有意义。

4

1 回答 1

3

您的行实际上会起作用并且具有正确的副作用,只有代码的意图是错误的,因为列表推导通常用于转换列表,而不是对每个元素应用函数。

那是,

def add_page_to_index(index, url, content):
    [add_to_index(index, word, url) for word in content.split()]

是对您所拥有的东西的有效重新实现,但是,它并不简单,因为没有使用理解的结果。

如果您正在尝试学习如何使用地图功能,那么您可能正在寻找以下内容:

def add_page_to_index(index, url, content):
    words = content.split()
    map(lambda word: add_to_index(index, word, url), words)

但是,如果您只是忽略结果,我会使用您原来的 for 循环。更清楚的是,这项任务是势在必行的,而不是变革性的。

于 2013-09-20T14:56:44.033 回答