3964 Stimmen

Verwendung globaler Variablen in einer Funktion

Wie kann ich eine globale Variable in einer Funktion erstellen oder verwenden?

Wenn ich in einer Funktion eine globale Variable erstelle, wie kann ich diese globale Variable in einer anderen Funktion verwenden? Muss ich die globale Variable in einer lokalen Variable der Funktion speichern, die ihren Zugriff benötigt?

0 Stimmen

Unabhängig davon, wo Sie "global" vor dem Variablennamen erwähnt haben, kann sie überall wie eine normale lokale Variable verwendet werden, sobald Python sie als mit dem Schlüsselwort "global" gelesen hat. Aber es ist eine sehr schlechte Idee, es sei denn, die Variable ist für das gesamte Projekt gemeinsam. Zum Beispiel: project_name, database_url

32voto

Mohamed El-Saka Punkte 682

Sie müssen die globale Variable in jeder Funktion, die Sie verwenden möchten, referenzieren.

Wie folgt:

var = "test"

def printGlobalText():
    global var #wWe are telling to explicitly use the global version
    var = "global from printGlobalText fun."
    print "var from printGlobalText: " + var

def printLocalText():
    #We are NOT telling to explicitly use the global version, so we are creating a local variable
    var = "local version from printLocalText fun"
    print "var from printLocalText: " + var

printGlobalText()
printLocalText()
"""
Output Result:
var from printGlobalText: global from printGlobalText fun.
var from printLocalText: local version from printLocalText
[Finished in 0.1s]
"""

4 Stimmen

'in jeder Funktion, die Sie verwenden wollen' ist subtil falsch, sollte eher lauten: 'in jeder Funktion, die Sie verwenden wollen Update '

32voto

Sagar Mehta Punkte 373

Versuchen Sie dies:

def x1():
    global x
    x += 1
    print('x1: ', x)

def x2():
    global x
    x = x+1
    print('x2: ', x)

x = 5
print('x:  ', x)
x1()
x2()

# Output:
# x:   5
# x1:  6
# x2:  7

0 Stimmen

Herzlichen Glückwunsch! Endlich jemand, der den wichtigsten Punkt der Verwendung von global . Nämlich die Verwendung einer Variablen in einer Funktion, die definiert wurde nach die Funktion selbst.

29voto

Kylotan Punkte 18135

Sie speichern die globale Variable nicht wirklich in einer lokalen Variable, sondern erstellen lediglich einen lokalen Verweis auf dasselbe Objekt, auf das sich Ihr ursprünglicher globaler Verweis bezieht. Denken Sie daran, dass so gut wie alles in Python ein Name ist, der auf ein Objekt verweist, und dass bei der üblichen Operation nichts kopiert wird.

Wenn man nicht explizit angeben müsste, wann ein Bezeichner auf eine vordefinierte globale Variable verweist, dann müsste man vermutlich stattdessen explizit angeben, wann ein Bezeichner eine neue lokale Variable ist (zum Beispiel mit so etwas wie dem 'var'-Befehl in JavaScript). Da lokale Variablen in jedem ernsthaften und nicht-trivialen System häufiger vorkommen als globale Variablen, ist das System von Python in den meisten Fällen sinnvoller.

Sie könnte eine Sprache haben, die versucht, zu raten, indem sie eine globale Variable verwendet, wenn sie existiert, oder eine lokale Variable erstellt, wenn sie nicht existiert. Das wäre jedoch sehr fehleranfällig. Wenn Sie zum Beispiel ein anderes Modul importieren, könnten Sie versehentlich eine globale Variable mit diesem Namen einführen und damit das Verhalten Ihres Programms ändern.

25voto

Martin Thoma Punkte 105621

Falls Sie eine lokale Variable mit demselben Namen haben, sollten Sie die Option globals() Funktion .

globals()['your_global_var'] = 42

22voto

Im Anschluss daran und als Zusatz, verwenden Sie eine Datei, die alle globalen Variablen enthält, die alle lokal deklariert sind und dann import as :

Datei initval.py :

Stocksin = 300
Prices = []

Datei getstocks.py :

import initval as iv

def getmystocks(): 
    iv.Stocksin = getstockcount()

def getmycharts():
    for ic in range(iv.Stocksin):

1 Stimmen

Was ist der Vorteil, wenn man die globalen Variablen in eine andere Datei verschiebt? Geht es nur darum, die globalen Variablen in einer kleinen Datei zusammenzufassen? Und warum wird die Anweisung import ... as ... ? Warum nicht einfach import ... ?

1 Stimmen

Ah... endlich habe ich den Vorteil verstanden: Das Schlüsselwort muss nicht verwendet werden global :-) => +1 :-) Bitte bearbeiten Sie Ihre Antwort, um diese Fragen zu klären, die auch andere Leute haben könnten. Zum Wohl

0 Stimmen

Ich fand diesen Ansatz sehr vielseitig und einfach zu handhaben. Ich habe viele Variablen (über 50), die ich für viele separate Moduldateien verfügbar machen möchte.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X