2016-05-06 8 views
5

Lassen Sie uns sagen, ich habe:einige der Parameter an eine Funktion in Python Passing

def foo(my_num, my_string): 
    ... 

Und ich möchte dynamisch eine Funktion (so etwas wie ein lambba) erstellen, die bereits my_string hat, und ich muss nur passieren es my_num:

foo2 = ??(foo)('my_string_example') 
foo2(5) 
foo2(7) 

Gibt es eine Möglichkeit, das zu tun?

Antwort

5

Dies ist, was functools.partial mit helfen würde:

from functools import partial 

foo2 = partial(foo, my_string="my_string_example") 

Demo:

>>> from functools import partial 
>>> def foo(my_num, my_string): 
...  print(my_num, my_string) 
... 
>>> foo2 = partial(foo, my_string="my_string_example") 
>>> foo2(10) 
(10, 'my_string_example') 
>>> foo2(30) 
(30, 'my_string_example') 
+0

Genau das, was ich brauchte. Vielen Dank! –

0

Dies sollte es tun:

>>> def foo(a, b): 
... return a+b 
... 
>>> def makefoo2(a): 
... def f(b): 
...  return foo(a,b) 
... return f 
... 
>>> foo2 = makefoo2(3) 
>>> foo2(1) 
4 

Offensichtlich können Sie die Definition von foo nach Geschmack variieren .

Verwandte Themen