无法解决为什么函数的行为方式如何?

时间:2014-08-26 14:19:05

标签: python

我们正在构建一个Web爬虫,其任务是创建一个输出关键字和附加到关键字的URL的函数。关键字不能在列表中重复。这是最终的代码:

index = []
def add_to_index(index,keyword,url):
    for entry in index:
        if entry[0] == keyword: 
            entry[1].append(url) 
                return
    index.append([keyword,[url]])    

输入:

  

add_to_index(指数, 'udacity', 'http://udacity.com')

     

add_to_index(指数, '计算', 'http://acm.org')

     

add_to_index(指数, 'udacity', 'http://npr.org')

这些是正确的结果:

[['udacity', ['http://udacity.com', 'http://npr.org']], 

['computing', ['http://acm.org']]]

我真的很难理解这个功能。第一件事是它在函数中说不重复keyword

据我所知,语句index.append([keyword,[url]])应该将keyword Udacity两次添加到index列表中,如果我将上述语句添加到事实中它确实添加了两次for循环。所以,我真的不明白它在for循环中指定不在列表中重复keyword的位置?

该函数似乎在说:如果url匹配,则将index附加到keyword列表,如果不匹配,则跳出循环并添加{{1}和它的keyword

第二件事我真的不明白为什么url语句位于index.append([keyword,[url]])循环的底部,而不是它之上。如果我把它放在顶部,它会给我完全不同的结果。如图所示:

for

为什么呢?当语句在index = [] def add_to_index(index,keyword,url): index.append([keyword,[url]]) for entry in index: if entry[0] == keyword: entry[1].append(url) return [['udacity', ['http://udacity.com', 'http://udacity.com', 'http://npr.org']], ['computing', ['http://acm.org', 'http://acm.org']], ['udacity', ['http://npr.org']]] 循环之后,由于for为空,因此不会返回任何内容。所以,我不明白为什么把声明置于顶部不会产生相同的结果?

我真的很难理解这一点,我完全是空白。任何帮助将非常感激。非常感谢! :)

1 个答案:

答案 0 :(得分:3)

return语句导致函数在找到匹配关键字后退出。这意味着只有在函数无法在集合中找到匹配的关键字时才能执行index.append([keyword,[url]])

index = []
def add_to_index(index,keyword,url):
    for entry in index:
        if entry[0] == keyword: 
            # We have found a matching keyword, so add the url to list of urls and exit the function
            entry[1].append(url) 
            return
    # We didn't find a matching keyword so add a new keyword, url list to the collection
    index.append([keyword,[url]])