It is too complicated to have a mutable iterable returned. But it is fine to return an immutable iterable with metadata properties. The tuple solutions look a little ugly and unintuitive to me.  What about this:

```python
class IterableResult(object):
    """ An iterable result returned from a browse method, with metadata attached """

    def __init__(self, returned_items, number_returned, total_matches, update_id):
        self.returned_items = returned_items 
        self.number_returned = number_returned
        self.total_matches = total_matches
        self.update_id = update_id
        
    def __iter__(self):
        return iter(self.returned_items)

# Then return an instance of this class from each search method, like this:                
def get_playlists(....):
    ...
    result = IterableResult(['first', 'second', 'third'], 3, 7, 0)
    return result

>>> playlists = get_playlists( .... )
>>> for i in playlists:
...    print i
first
second
third

# or, if you want a list    
>>> print list(playlists)
['first', 'second', 'third']
# or
>>> print playlists.returned_items
['first', 'second', 'third']
    
# and if you want to access the search metadata
>>> print playlists.number_returned
3
>>> print playlists.total_matches
7