2017-06-25 3 views
0

Ich habe eine Frage zu Variablen Funktion auf eine andere Funktion, indem Sie den Code übergeben:Passing Variablen von Funktion Funktion

def Hello(): 
    good = "Nice" 
    return good 

def Bye(): 
    print (good) 

Hello() 
Bye() 

Es gibt „Globale Name‚gut‘ist nicht definiert“

Wie kann ich dieses Problem lösen? Dank

Antwort

1

Wenn Sie die Variable wollen good auf andere Funktionen zur Verfügung stehen, ohne die Funktion Hello laufen, sollten Sie als globale Funktion gut erklären.

def Hello(): 
    global good 
    good = 'Nice' 
    ... 
+0

Vielen Dank. Ich hatte einen ziemlich großen Code, der nicht funktionierte, aber jetzt funktioniert es völlig !! Vielen Dank!! –

+0

Ich bin froh, dass es dir geholfen hat. – user452570

1

Sie müssen über Bereiche kennen lernen. Die Variable good existiert nur im Rahmen der Funktion Hello - außerhalb dieser Funktion ist die Variable nicht bekannt.

In Ihrem Fall sollten Sie den Rückgabewert von Hello in einer Variablen speichern - und dann diese Variable auf die Funktion übergeben Bye:

def Hello(): 
    good = "Nice" 
    return good 

def Bye(g): 
    print (g) 

g = Hello() 
Bye(g) 

Vom docs:

ein Bereich definiert die Sichtbarkeit eines Namens innerhalb eines Blocks. Wenn eine lokale Variable in einem Block definiert ist, enthält ihr Bereich diesen Block. Wenn die Definition in einem Funktionsblock auftritt, erstreckt sich der Geltungsbereich auf alle Blöcke innerhalb des definierenden Bereichs, es sei denn, ein enthaltener Block führt eine andere Bindung für den Namen ein.

[...]

Wenn ein Name nicht zu finden ist, eine Nameerror Ausnahme. Wenn der aktuelle Bereich ein Funktionsbereich ist und der Name sich auf eine lokale Variable bezieht, die an dem Punkt, an dem der Name verwendet wird, noch nicht an einen Wert gebunden wurde, wird eine UnboundLocalError-Ausnahme ausgelöst. UnboundLocalError ist eine Unterklasse von NameError.

0

Mit diesem müssen Sie globale Variablen verwenden, die für jede Funktion in jeder Folie zugänglich sind. Hier ist ein Video, das Ihnen zeigen wird, wie Sie das, was Sie suchen, vervollständigen können. https://youtu.be/lcEm0R7mwJk. Hoffe, du bekommst die Antwort, die du suchst.

Denis Granulo.

1

Es ist eine einfachere Lösung, die mehr mit dem Original-Code folgt:

def Hello(): 
    good = "Nice" 
    return good 

def Bye(): 
    print (good) 

good = Hello() 
Bye() 

Python Variablen in einem lokalen Bereich lokal definiert hält, darum können Sie nicht good außerhalb Ihrer Funktion lesen, wenn Sie es ausdrücklich zurückkehren (und speichern Sie es). In Python können Sie auch nicht in Variablen schreiben, die in einem größeren Bereich definiert sind, es sei denn, Sie übergeben sie als Eingabeargument oder verwenden die Anweisung global. Aber das OP hat nicht darum gebeten, aus einer anderen Funktion zu schreiben. Python ermöglicht es, Variablen aus einem größeren Bereich zu lesen. Alles, was Sie tun müssen, ist die Variable good in Ihrem größeren Bereich zu speichern, sie wurde ohnehin schon von der OP Hello Funktion zurückgegeben.