0

I am wondering how I should use a nested for loop to improve the readability of this function. Perhaps I could use a nested for loop for tags_files =?

def search_repotag_for_file(search_filepath, repo):
    '''Goes through all tags, all files to find a github file entity
       which matches the search_filepath we are looking for'''
    all_tags = (tag for tag in repo.tags)
    tags_files = ((tag, file_ent) for tag in all_tags for file_ent in tag.commit.tree.traverse())
    matches = (tup for tup in tags_files if tup[1].path == search_filepath)
    return matches
PandasRocks
  • 1,609
  • 1
  • 10
  • 12

1 Answers1

5

Let me rewrite your function for you:

def search_repotag_for_file(search_filepath, repo):
    for tag in repo.tags:
        for file_ent in tag.commit.tree.traverse():
            if file_ent.path == search_filepath:
                yield (tag, file_ent)

The keyword you are looking for is yield

Guillaume
  • 5,497
  • 3
  • 24
  • 42