2012-10-18 24 views
3

在Python,人们可以通过使用内置函数map()作为应用功能foo()到列表中的每个元素如下:如何从Python中的内置函数map()中的列表和另一个参数传递一个参数?

def foo(x): 
    return x*x 

print map(foo, [1, 2, 3, 4]) 

这将打印为一个可以猜测:1 4 9 16

比方说功能foo()现在接收两个参数,而不是一个,并且被定义为如下:

def foo(x, y): 
    return x+y 

在这种情况下,x为列表的元素,并且y是某个数字与整个列表相同。在这种情况下,我们如何使用map(),使foo()应用于列表的每个元素,同时接受另一个参数y,这对每个元素都是一样的?

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

print map(foo(:, 5), [1, 2, 3, 4]) 

应该给我:6 7 8 9

是否有可能在Python?对于将所有元素添加'y'的特定示例可以有替代方案。但我正在寻找将使用map()的答案。

回答

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] 

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

+0

正如我所说,可能有其他选择。我正在寻找一个可以在map()的帮助下调用函数foo()的答案。 – prashu

+0

@prashu啊,我明白你在说什么了。如果我不能很快想到其他东西,我会删除它。 – RocketDonkey

+0

@RocketDonkey:正如我在我的问题中提到的,这是执行OP所说的首选方式。我会放弃它。 “应该有一个 - 而且最好只有一个 - 明显的做法。”这就是它。 –

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] 
>>> 

另一种方法是改变你定义的方式功能:

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

顺便说一句,使用lambda将是最直接的作为Paolo Moretti said可以这样做。你为什么要用你描述的方式使用map()

+0

哇!我真的很喜欢这些方法。我从未听过或见过他们。我正在使用Python 2.6是否可以在该版本中使用? –

+0

@InbarRose:是的。他们在2.6工作。 –

+0

谢谢乔尔,部分事情也工作:) – prashu

相关问题