如何从列表中传递一个参数,在Python中的内置函数map()中传递另一个参数?

pra*_*shu 3 python

在Python中,可以foo()使用内置函数将函数应用于列表的每个元素,map()如下所示:

def foo(x):
  return x*x

print map(foo, [1, 2, 3, 4])
Run Code Online (Sandbox Code Playgroud)

这将打印出人们可以猜到的:1 4 9 16.

让我们说该函数foo()现在接受两个参数而不是一个,并定义如下:

def foo(x, y):
  return x+y
Run Code Online (Sandbox Code Playgroud)

在这种情况下,x是列表的元素,y是某个数字,对于整个列表是相同的.在这种情况下我们如何使用map(),以便foo()应用于列表的每个元素,同时采用另一个参数y对每个元素都相同?

我希望能够做到这样的事情:

print map(foo(:, 5), [1, 2, 3, 4])
Run Code Online (Sandbox Code Playgroud)

应该给我:6 7 8 9.

在Python中有可能吗?对于添加'y'到所有元素的这个特定示例,可以有替代方案.但我正在寻找一个可以使用的答案map().

Roc*_*key 6

您可以使用lambda函数.这被视为一个普通函数,其x值是迭代器的参数,x+5在这种情况下返回值.

>>> def foo(x, y)
...   return x + y
...
>>> l = [1, 2, 3, 4]
>>> map(lambda x: foo(x, 5), l)
[6, 7, 8, 9]
Run Code Online (Sandbox Code Playgroud)

为了记录,@ PaoloMoretti在我面前有这个:)


Joe*_*ett 5

一种方法是functools.partial:

>>> from functools import partial
>>> def foo(x, y):
...     return x + y
... 
>>> l = [1, 2, 3, 4]
>>> map(partial(foo, y=2), l)
[3, 4, 5, 6]
>>> 
Run Code Online (Sandbox Code Playgroud)

另一种方法是改变定义函数的方式:

>>> def foo(y):
...     def inner(x):
...         return x + y
...     return inner
... 
>>> map(foo(2), l)
[3, 4, 5, 6]
>>> 
Run Code Online (Sandbox Code Playgroud)

顺便提一下,lambda正如Paolo Moretti所说,使用这将是最直接的方式.您必须使用map()您描述的方式的任何特殊原因?