Использование функции map() с аргументами ключевого слова
Вот цикл, который я пытаюсь использовать для функции map
:
volume_ids = [1,2,3,4,5]
ip = '172.12.13.122'
for volume_id in volume_ids:
my_function(volume_id, ip=ip)
Есть ли способ, которым я могу это сделать? Было бы тривиально, если бы не параметр ip
, но я не уверен, как с этим бороться.
Ответы
Ответ 1
Используйте functools.partial()
:
from functools import partial
mapfunc = partial(my_function, ip=ip)
map(mapfunc, volume_ids)
partial()
создает новый вызываемый, который будет применять любые аргументы (включая аргументы ключевых слов) к завернутой функции в дополнение ко всему, что передается этому новому вызываемому.
Ответ 2
Вот лямбда-подход (не лучше, просто другой)
volume_ids = [1,2,3,4,5]
ip = '172.12.13.122'
map(lambda ids: my_function(ids, ip), volume_ids);
Ответ 3
Это можно сделать легко с пониманием списка.
volume_ids = [1,2,3,4,5]
ip = '172.12.13.122'
results = [my_function(i,ip=ip) for i in volume_ids]
Ответ 4
Как насчет этого?
results = []
for volume_id in volume_ids:
results.append(my_function(volume_id, ip=ip))
Это три строки кода вместо одного --- это три строки четкого и очевидного кода вместо импорта некоторого вспомогательного помощника из модуля такого-то-такого. Этот аргумент, вероятно, зависит от вкуса, но он имеет большой вес в зависимости от того, с кем вы разговариваете.