É apropriado usar map (func, list) para transformar objects sem retornar uma lista?

Eu tenho uma questão de “melhores práticas” aqui. Eu estou usando o mapa de uma forma que não pode ser destinado a ser usado – usando os elementos de uma lista para alterar o estado de um object diferente. a saída da lista final não é realmente alterada. Isso é apropriado?

Por exemplo:

class ToBeChanged(object): def __init__(self): self.foo_lst = [1,2,3,4] def mapfunc(self, arg): if arg in ['foo', 'bar']: self.foo_lst.append(arg) else: pass test = ToBeChanged() list_to_map = [1,2,37,'foo'] map(lambda x: test.mapfunc(x), list_to_map) 

Não é apropriado. No Python 2, você estará criando uma nova lista com o mesmo tamanho de list_to_map e descartando-a imediatamente; desperdício! E o lambda ainda torna mais complicado.

Melhor usar um loop for:

 for x in list_to_map: test.mapfunc(x) 

Mais conciso e legível.

E se você ainda estiver pensando em usar isso no Python 3 (forçando o object preguiçoso a ser avaliado de alguma forma), considere aqueles que manterão seu código; map dá a impressão de que você deseja criar um novo iterável na lista.

mapa é o pior.

Porque se você tentou rodar o código em python3 ele nem executaria as chamadas já que no mapa python3 é preguiçoso.

Em qualquer caso, tanto o mapa de chamada como uma compreensão de lista são expressões e expressões devem ser tão livres de efeitos colaterais quanto possível, sua finalidade é retornar um valor.

Então, se você não tem um valor para retornar, deve usar apenas as instruções simples: ou seja, explícito para