Python Namescape en Scope

Jinku Hu 12 april 2022 20 december 2019
  1. Naam in Python
  2. Naamruimte in Python
  3. Variabel bereik in Python
  4. Bereik en naamruimte gebruiken in Python
Python Namescape en Scope

In deze sectie leert u de naamruimte en het bereik van een variabele in Python-programmering.

Naam in Python

Een naam in Python is een identificatie die aan het object is gegeven. Python is een objectgeoriënteerde programmeertaal, wat betekent dat alles een object is in Python en dat namen worden gebruikt om toegang te krijgen tot objecten.

Bijvoorbeeld wanneer u een waarde toewijst aan een variabele x = 3 . Hier 3 is een object en wordt opgeslagen op een geheugenlocatie (RAM). Deze geheugenlocatie is een benoemde geheugenlocatie die met de naam kan worden geopend x . Het adres van dit object (3) kan worden verkregen met behulp van de ingebouwde functie id().

x = 3
print('id(3) =', id(3))
print('id(x) =', id(x))
id(3) = 1864160336
id(x) = 1864160336

Nu wordt het object 3 opgeslagen op een locatie waarvan de naam is x en daarom is het adres van beide hetzelfde.

Wanneer u de waarde van toewijst x aan een andere variabele, laten we zeggen y en de waarde van wijzigen x , x heeft deze een nieuwe locatie en y krijgt deze de locatie van de vorige x . Dit wordt hieronder aangetoond:

x = 3
print('id(x) =', id(x))
x = 4
print('id(4) =', id(4))
print('id(x) =', id(x))
y = 3
print('id(y) =', id(y))
id(x) = 1864160336
id(4) = 1864160352
id(x) = 1864160352
id(y) = 1864160336

Je ziet hier het adres van is y gelijk aan dat van vroeger x.

Naamruimte in Python

Een naamruimte is een verzameling namen. Een naamruimte is een toewijzing van een naam aan een object en wordt geïmplementeerd als een woordenboek in Python. Naamruimten zorgen ervoor dat elke naam die in een programma wordt gebruikt, uniek is.

Naamruimten worden gemaakt wanneer de tolk wordt gestart, verwijderd wanneer de uitvoering van het programma wordt beëindigd. Deze naamruimte bevat alle ingebouwde namen, dus wanneer u bijvoorbeeld een ingebouwde functie nodig id() hebt, kan je deze rechtstreeks in uw programma gebruiken.

Wanneer u een functie aanroept, wordt een lokale naamruimte gemaakt die alle gedefinieerde namen bevat.

Variabel bereik in Python

Wanneer u een variabele in uw programma maakt, hebt u mogelijk niet vanuit elk onderdeel van het programma toegang tot die variabele. Dit komt door het bereik van variabelen. U probeert toegang te krijgen tot variabelen vanuit de naamruimte waar ze niet zijn gedefinieerd.

Een bereik kan worden gedefinieerd als een plaats van waaruit u zonder voorvoegsel toegang hebt tot uw naamruimte.

The Scope kan worden gecategoriseerd als:

  1. Toepassingsgebied van een functie waarbij u lokale namen hebt.
  2. Scope van een module met globale variabelen.
  3. Buitenste bereik waar u ingebouwde namen hebt.

Wanneer u een verwijzing in een functie maakt, wordt eerst in de lokale naamruimte gezocht en vervolgens in de globale naamruimte gezocht; als het nergens wordt gevonden, wordt het gezocht in de ingebouwde naamruimte.

Wanneer u een geneste functie maakt, krijgt u een nieuw bereik binnen het lokale bereik.

Bereik en naamruimte gebruiken in Python

def outer():
    x = 12
    def inner():
        y = 13
z = 14

Hier wordt een geneste functie gedefinieerd (functie in een andere functie). Variabele y bevindt zich in de geneste lokale naamruimte van de binnenste functie, variabele x bevindt zich in de lokale naamruimte van de buitenste functie en variabele z bevindt zich in de globale naamruimte.

Wanneer het zich binnen de innerlijke functie bevindt, is variabele y een lokale variabele, x is niet-lokaal en z is globaal. De innerlijke functie heeft geen toegang tot niet-lokale x en globale z variabelen.

Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn