Ich erhielt einen Anruf über veraltete Parameter in einer Web-App. Ich sah diesen Beitrag ...Python - Pass benannte Argumente zu Funktionsobjekt
wtforms+flask today's date as a default value
... das war genau richtig.
Die Standardeinstellung des Feldes wurde beim Start des Webservers festgelegt. Es war einfach zu testen. Ein paar Druckanweisungen in der Datei und es wurde bewiesen.
Jetzt lautet die Frage des leitenden Softwareentwicklers: "Wie übertrage ich Parameter?".
Also dann ...
myfunc(offset=3):
.... some code
fromdate = fields.DateField('From Date', default=myfunc, validators=[validators.required()])
Aber der Senior Software Engineer möchte in der Lage sein, Argumente zu der Zeit auf die Funktion Inline es wie ...
zugeordnetfromdate = fields.DateField('From Date', default=myfunc(-10), validators=[validators.required()])
. .. aber ohne es sofort aufzurufen. Im Grunde, das Funktionsobjekt und seine Argumente speichern, ohne sie auszuführen, immer noch verzögern, so dass der Code beim Laden der Seite statt beim Start des Servers ausgeführt wird.
Derzeit haben wir zwei Ideen.
- Der leitende Softwareentwickler sucht nach einer Methode um die Methode zu wickeln. Also dann gibt es eine Kernmethode und dann eine Reihe anderer, die szenariospezifisch sind, wie zum Beispiel myfuncminus10
- Ich denke Lambda-Ausdrücke. So etwas wie myfunc = Lambda: datetime.now(). Date() - timedelta (days = 365) Es würde definitiv das beabsichtigte Ergebnis produzieren, aber es könnte viel Code kopieren und einfügen.
Was ist der beste Weg, um dies zu nähern? Ich bin der Meinung, dass es einen ziemlich guten Weg gibt, der nicht einer der zwei Wege ist, die ich gerade beschrieben habe und wir wissen es noch nicht.
Innerhalb einer Minute 3 Antworten für 'functools.partial'. Ich werde meine löschen. – AKS
Siehe auch: [Partielle Anwendung] (https://en.wikipedia.org/wiki/Partial_application) und [Currying] (https://en.wikipedia.org/wiki/Cryrying) –