veces una texto repite palabras palabra nube lista las funcion frecuencia cuantas contar claves python arguments map-function

una - palabras claves de python



Usando la funciĆ³n map() con argumentos de palabras clave (5)

Aquí está el bucle que estoy tratando de usar la función de map en:

volume_ids = [1,2,3,4,5] ip = ''172.12.13.122'' for volume_id in volume_ids: my_function(volume_id, ip=ip)

¿Hay alguna manera de hacer esto? Sería trivial si no fuera por el parámetro ip , pero no estoy seguro de cómo lidiar con eso.


¿Qué tal esto?

results = [] for volume_id in volume_ids: results.append(my_function(volume_id, ip=ip))

Estas son tres líneas de código en lugar de una, son tres líneas de código claro y obvio en lugar de importar algún asistente de casos especiales del módulo tal y tal. Este argumento es probablemente una cuestión de gusto, pero tiene mucho peso dependiendo de con quién hable.


Aquí hay un enfoque lambda (no mejor, solo diferente)

volume_ids = [1,2,3,4,5] ip = ''172.12.13.122'' map(lambda ids: my_function(ids, ip), volume_ids);


En general, se puede usar el mapa para pasar palabras clave a una función envolviendo esa función en algo que descomprime un diccionario, y luego pasando un iterable de diccionarios para mapear. Ejemplo:

from itertools import product volume_ids = [1,2,3,4,5] volume_ids = (("volume_id", volume_id) for volume_id in volume_ids) ips = [("ip", ''172.12.13.122'')] kwargs_iterable = map(dict, product(volume_ids, ips)) result = map(lambda kwargs: my_function(**kwargs), kwargs_iterable)

Sin embargo, para su caso especial, una solución más simple sería:

map(my_function, volume_ids, [ip]*len(volume_ids))

Esto es conciso y no se basa en ninguna importación. Otra posibilidad podría ser combinar producto y starmap de itertools:

from itertools import product, starmap ips = [ip] starmap(my_function, product(volume_ids, ips))

Esto generaliza muy bien la configuración con más de una dirección IP, o más de dos variables.


Esto se puede hacer fácilmente con una lista de comprensión.

volume_ids = [1,2,3,4,5] ip = ''172.12.13.122'' results = [my_function(i,ip=ip) for i in volume_ids]


Utilice functools.partial() :

from functools import partial mapfunc = partial(my_function, ip=ip) map(mapfunc, volume_ids)

partial() crea un nuevo invocable, que aplicará cualquier argumento (incluidos los argumentos de palabras clave) a la función ajustada, además de lo que se pase a ese nuevo invocable.