映射函数和输入函数参数

Ric*_*son 0 python map-function

这是一个愚蠢的例子:

def add_x_to_input(x,k):
   return x + k

myList = [1,2,3,4]
myNewList = map(add_x_to_input???, myList)
Run Code Online (Sandbox Code Playgroud)

如何指定参数xadd_x_to_input,当我把它作为输入功能map

Mar*_*ers 6

你可以使用functools.partial():

from functools import partial
map(partial(add_x_to_input, some_value_for_x), myList)
Run Code Online (Sandbox Code Playgroud)

或者您可以使用lambda(匿名,内联函数):

map(lambda k: add_x_to_input(some_value_for_x, k), myList)
Run Code Online (Sandbox Code Playgroud)

或者您可以定义一个显式的新函数:

def wrapping_function(k):
    return add_x_to_input(some_value_for_x, k)

map(wrapping_function, myList)
Run Code Online (Sandbox Code Playgroud)

如果你追求纯粹的速度,那么这种functools.partial()方法可以赢得这种方式.它是用C代码实现的,避免了额外的Python堆栈推送:

>>> import timeit
>>> L = range(10)
>>> def foo(a, b): pass
... 
>>> def p(b): return foo(1, b)
... 
>>> timeit.timeit('map(p, L)', 'from __main__ import foo, L; from functools import partial; p = partial(foo, 1)')
3.0008959770202637
>>> timeit.timeit('map(p, L)', 'from __main__ import foo, L; p = lambda b: foo(1, b)')
3.8707590103149414
>>> timeit.timeit('map(p, L)', 'from __main__ import foo, L, p')
3.9136409759521484
Run Code Online (Sandbox Code Playgroud)