Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用带有关键字参数的map()函数_Python_Arguments_Map Function - Fatal编程技术网

Python 使用带有关键字参数的map()函数

Python 使用带有关键字参数的map()函数,python,arguments,map-function,Python,Arguments,Map Function,下面是我试图在其上使用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参数,这将是微不足道的,但我不知道如何处理它。使用: partial() 这个怎么样 results = [] for volume_id in volume_ids: results.appen

下面是我试图在其上使用
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
参数,这将是微不足道的,但我不知道如何处理它。

使用:

partial()

这个怎么样

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

这是三行代码,而不是一行——这是三行清晰明了的代码,而不是从某某模块导入一些特殊的案例助手。这个论点可能是一个品味的问题,但它有很大的分量,这取决于你与谁交谈。

这可以通过列表理解轻松完成

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

通常,可以使用map将关键字传递给函数,方法是将该函数包装到解压字典的内容中,然后将一组字典传递给map。例如:

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)
但是,对于您的特殊情况,更简单的解决方案是:

map(my_function, volume_ids, [ip]*len(volume_ids))
这是简洁的,不依赖任何进口。另一种可能是将itertools的产品和星图结合起来:

from itertools import product, starmap

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

这很好地概括了具有多个ip地址或两个以上变量的设置。

部分更快,lambdas支持无序参数问题是我们想要避免for循环为什么?因为它更清晰?或者是因为一些误解,比如“for循环在Python中很慢”?是的,我想说的是,它确实更清晰、更Pythonish,而map函数是为了执行最慢的迭代。此外,我们需要返回一个列表,所以map对我们来说比写更多的行来编码循环更好,因为这有副作用。您正在分配一组可能不需要的内存(OP没有指定)。
map(my_function, volume_ids, [ip]*len(volume_ids))
from itertools import product, starmap

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