Funcional agregar / extender

Los métodos de append y extend en Python no son funcionales por naturaleza, modifican el destinatario y devuelven None .

¿Existe una forma alternativa de hacer lo que hacen estos métodos y obtener una nueva lista como valor devuelto?

Considera este ejemplo:

 def myfun(first, *args): for elem in [first].extend(args): print elem 

Obviamente, esto no funcionará.

¿Hay una manera de construir una nueva lista “en su lugar”, en lugar de tener que escribir lo siguiente?

 def myfun(first, *args): all_args = list(first) all_args.extend(args) for elem in all_args: print elem 

Gracias.

 >>> def append(lst, elem): ... return lst + [elem] ... >>> append([1, 2, 3], 4) [1, 2, 3, 4] >>> def extend(lst1, lst2): ... return lst1 + lst2 ... >>> extend([1, 2], [3, 4]) [1, 2, 3, 4] 

¿Es eso lo que querías?

También puede definir su propio tipo, que devuelve la lista en estas operaciones, además de cambiar:

 >>> class MyList(list): ... def append(self, x): ... super(MyList, self).append(x) ... return self ... def extend(self, lst): ... super(MyList, self).extend(lst) ... return self ... >>> l = MyList([1, 2, 3]) >>> l.append(4) [1, 2, 3, 4] >>> l.extend([5, 6, 7]) [1, 2, 3, 4, 5, 6, 7] >>> l [1, 2, 3, 4, 5, 6, 7] 

Puedes reescribir eso como:

 [first] + args