Dies wird als Teilfunktion bezeichnet und es gibt mindestens drei Möglichkeiten, dies zu tun. Meine Lieblingsmethode ist die Verwendung von Lambda, da es die Abhängigkeit von zusätzlichen Paketen vermeidet und am wenigsten ausführlich ist. Angenommen, Sie haben eine Funktion add(x, y)
und möchten add(3, y)
als Parameter an eine andere Funktion übergeben, sodass die andere Funktion den Wert für bestimmt y
.
Verwenden Sie Lambda
# generic function takes op and its argument
def runOp(op, val):
return op(val)
# declare full function
def add(x, y):
return x+y
# run example
def main():
f = lambda y: add(3, y)
result = runOp(f, 1) # is 4
Erstellen Sie Ihren eigenen Wrapper
Hier müssen Sie eine Funktion erstellen, die die Teilfunktion zurückgibt. Dies ist offensichtlich viel ausführlicher.
# generic function takes op and its argument
def runOp(op, val):
return op(val)
# declare full function
def add(x, y):
return x+y
# declare partial function
def addPartial(x):
def _wrapper(y):
return add(x, y)
return _wrapper
# run example
def main():
f = addPartial(3)
result = runOp(f, 1) # is 4
Verwenden Sie teilweise von functools
Dies ist fast identisch mit dem lambda
oben gezeigten. Warum brauchen wir das dann? Es gibt nur wenige Gründe . Kurz gesagt, partial
kann in einigen Fällen etwas schneller sein (siehe Implementierung ) und Sie können es für die frühe Bindung im Vergleich zur späten Bindung von Lambda verwenden.
from functools import partial
# generic function takes op and its argument
def runOp(op, val):
return op(val)
# declare full function
def add(x, y):
return x+y
# run example
def main():
f = partial(add, 3)
result = runOp(f, 1) # is 4
def action1(arg1, arg2=None, arg3=None)
wie können Sie beispielsweise ein Argument übergeben, das Sie arg3 zuweisen möchten?