我在 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/