Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Python

Python-naamruimte en bereik

Python-naamruimte en bereik

In deze zelfstudie leert u over naamruimte, het toewijzen van namen aan objecten en het bereik van een variabele.

Wat is Naam in Python?

Als je ooit 'The Zen of Python' hebt gelezen (type import this in de Python-interpreter), zegt de laatste regel:Naamruimten zijn een geweldig idee - laten we er meer van doen! Dus wat zijn deze mysterieuze naamruimten? Laten we eerst kijken wat de naam is.

Naam (ook wel identifier genoemd) is gewoon een naam die aan objecten wordt gegeven. Alles in Python is een object. Naam is een manier om toegang te krijgen tot het onderliggende object.

Als we bijvoorbeeld de opdracht a = 2 . doen , 2 is een object dat in het geheugen is opgeslagen en a is de naam waarmee we het associëren. We kunnen het adres (in RAM) van een object krijgen via de ingebouwde functie id() . Laten we eens kijken hoe we het kunnen gebruiken.

# Note: You may get different values for the id

a = 2
print('id(2) =', id(2))

print('id(a) =', id(a))

Uitvoer

id(2) = 9302208
id(a) = 9302208

Hier verwijzen beide naar hetzelfde object 2 , dus ze hebben dezelfde id() . Laten we het een beetje interessanter maken.

# Note: You may get different values for the id

a = 2
print('id(a) =', id(a))

a = a+1
print('id(a) =', id(a))

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

b = 2
print('id(b) =', id(b))
print('id(2) =', id(2))

Uitvoer

id(a) = 9302208
id(a) = 9302240
id(3) = 9302240
id(b) = 9302208
id(2) = 9302208

Wat gebeurt er in de bovenstaande volgorde van stappen? Laten we een diagram gebruiken om dit uit te leggen:

Aanvankelijk een object 2 is gemaakt en de naam a is ermee geassocieerd, wanneer we a = a+1 , een nieuw object 3 is gemaakt en nu een is gekoppeld aan dit object.

Merk op dat id(a) en id(3) dezelfde waarden hebben.

Bovendien, wanneer b = 2 wordt uitgevoerd, wordt de nieuwe naam b wordt geassocieerd met het vorige object 2 .

Dit is efficiënt omdat Python geen nieuw duplicaatobject hoeft te maken. Deze dynamische aard van naambinding maakt Python krachtig; een naam kan verwijzen naar elk type object.

>>> a = 5
>>> a = 'Hello World!'
>>> a = [1,2,3]

Al deze zijn geldig en een zal in verschillende gevallen verwijzen naar drie verschillende soorten objecten. Functies zijn ook objecten, dus een naam kan er ook naar verwijzen.

def printHello():
    print("Hello")


a = printHello

a()

Uitvoer

Hello

Dezelfde naam a kan verwijzen naar een functie en we kunnen de functie aanroepen met deze naam.


Wat is een naamruimte in Python?

Nu we begrijpen wat namen zijn, kunnen we verder gaan met het concept van naamruimten.

Simpel gezegd, een naamruimte is een verzameling namen.

In Python kun je je een naamruimte voorstellen als een toewijzing van elke naam die je hebt gedefinieerd aan corresponderende objecten.

Verschillende naamruimten kunnen op een bepaald moment naast elkaar bestaan, maar zijn volledig geïsoleerd.

Een naamruimte met alle ingebouwde namen wordt gemaakt wanneer we de Python-interpreter starten en bestaat zolang de interpreter draait.

Dit is de reden dat ingebouwde functies zoals id() , print() enz. zijn altijd voor ons beschikbaar vanuit elk deel van het programma. Elke module creëert zijn eigen globale naamruimte.

Deze verschillende naamruimten zijn geïsoleerd. Vandaar dat dezelfde naam die in verschillende modules kan voorkomen niet met elkaar in botsing komt.

Modules kunnen verschillende functies en klassen hebben. Er wordt een lokale naamruimte gemaakt wanneer een functie wordt aangeroepen, waarin alle namen zijn gedefinieerd. Zo is het ook met klasse. Het volgende diagram kan helpen om dit concept te verduidelijken.


Python-variabel bereik

Hoewel er verschillende unieke naamruimten zijn gedefinieerd, is het mogelijk dat we ze niet allemaal vanuit elk onderdeel van het programma kunnen benaderen. Het concept van reikwijdte komt om de hoek kijken.

Een scope is het gedeelte van een programma van waaruit direct toegang kan worden verkregen tot een naamruimte zonder enig voorvoegsel.

Er zijn op elk moment ten minste drie geneste bereiken.

  1. Omvang van de huidige functie die lokale namen heeft
  2. Omvang van de module die globale namen heeft
  3. Buitenste bereik met ingebouwde namen

Wanneer er binnen een functie wordt verwezen, wordt de naam gezocht in de lokale naamruimte, vervolgens in de algemene naamruimte en tenslotte in de ingebouwde naamruimte.

Als er een functie binnen een andere functie is, wordt een nieuwe scope genest binnen de lokale scope.


Voorbeeld van bereik en naamruimte in Python

def outer_function():
    b = 20
    def inner_func():
        c = 30

a = 10

Hier, de variabele a bevindt zich in de globale naamruimte. Variabele b bevindt zich in de lokale naamruimte van outer_function() en c bevindt zich in de geneste lokale naamruimte van inner_function() .

Als we in inner_function() zijn , c is lokaal voor ons, b is niet-lokaal en een globaal is. We kunnen zowel lezen als nieuwe waarden toekennen aan c maar kan alleen b . lezen en een van inner_function() .

Als we proberen een waarde toe te wijzen aan b , een nieuwe variabele b wordt gemaakt in de lokale naamruimte die anders is dan de niet-lokale b . Hetzelfde gebeurt wanneer we een waarde toewijzen aan a .

Als we echter een als globaal gaan alle verwijzingen en toewijzingen naar de globale a . Evenzo, als we de variabele b . opnieuw willen binden , moet het worden gedeclareerd als niet-lokaal. Het volgende voorbeeld zal dit verder verduidelijken.

def outer_function():
    a = 20

    def inner_function():
        a = 30
        print('a =', a)

    inner_function()
    print('a =', a)


a = 10
outer_function()
print('a =', a)

Zoals je kunt zien, is de uitvoer van dit programma

a = 30
a = 20
a = 10

In dit programma zijn drie verschillende variabelen a zijn gedefinieerd in afzonderlijke naamruimten en dienovereenkomstig toegankelijk. In het volgende programma,

def outer_function():
    global a
    a = 20

    def inner_function():
        global a
        a = 30
        print('a =', a)

    inner_function()
    print('a =', a)


a = 10
outer_function()
print('a =', a)

De uitvoer van het programma is.

a = 30
a = 30
a = 30 

Hier zijn alle verwijzingen en opdrachten naar de globale a vanwege het gebruik van trefwoord global .


Python

  1. Python-sleutelwoorden en -ID's
  2. Python-verklaring, inspringing en opmerkingen
  3. Python-variabelen, constanten en literalen
  4. Python Type Conversie en Type Casting
  5. Python invoer, uitvoer en import
  6. Python-operators
  7. Python globale, lokale en niet-lokale variabelen
  8. Python-nummers, typeconversie en wiskunde
  9. Python-directory en bestandsbeheer
  10. Python-fouten en ingebouwde uitzonderingen
  11. Hoe de huidige datum en tijd in Python te krijgen?