Hoe kan ik een globale variabele in een functie maken of gebruiken?
Als ik een globale variabele aanmaak in een functie, hoe kan ik die globale variabele dan gebruiken in een andere functie? Moet ik de globale variabele opslaan in een lokale variabele van de functie die de toegang nodig heeft?
U kunt een globale variabele in andere functies gebruiken door deze als global
te declareren in elke functie die er aan toewijst:
globvar = 0
def set_globvar_to_one():
global globvar # Needed to modify global copy of globvar
globvar = 1
def print_globvar():
print(globvar) # No need for global declaration to read value of globvar
set_globvar_to_one()
print_globvar() # Prints 1
Ik stel me voor dat de reden hiervoor is dat, omdat globale variabelen zo gevaarlijk zijn, Python er zeker van wil zijn dat je echt weet dat'is waar je mee speelt door expliciet het global
sleutelwoord te vereisen.
Zie andere antwoorden als je een globale variabele wilt delen tussen modules.
Misschien wil je de notie van namespaces onderzoeken. In Python is de module de natuurlijke plaats voor globale gegevens:
Elke module heeft zijn eigen private symbolentabel, die wordt gebruikt als de globale symbolentabel door alle functies die in de module worden gedefinieerd. De auteur van een module kan dus globale variabelen in de module gebruiken zonder zich zorgen te maken over toevallige botsingen met de globale variabelen van een gebruiker. Aan de andere kant, als je weet wat je doet, kun je de globale variabelen van een module aanraken met dezelfde notatie die gebruikt wordt om naar de functies te verwijzen,
modname.itemname
.
Een specifiek gebruik van global-in-a-module wordt hier beschreven - How do I share global variables across modules?, en voor de volledigheid wordt de inhoud hier gedeeld:
De canonieke manier om informatie te delen over modules binnen een enkel programma is door een speciale configuratiemodule te maken (vaak config of cfg genoemd). Importeer de configuratiemodule in alle modules van uw applicatie; de module wordt dan beschikbaar als een globale naam. Omdat er slechts één instantie van elke module is, worden alle wijzigingen die in het module-object worden aangebracht overal doorgevoerd. Bijvoorbeeld:
Bestand: config.py
x = 0 # Standaardwaarde van de 'x' configuratie-instelling
Bestand: mod.py
importeer config config.x = 1
Bestand: main.py
importeer config importeren mod print config.x
Als je in een functie wilt verwijzen naar een globale variabele, kun je het sleutelwoord global gebruiken om aan te geven welke variabelen globaal zijn. Je hoeft het niet in alle gevallen te gebruiken (zoals iemand hier ten onrechte beweert) - als de naam waarnaar verwezen wordt in een expressie niet gevonden kan worden in local scope of scopes in de functies waarin deze functie gedefinieerd is, wordt het opgezocht onder de globale variabelen.
Als je echter toewijst aan een nieuwe variabele die in de functie niet als globaal is gedeclareerd, wordt deze impliciet als lokaal gedeclareerd, en kan deze elke bestaande globale variabele met dezelfde naam overschaduwen.
Globale variabelen zijn ook nuttig, in tegenstelling tot sommige OOP fanatiekelingen die anders beweren - vooral voor kleinere scripts, waar OOP overkill is.