English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In diesem Artikel werden Sie Namensräume, die Zuordnung von Namen zu Objekten und den Gültigkeitsbereich von Variablen kennenlernen.
Wenn SieEin Namensraum ist eine großartige Idee-Lassen Sie uns mehr tun!Was sind diese geheimnisvollen Namensräume? Lassen Sie uns zunächst sehen, was ein Name ist.
Name (auch bekannt als Identifikator) ist der Name, der einem Objekt gegeben wird. In Python ist allesObjektDas ist eine Möglichkeit, auf das Grundobjekt zuzugreifen.
z.B. wenn wir eine Zuweisung durchführen, a = 2,2ist ein im Speicher gespeichertes Objekt, währendaist der zugehörige Name. Wir können durchBuiltin-Funktionen Adresse einiger Objekte (im RAM) mit id() abrufen. Lassen Sie uns sehen, wie man das macht.
# Hinweis: Sie könnten unterschiedliche ID-Werte erhalten a = 2 print('id(2) =', id(2)) print('id(a) =', id(a))
Output result
id(2) = 9302208 id(a) = 9302208
Hier beziehen sich beide auf das gleiche Objekt2daher haben sie die gleiche id(). Lassen Sie uns etwas Spannendes tun.
# Hinweis: Sie könnten unterschiedliche ID-Werte erhalten 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))
Output result
id(a) = 9302208 id(a) = 9302240 id(3) = 9302240 id(b) = 9302208 id(2) = 9302208
What happened in the above step sequence? Let's explain it with a diagram:
Initially, an object is created2and associated with the name a, when we execute a = a + 1When, a new object will be created3,now a is associated with the object
Please note that id(a) and id(3)has the same value.
In addition, when executing b = 2When, the new name b is associated with the previous object2Associated.
This is valid because Python does not have to create a new duplicate object. This dynamic feature of name binding makes Python powerful. Names can refer to any type of object.
>>> a = 5 >>> a = 'Hello World!' >>> a = [1,2,3]
All of these are valid, andaWe will refer to three different types of objects in different examples.FunctionThey are also objects, so names can also refer to them.
def printHello(): print("Hello") a = printHello a()
Output result
Hello
The same nameaWe can refer to a function, and we can use the name to call the function.
Now that we understand what a name is, we can continue with the concept of namespace.
In short, a namespace is a collection of names.
In Python, you can imagine a namespace as a mapping from each defined name to the corresponding object.
Different namespaces can coexist at a given time, but they are completely isolated.
When we start the Python interpreter, a namespace containing all built-in names is created, and this namespace will exist as long as the interpreter is running.
This is why built-in functions (such as id()) and print() can always be used from any part of the program. EachModuleCreate your own global namespace.
These different namespaces are isolated. Therefore, the same names that may exist in different modules will not conflict.
Modules can have various functions and classes. A local namespace is created when a function is called, where all names are defined. Similar to classes. The following diagram may help clarify this concept.
Despite defining various unique namespaces, we may not be able to access them from every part of the program. The concept of scope comes into play.
Der Scope ist ein Teil des Programms, von wo aus der Zugriff auf Namensräume ohne Präfix direkt möglich ist.
Es gibt immer mindestens drei verschachtelte Scopes.
Der Scope der aktuellen Funktion mit lokalen Namen
Der Scope des Moduls mit globalen Namen
Der äußerste Scope mit eingebetteten Namen
Bei Referenzen im Funktionsinneren wird im lokalen Namensraum nach dem Namen gesucht, dann im globalen Namensraum und schließlich im eingebetteten Namensraum.
Wenn eine Funktion eine andere Funktion enthält, liegt der neue Scope innerhalb des lokalen Scopes.
def outer_function(): b = 20 def inner_func(): c = 30 a = 10
Hier ist die Variableaim globalen Namensraum. Variablenbim lokalen Namensraum von outer_function() währendcim inneren lokalen Namensraum von inner_function().
Wenn wircin unserem lokalenbnicht-lokalaglobal. Wir könnencneue Werte lesen und zuweisen, aber nurbundainner_function()。
Wenn wir versuchen, als Wert zu zuweisenb, eine neue VariablebIm lokalen Namensraum wird anders als im nicht-lokalen erstelltb. Wenn wir einen Wert zuweisen, geschieht dasselbeEin.
aber wenn wiraAls globaler a deklariert, werden alle Referenzen und Zuweisungen in den globalen Bereich verschobenaGleichzeitig, wenn wir die Variable neu binden möchtenbMuss als nicht-lokale Variable deklariert werden. Der folgende Beispiel wird dies weiter erläutern.
def outer_function(): a = 20 def inner_function(): a = 30 print('a = inner_function() print('a = a = 10 print('a =
Wie Sie sehen können, ist die Ausgabe des Programms:
a = 30 a = 20 a = 10
In diesem Programm wurden in verschiedenen Namensräumen drei verschiedene Variablen definiertaund entsprechenden Zugriff durchgeführt. In folgendem Programm:
def outer_function(): global a a = 20 def inner_function(): global a a = 30 print('a = inner_function() print('a = a = 10 print('a =
Die Ausgabe des Programms ist.
a = 30 a = 30 a = 30
Hier, da der Schlüsselwort global verwendet wurde, richten sich alle Referenzen und Zuweisungen auf den globalen a.