Sobes.tech
Middle+

Hoe wordt de plaatsing van naamruimtes in Python gedaan?

sobes.tech AI

Antwoord van AI

Namespaces in Python zijn hiërarchisch georganiseerd en worden beheerd volgens de LEGB-regel (Local, Enclosing, Global, Built-in).

  1. Local (Lokaal): De meest interne namespace. Wordt aangemaakt bij het aanroepen van een functie en bevat de namen die binnen die functie zijn gedefinieerd (variabelen, lokale functies). Bestaat alleen tijdens de uitvoering van de functie.

    def mijn_functie():
        x = 10  # Lokale variabele
        print(x)
    
  2. Enclosing (Omringend/Omhullend): Wordt aangemaakt voor geneste functies. Bevat de namen van de omhullende (ouder) functie die niet lokaal zijn voor de interne functie. Gebruikt het sleutelwoord nonlocal.

    def buiten_functie():
        y = 20
        def binnen_functie():
            nonlocal y # Toegang tot variabele uit de omringende ruimte
            print(y)
        binnen_functie()
    
  3. Global (Globaal): Namespace op moduloniveau. Bevat de namen die in de module zelf zijn gedefinieerd (functies, klassen, variabelen). Toegankelijk vanaf elk deel van de module. Wordt aangemaakt bij het importeren van de module.

    z = 30 # Globale variabele in de module
    def een_andere_functie():
        global z # Toegang tot de globale variabele
        print(z)
    
  4. Built-in (Ingebouwd): De meest externe namespace. Bevat de ingebouwde functies en uitzonderingen van Python (print, len, Exception, etc.). Beschikbaar vanaf elk punt in het programma.

Python zoekt de naam beginnend met de lokale namespace, daarna gaat het naar de bovenliggende omringende, vervolgens naar de globale, en ten slotte naar de ingebouwde. Als de naam niet wordt gevonden, wordt een NameError gegenereerd.

Namespaces worden weergegeven als woordenboeken, waarvan de sleutels de objectnamen zijn en de waarden de objecten zelf.

print(locals())  # Lokale namespace van de huidige functie
print(globals()) # Globale namespace van de module