88 Stimmen

Python Argument Binder

Wie kann ich Argumente an eine Python-Methode binden, um einen nullären Funktor zur späteren Ausführung zu speichern? Ähnlich wie bei boost::bind in C++.

Zum Beispiel:

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

add_5 = magic_function(add, 5)
assert add_5(3) == 8

2voto

S.Lott Punkte 371691

Functors können in Python auf diese Weise definiert werden. Sie sind aufrufbare Objekte. Das "Binding" setzt lediglich Argumentwerte.

class SomeFunctor( object ):
    def __init__( self, arg1, arg2=None ):
        self.arg1= arg1
        self.arg2= arg2
    def __call___( self, arg1=None, arg2=None ):
        a1= arg1 or self.arg1
        a2= arg2 or self.arg2
        # etwas tun
        return

Sie können Dinge wie

x= SomeFunctor( 3.456 )
x( arg2=123 )

y= SomeFunctor( 3.456, 123 )
y()

1voto

Ataxias Punkte 880

Die Frage bezieht sich allgemein auf das Binden von Argumenten, aber alle Antworten beziehen sich auf Funktionen. Falls Sie sich fragen, funktioniert partial auch mit Klassenkonstruktoren (d.h. die Verwendung einer Klasse anstelle einer Funktion als erstes Argument), was für Fabrikklassen nützlich sein kann. Sie können dies wie folgt tun:

from functools import partial

class Animal(object):
    def __init__(self, gewicht, num_beine):
        self.gewicht = gewicht
        self.num_beine = num_beine

tierklasse = partial(Animal, gewicht=12)
schlange = tierklasse(num_beine = 0)
print(schlange.gewicht) # gibt 12 aus

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X