Ich habe zwei Funktionen, von denen jede eine dritte Funktion aufrufen, aber erwarten, dass eine etwas andere Sache zurückgegeben wird.Rückgabe verschiedener Werte basierend auf wo Funktion aufgerufen wird in Python
Alle Funktionen sind in separaten Dateien. Die Dateien A und B können sich NICHT gegenseitig importieren, daher können sich die Funktionen A und B nicht gegenseitig aufrufen. Was ist der beste Weg, dies zu organisieren?
Ich möchte vermeiden, die Funktion zu duplizieren, da das meiste davon identisch ist, um in Einklang mit DRY-Prinzipien zu bleiben. Hier
ist einige Pseudo-Code für das, was ich habe, und wie ich das Programm denke würde strukturiert:
#FileA.py
def functionA():
useableData = functionC(rawData)
-
#FileB.py
def functionB():
useableData = functionC(rawData)
-
#FileC.py
def functionC(rawdata):
*Extensive processing/formatting of data*
if C run from A:
return useableData
if C run from B:
*A bit more processing of data*
return useableData
Die Die einzige Lösung, die ich mir vorstellen kann, ist eine zweite Variable zusammen mit rawdata
, eine Zeichenfolge, die das n sagt ame der Funktion, aus der es kam. Aber das scheint mir unelegant.
Gibt es einen idealen Weg, dies zu tun? Vielleicht nicht mit der Überprüfung, woher die Funktion aufgerufen wurde, aber immer noch functionC
etwas andere Ergebnisse zurückgeben, abhängig davon, wo die Daten zurückgegeben werden. Ich könnte den Code ein wenig restrukturieren, aber alle drei Funktionen müssen in ihren aktuellen Dateien bleiben.
Während ich denke, das ist eine schreckliche Idee ist, gibt es immer die [Zurückverfolgungs] (https: //docs.python. org/2/library/traceback.html). Es ist jedoch eine schlechte Form, das Verhalten basierend auf dem Anrufer ohne zusätzliche Kontextinformationen zu ändern. Es ist keine schlechte Form, ein zusätzliches Argument hinzuzufügen, das angibt, welcher _type_ der Verarbeitung durchgeführt werden soll, obwohl –
Nur einen (optionalen) zweiten Parameter 'moreProcessing = False' hinzufügen? –
Ich würde empfehlen, alles, was spezifisch ist, was Datei benötigt, in FunktionA und alles, was spezifisch für Datei B ist, in FunktionB zu setzen und FunktionC zu lassen, um nur das zu behandeln, was beiden gemeinsam ist. – glibdud