¿Es apropiado usar map (func, list) para transformar objetos sin devolver una lista?

Tengo una pregunta de “mejores prácticas” aquí. Estoy usando el mapa de una manera que no puede usarse, usando los elementos de una lista para cambiar el estado de un objeto diferente. La salida final de la lista no se cambia realmente. ¿Es esto apropiado?

Por ejemplo:

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) 

No es apropiado. En Python 2, list_to_map una nueva lista de la misma longitud que list_to_map y la descartará de inmediato; ¡residuos! Y la lambda incluso lo hace más complicado.

Mejor usar un bucle for:

 for x in list_to_map: test.mapfunc(x) 

Más conciso y legible.

Y si aún está pensando en usar esto en Python 3 (forzando que el objeto perezoso sea ​​evaluado de alguna manera), considere a quienes mantendrán su código; map da la impresión de que desea crear un nuevo iterable de la lista.

El mapa es lo peor.

Porque si intentaste ejecutar el código en python3, ni siquiera realizaría las llamadas, ya que en python3 map es perezoso.

En cualquier caso, tanto el mapa de llamada como una lista-comprensión son expresiones y las expresiones deben ser tan libres de efectos secundarios como sea posible, su propósito es devolver un valor.

Entonces, si no tiene un valor para devolver, solo debe usar las declaraciones simples: es decir, explícito para