Python Tutorial - Namescape and Scope

Jinku Hu 25 giugno 2020
  1. Nome in Python
  2. Spazio dei nomi in Python
  3. Portata variabile in Python
  4. Uso dello scope e del namespace in Python
Python Tutorial - Namescape and Scope

In questa sezione, imparerete lo spazio dei nomi e lo scopo di una variabile nella programmazione Python.

Nome in Python

Un nome in Python è un identificatore dato all’oggetto. Python è un linguaggio di programmazione orientato agli oggetti, il che significa che tutto è un oggetto in Python e i nomi sono usati per accedere agli oggetti.

Per esempio, quando si assegna un valore ad una variabile x = 3. Qui 3 è un oggetto e viene memorizzato in una posizione di memoria (RAM). Questa locazione di memoria è una locazione di memoria con nome a cui si può accedere con il nome x. L’indirizzo di questo oggetto (3) può essere ottenuto usando la funzione incorporata id().

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

Ora qui l’oggetto 3 è memorizzato in una locazione il cui nome è x e quindi l’indirizzo di entrambi è lo stesso.

Quando si assegna il valore di x a qualche altra variabile diciamo y e si cambia il valore di x, allora x avrà una nuova posizione e y avrà la posizione della precedente x. Questo è dimostrato di seguito:

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

Potete vedere qui che l’indirizzo di y è uguale a quello della vecchia x.

Spazio dei nomi in Python

Un namespace è un insieme di nomi. Un namespace è una mappatura dei nomi di un oggetto ed è implementato come dizionario in Python. I namespace assicurano che ogni nome usato in un programma sia unico.

I namespace vengono creati all’avvio dell’interprete e cancellati al termine dell’esecuzione del programma. Questo namespace contiene tutti i nomi incorporati, quindi ogni volta che avete bisogno di una funzione incorporata per esempio id() potete usarla direttamente nel vostro programma.

Quando si chiama una funzione, viene creato un namespace locale che contiene tutti i nomi definiti.

Portata variabile in Python

Quando create una variabile nel vostro programma, potreste non avere accesso a quella variabile da ogni parte del programma. Ciò è dovuto alla portata delle variabili. Si cerca di accedere alle variabili dal namespace dove non sono definite.

Un ambito può essere definito come un luogo da cui si può accedere al proprio namespace senza alcun prefisso.

Lo scope può essere categorizzato come:

  1. Ambito di una funzione in cui si hanno nomi locali.
  2. Ambito di un modulo in cui si hanno variabili globali.
  3. Ambito di una funzione dove si hanno nomi incorporati.

Quando si crea un riferimento all’interno di una funzione, questo viene cercato prima nello spazio dei nomi locale e poi nello spazio dei nomi globale; se non viene trovato da nessuna parte verrà cercato nello spazio dei nomi incorporato.

Quando si crea una funzione annidata, si avrà un nuovo ambito all’interno dell’ambito locale.

Uso dello scope e del namespace in Python

def outer():
    x = 12

    def inner():
        y = 13


z = 14

Qui viene definita una funzione annidata (funzione all’interno di un’altra funzione). La variabile y è nel namespace locale annidato della funzione interna, la variabile x è nel namespace locale della funzione esterna e la variabile z è nel namespace globale.

Quando è all’interno della funzione interna, la variabile y è una variabile locale, x è non locale e z è globale. La funzione interna non ha accesso alle variabili non locali x e globali z.

Autore: 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 Facebook