Подтвердить что ты не робот

Использование функции 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, но я не уверен, как с этим бороться.

4b9b3361

Ответ 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))

Это три строки кода вместо одного --- это три строки четкого и очевидного кода вместо импорта некоторого вспомогательного помощника из модуля такого-то-такого. Этот аргумент, вероятно, зависит от вкуса, но он имеет большой вес в зависимости от того, с кем вы разговариваете.