python - 将不可迭代变量传递给使用 map() 评估的函数

标签 python map parallel-processing ipython

我在 python 中工作并尝试转换具有此结构的函数:

def func(g,h,iterable):
 return iterable*(g+h)

for iterable in range(20):
  print func(2,3,iterable)

进入映射函数:

def func(g,h,iterable):
 return iterable*(g+h)

print map(func,2,3,range(20)) #does not work...

我遇到的问题是通过 map() 函数传递常量,目前我不知道该怎么做。

我想要这个结构,这样我就可以轻松地使用 Ipython 并行工具。

假设:

  • 所有可迭代对象的实际函数完成需要大约 1.5 小时(因此需要使用并行 map() 函数
  • 函数复杂,无法使用列表理解

本质上,如果不是很明显的话,我是一名 MATLAB 程序员,正在转向 python 并寻找 matlab 中 parfor 函数的良好替代品。

最佳答案

一方面,如果您将函数映射到 range 上,则没有参数是可迭代的。

对于您的问题,您可以使用 functools.partial 将位置参数(从左到右)绑定(bind)到函数。

def func(g,h,i):
    return i*(g+h)

print map(functools.partial(func, 2,3), range(20))

# [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]

要绑定(bind)任何位置参数,请使用 hkpeprah 的回答中所述的 lambda 表达式。

关于python - 将不可迭代变量传递给使用 map() 评估的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16924469/

相关文章:

ios - 从任何位置到我当前位置获取 ETA(预计到达时间)的正确方法是什么

c++ - 为什么只有非常量映射提供类似关联数组的直接元素检索?

Python:并行化 GPU 和 CPU 工作

C++11 并行化 : bottleneck in Armadillo's set_seed_random()

c++ - (Qt C++)暂时 “disable” 2d map 中的一个键吗?

c# - 并行 C# 线程性能问题

python - 将列值分组在一起

python - 正则表达式查找下划线和句点后的日期格式

python - 为什么它找不到我的 celery 配置文件?

python - Django:何时使用多个应用程序