2016-08-12 2 views
1

Das folgende Skript funktioniert gut, bis ich in "Def Test" hinzugefügt habe, versuche ich alle globalen Variablen meine Programmierung im Allgemeinen loszuwerden und wie ich kein großer Programmierer bin Ich hoffe, es gibt einen Weg, dies zu tun.Übergabe der Datenmitte-Funktion zurück zur Funktion Python

Ich möchte "foo" von Funktion "Test" zurück zu Funktion "Arbeit" übergeben, aber dies funktioniert nicht als seine keine globale Variable. Irgendwelche Ideen?

bar = "bar" 
barnone = "barnone" 

def function_A(): 
    data = 5 
    data1 = 15 
    if host == 1: 
     work(data, data1) 
    else: 
     function_B() 

def function_B(): 
    data = 3 
    data1 = 13 
    work(data, data1) 
    test(data) 
    print foo 

def work(data,data1): 
    print data 
    print data1 
    test(data) 
    print foo 

def test(data): 
    if data == 3:foo = bar 
    elif data == 5:foo = barnone 

if __name__ == '__main__': 
    host = 11 
    function_A() 

EDIT:

Danke, das funktioniert ... ich all das Feedback zu schätzen wissen, da ich ein Neuling bin, denken Sie daran, dies ist nur ein Testskript war ich zusammen Gabe von Parametern zu verstehen, setzen zu verschiedenen Funktionen. Davor habe ich Globals benutzt und versuche sie loszuwerden.

Vielen Dank, jeder Hinweis ist hilfreich.

bar = "bar" 
barnone = "barnone" 

def function_A(): 
    data = 5 
    data1 = 15 
    if host == 1: 
     work(data, data1) 
    else: 
     function_B() 

def function_B(): 
    data = 3 
    data1 = 13 
    work(data, data1) 
    test(data) 

def work(data,data1): 
    print data 
    print data1 
    test(data) 
    print test(data) 

def test(data): 
    if data == 3:foo = bar 
    elif data == 5:foo = barnone 
    return foo 

if __name__ == '__main__': 
    host = 11 
    function_A() 
+1

Vielleicht ein Python-Tutorial wird die Dinge für Sie klären. Ihr Code hat so viele Probleme, dass es schwierig ist, sie überhaupt zu beschreiben. https://docs.python.org/3/tutorial/ – wroniasty

Antwort

4

folgende Unterlagen an das Ende Ihrer test() Funktion hinzufügen:

`return foo` 

dann können Sie die Variable in work() wie diese

print test(data) 
1

Ihre test Funktion wie

geschrieben werden sollte drucken
def test(data): 
    if data == 3: 
     return 'bar' 
    elif data == 5: 
     return 'barnone' 

In einer Funktion, die test aufruft, weist das Ergebnis

something = test(data) 

Beachten Sie, dass der Code einige unabhängige Probleme hat, zum Beispiel, was passieren soll, wenn data weder 3 noch 5?

+0

OP ist offensichtlich ein sehr Anfänger Programmierer. Ich sehe keinen Sinn darin, stilistische Suggestionen zu formulieren, die ihn für den Moment vielleicht verwirren könnten, wie zum Beispiel die Umkehrung von Aussagen. Es ist einfacher, darauf hinzuweisen, dass sein Code in "Test" in Ordnung ist und am Ende nur eine "Rückkehr" benötigt. Edit: "fine" wie in funktional – Anonymous

+0

@jphollowed Aus diesem Grund habe ich den ternären Operator nicht erwähnt. Ich glaube, dass auf OP-Ebene ein vollständiger Kontrollpfadgedanke notwendig ist. –

+0

Ich stimme zu, ich denke nur, dass es für ihn mehr Sinn macht, eine "Return" -Anweisung am Ende der Funktion zu setzen und zu verstehen, was es tut, bevor er sich darum kümmert, seine gesamte Funktion zu modifizieren. Das macht es vielleicht einfacher zu verstehen, wo der Unterschied gemacht wird. – Anonymous

2

foo ist nur im "scope" der Funktion test() definiert, da Sie dort erstellt haben. Die Funktion work() hat keine Kenntnis über die Variable foo, da sie undefined außerhalb der Funktion test() ist. So hat test()-Rückkehr die Variable foo an den Ort, test() genannt, das ist die Linie test(data) in work().

Also, ja, fügen Sie return foo bis zum Ende test().

Edit:

Wenn Sie test(data) sagen, dass im Grunde sum([1,2,3]) sagen. Sie haben eine Funktion aufgerufen, aber Sie tun nichts mit dem Ergebnis, Sie sind nicht zuweisen es. Sie müssen sagen new_variable = test(data). Das heißt, aus der Sicht von work(): "Rufen Sie die Funktion test() an und lassen Sie sie ihr Ding machen. Es ist mir egal, was in test() vor sich geht, aber ich erwarte, dass es etwas ausspuckt, wenn es fertig ist. Ich werde das etwas einer Variablen in meinem Bereich zuweisen, damit ich es später verwenden kann ".

Es ist wie x = sum([1,2,3]) zu sagen. sum ist eine Funktion, die etwas in sich tut, ist Ihnen nicht wirklich was, Sie wissen nur, dass es einen sinnvollen Wert zurückgeben sollte, die Sie x zuweisen, später zu verwenden.

Edit2: Auch, wie es steht, da Sie test() zurückkehren wird einen boolean für foo, sondern die == Operator als der Zuweisungsoperator =.

Verwandte Themen