best practice für die übergabe von Werten zwischen Funktionen in Python
Was ist pythonic best practice für die Erlaubnis, eine Funktion zu verwenden, eine andere Funktion zurückgegebenen Werte? z.B. Ist es besser, rufen Sie eine Funktion innerhalb einer anderen, oder besser, dass function1 kehrt in die Klasse, und Klasse werden Variablen zugewiesen, die dann durch function2? Zweitens, wie viele verschiedene Möglichkeiten könnte Sie die übergabe von Werten zwischen Funktionen?
class adding:
def get_values(self):
x = input("input x")
y = input("input y")
z = input("input z")
return x, y, z
def use_values(self, x, y, z):
print x+y+z
if name == 'main':
dave = adding()
x, y, z = dave.get_values()
dave.use_values(x, y, z)
Oder
dave = adding()
dave.use_values(*dave.get_values())
InformationsquelleAutor zantzinger | 2011-06-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als
import this
würde sagen, "explizit ist besser als implizit"; so gehen Sie bei der ersten form.Wenn die Anzahl der Rückgabewerte groß wird, lassen
use_value
nehmen Sie eine Sequenz argument, statt.InformationsquelleAutor Fred Foo
Alle Wege sind gültig und richten sich ganz auf Ihr Thema domain-und die Aufsplitterung der Funktionen, die die Trennung von Bedenken. In anderen Worten, es hängt davon ab,.
Beispielsweise könnten Sie eine Klasse, deren öffentliche API bietet 2 Methoden, die beide hängen von einer 3. Methode, dass du als sein eigenes. Es ist Ihre Wahl als Entwickler nicht machen, dass die 3. Methode Teil der öffentlichen API, aber es ist da in deinem Quellcode:
In diesem Falle, es gibt absolut keine Notwendigkeit für die Benutzer von Ihren API-aufrufen
_privateMethod
direkt übergeben und der Rückgabewert entwederpublicMethod
.Allerdings, wenn Sie glauben, dass die Verbraucher Ihre API sollten Ihre Methode mit spezifischen Informationen, für die es eine einfache Standard-Methode, die rechnen konnte, dass bestimmte Informationen, die für Sie in den meisten Fällen würden Sie wollen, übergeben Sie den Rückgabewert, der Standard-Methode. So, diejenigen, die Verbraucher können auch Ihre eigenen Methode der Berechnung und verwenden Sie diese Werte statt:
Und Wann mit Instanz-Variablen? Nur wenn die Rückgabewerte einer Funktion sind weiterhin die Instanz, wenn Sie spiegeln den inneren Zustand der Instanz.
Zum Beispiel, wenn Ihre Klasse repräsentiert ein Auto, kann es Sinn machen für Ihre Anwendung speichern die Position des Autos zwischen den Operationen, auf das Auto zu. Also, wenn Sie wissen möchten, ob die es braucht, um anhalten bei einer Ampel, gerade jetzt, rufen Sie die
updatePosition()
Methode zuerst, dann verwenden Sie eine andere Methode zur Berechnung der Entfernung von der Ampel. Sie würde nicht passieren die Ausgabe derupdatePosition()
Aufruf der Entfernungsberechnung Methode, die Sie würde nur halten Sie die position aktualisiert, die in der Instanz.Wenn jedoch, müssen Sie zum aktualisieren der position des Autos in eine Kollision, die Sie benötigen, um Daten aus dem Fahrzeug (basierend auf Rückgabewerte von aufgerufenen Methoden auf dem Auto), kombiniert mit externen Informationen (position des anderen Objekts, Widerstand der Fahrbahn, etc.) wieder zu füttern, in der
updatePosition
Methode auf dem Auto. Da Sie jetzt brauchen, um zusätzliche Informationen aus außerhalb die Auto-Instanz zu Durchlaufen haben, in die Werte aus einer Methode Aufruf der anderen über Ihre öffentliche API.Denken Sie daran, die software-Entwicklung ist mehr eine Kunstform als eine strenge Disziplin, und damit die Antwort auf die Frage, wie dies zu tun variiert von Entwickler zu Entwickler und von software-Projekt software-Projekt. Es ist nie niemand beantworten. Versuchen Sie einfach, um es explizite und offensichtliche, Natürliche.
InformationsquelleAutor Martijn Pieters
Ich würde behaupten, dass
get_values
ist nicht ein essentieller Teil hinzufügen und so sollte eine separate Funktion. Wenn es sein sollte würde ich sagen:ist eine weitere gute Lösung.
InformationsquelleAutor isakkarlsson