Python Tutorial - Namensraum und Umfang

Jinku Hu 25 Juni 2020
  1. Name in Python
  2. Namensraum in Python
  3. Variablenbereich in Python
  4. Verwendung von Scope und Namensraum in Python
Python Tutorial - Namensraum und Umfang

In diesem Abschnitt lernen Sie Namespace und Umfang einer Variable in der Python-Programmierung kennen.

Name in Python

Ein Name in Python ist ein Bezeichner, der dem Objekt gegeben wird. Python ist eine objektorientierte Programmiersprache, was bedeutet, dass in Python alles ein Objekt ist und Namen für den Zugriff auf Objekte verwendet werden.

Zum Beispiel, wenn Sie einer Variablen einen Wert zuweisen x = 3. Hier ist 3 ein Objekt und wird an einer Speicherstelle (RAM) gespeichert. Diese Speicherstelle ist eine benannte Speicherstelle, auf die unter dem Namen x zugegriffen werden könnte. Die Adresse dieses Objekts (3) kann mit der eingebauten Funktion id() ermittelt werden.

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

Hier wird nun das Objekt 3 in einer Speicherstelle mit dem Namen x gespeichert, und somit ist die Adresse beider gleich.

Wenn Sie den Wert von x einer anderen Variablen zuweisen, sagen wir y, und den Wert von x ändern, dann wird x einen neuen Ort haben und y den Ort des vorherigen x. Dies wird unten demonstriert:

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

Sie können hier sehen, dass die Adresse von y gleich der des alten x ist.

Namensraum in Python

Ein Namensraum ist eine Sammlung von Namen. Ein Namensraum ist eine Abbildung von Namen auf ein Objekt und ist in Python als Dictionary implementiert. Namensräume stellen sicher, dass jeder in einem Programm verwendete Name eindeutig ist.

Namensräume werden beim Start des Interpreters angelegt und nach Beendigung der Programmausführung gelöscht. Dieser Namespace enthält alle eingebauten Namen, so dass Sie immer dann, wenn Sie eine eingebaute Funktion wie z.B. id() benötigen, diese direkt in Ihrem Programm verwenden können.

Wenn Sie eine Funktion aufrufen, wird ein lokaler Namespace erzeugt, der alle definierten Namen enthält.

Variablenbereich in Python

Wenn Sie eine Variable in Ihrem Programm erstellen, haben Sie möglicherweise nicht von jedem Teil des Programms aus Zugriff auf diese Variable. Dies liegt am Umfang von Variablen. Sie versuchen, auf Variablen aus dem Namensraum zuzugreifen, in dem sie nicht definiert sind.

Ein Bereich kann als ein Ort definiert werden, von dem aus Sie ohne Präfix auf Ihren Namensraum zugreifen können.

Der Scope kann kategorisiert werden als:

  1. Scope einer Funktion, bei der Sie lokale Namen haben.
  2. Scope eines Moduls, in dem Sie globale Variablen haben.
  3. Äußerster Scope, wo Sie eingebaute Namen haben.

Wenn Sie eine Referenz innerhalb einer Funktion erstellen, wird diese zuerst im lokalen und dann im globalen Namensraum gesucht; wenn sie nirgendwo gefunden wird, wird sie im eingebauten Namensraum gesucht.

Wenn Sie eine verschachtelte Funktion erstellen, haben Sie einen neuen Bereich innerhalb des lokalen Bereichs.

Verwendung von Scope und Namensraum in Python

def outer():
    x = 12

    def inner():
        y = 13


z = 14

Hier wird eine verschachtelte Funktion definiert (Funktion innerhalb einer anderen Funktion). Die Variable y befindet sich im verschachtelten lokalen Namensraum der inneren Funktion, die Variable x im lokalen Namensraum der äußeren Funktion und die Variable z im globalen Namensraum.

Wenn sie sich innerhalb der inneren Funktion befindet, ist die Variable y eine lokale Variable, x ist nicht-lokal und z ist global. Die innere Funktion hat keinen Zugriff auf nicht-lokale x und globale z Variablen.

Autor: 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