Devo retornar iteradores ou objetos mais sofisticados?

5

Digamos que eu tenha uma função que crie uma lista de objetos. Se eu quiser devolver um iterador, terei que return iter(a_list) . Devo fazer isso ou apenas retornar a lista como está? Minha motivação para retornar um iterador é que isso manteria a interface menor - que tipo de contêiner eu crio para coletar os objetos é essencialmente um detalhe de implementação

Por outro lado, seria um desperdício se o usuário da minha função tivesse que recriar o mesmo contêiner do iterador, o que seria ruim para o desempenho.

    
por Erik 27.05.2012 / 23:07
fonte

3 respostas

6

Retorna a lista em si. Isso é bastante eficiente (já que uma cópia não é feita). Se o chamador quiser um iterador, ele sempre pode chamar iter() .

O fato de sua interface retornar um determinado tipo de objeto não é realmente um grande problema no Python; a tipagem de pato faz com que os tipos exatos de objetos não sejam importantes.

    
por 28.05.2012 / 00:36
fonte
2

A menos que você tenha a necessidade de percorrer a lista várias vezes, eu provavelmente seria um gerador . Como uma preferência pessoal, tenho a tendência de favorecer geradores a listas, pois a lista inteira não é mantida na memória. É claro que, se você não está lidando com um grande volume de dados, não importa qual caminho você seguirá.

    
por 28.05.2012 / 07:42
fonte
0

Parece que retornar um iterador só faz sentido se a coleção subjacente não deve ser modificada ou consultada de outra maneira, e você não quer que a coleção subjacente seja repetida várias vezes sem que o chamador obtenha um novo iterador. Eu posso estar perdendo alguns pontos mais finos do Python, embora eu esteja pensando sobre isso em termos dos iteradores do Java.

    
por 04.06.2012 / 03:11
fonte