2016-05-12 19 views
0

Ich habe ein Modul, in dem es eine Funktion gibt, die eine Eingabe nimmt, sie verarbeitet und dann eine Ausgabe zurückgibt. Wenn ich die Funktion dieses Moduls anrufe, scheint es zu funktionieren, aber ich kann nicht auf die Variable 'result' vom Hauptprogramm zugreifen.Wie auf eine globale Variable in einer Funktion zugreifen?

file_a.py:

result = False 
def test(incoming): 
    if incoming > 3: 
     result = True 
    else: 
     result = False 
    print(result) 
    return result 

file_b.py:

import file_a 
for i in range(5): 
    file_a.test(i) 
    print(i, file_a.result) 

result von abfrage innerhalb test() erzeugt das gewünschte Ergebnis (dh er auf TRUE ändert, wenn erwartet), sondern aus der Hauptschleife file_a.result ist immer falsch.

Antwort

0

Was passiert ist, dass die Variable result innerhalb der Funktion eine Version ist, die nur in diesem Funktionsumfang existiert. Versuchen Sie result als global deklarieren, etwa so:

result = False 
def test(incoming): 
    global result # declare result as global 
    if incoming > 3: 
     result = True 
    else: 
     result = False 
    print(result) 
    return result 
1

Sie sollten einen Blick auf globale v haben lokale Namensräume in Python, z. B.. this random site I found.

Der Hauptpunkt ist, definieren Sie eine lokale Variable 'Ergebnisse' in Ihrer Funktion. Wenn Sie dies ändern, wird nicht das Ergebnis der externen (globalen) Variablen ändern. Sie können dies ändern, indem Sie der Funktion mitteilen, dass die Variable 'result' die globale sein soll. Geben Sie einfach "globales Ergebnis" als erste Zeile in der Funktion ein.

result = False  
    def test(incoming): 
    global result 
    ... 

Das sollte es beheben.

+0

Das ist richtig. Aber abhängig davon, was Sie wirklich tun wollen, können Sie es auch als lokal belassen und eine Zuweisung in file_b vornehmen (ändern Sie file_a.test (i) zu a = file_a.test (i) und dann gibt a den Wert zurück durch den Funktionsaufruf.Sie können es sogar 'Rückkehr' anstatt 'a' nennen. – ViennaMike

0

Die Antwort, die Sie suchen, ist global result innerhalb der Methode in file_a zu verwenden, um Python zu sagen, dass Sie die globale bedeuten. Dies funktioniert jedoch nur für Ihren Code. Ich würde sagen, dass Ihre Implementierung falsch (und gefährlich) ist.

Warum würden Sie in diesem Szenario die Variable nicht während des Funktionsaufrufs zuweisen? Sie geben eine Rendite und verwenden sie nie.

file_a.py

def test(incoming): 
    if incoming > 3: 
     result = True 
    else: 
     result = False 
    print(result) 
    return result 

file_b.py

import file_a 
for i in range(5): 
    result = file_a.test(i) 
    print(i, result) 

Es scheint keinen Grund zu geben, globale Variable Raum zu verschmutzen. Wenn Sie diese Art von Funktionalität wirklich wollen, sollten Sie eine Klasse verwenden. Sobald du zwei Module verwendest, die dieses Modul benutzen, könnten die Dinge wirklich schlecht gehen. Sie beginnen, die Ergebnisse des Anrufs eines anderen Benutzers zu verwenden.

Außerdem testet Ihr Test einen booleschen Wert, um denselben Wert des Tests zurückzugeben. Dies ist redundant und erfordert mehr Gehirnleistung zum Parsen, als wenn Sie es einfacher schreiben:

def test(incoming): 
    return incoming > 3 
Verwandte Themen