Heim Backend-Entwicklung Python-Tutorial Parsen von Python-Namespace-Instanzen

Parsen von Python-Namespace-Instanzen

Oct 19, 2016 pm 05:19 PM
python

Der Namespace von Python ist etwas, das Python-Programmierer verstehen müssen. Wenn wir etwas über den Namespace von Python lernen, können wir im Wesentlichen einige triviale Regeln in Python beherrschen.

Als nächstes werde ich das Wesentliche von Python-Namespaces enthüllen: 1. Die Definition des Namespace; 2. Die Suchreihenfolge des Namespace; 4. Durch locals() und globals() BIF-Zugriffsnamespace

Der Fokus liegt auf dem vierten Teil, in dem wir den Inhalt des Namespace beobachten.

1. Namespace

Python verwendet einen sogenannten Namespace, um den Verlauf von Variablen aufzuzeichnen. Ein Namespace ist ein Wörterbuch, dessen Schlüssel Variablennamen und dessen Werte die Werte dieser Variablen sind.

Ein Namespace ist eine Zuordnung von Namen zu Objekten. Die meisten Namespaces werden derzeit als Python-Wörterbücher implementiert.


Überall in einem Python-Programm gibt es mehrere verfügbare Namespaces.

1. Jede Funktion verfügt über einen eigenen Namensraum, den sogenannten lokalen Namensraum, der die Variablen der Funktion aufzeichnet, einschließlich Funktionsparametern und lokal definierten Variablen.

2. Jedes Modul verfügt über einen eigenen Namensraum, den sogenannten globalen Namensraum, der die Variablen des Moduls aufzeichnet, einschließlich Funktionen, Klassen, andere importierte Module, Variablen und Konstanten auf Modulebene.

3. Es gibt auch einen integrierten Namensraum, auf den jedes Modul zugreifen kann. Er speichert integrierte Funktionen und Ausnahmen.


2. Namespace-Suchreihenfolge

Wenn eine Codezeile den Wert der Variablen x verwendet, sucht Python in allen verfügbaren Namespaces die folgende Reihenfolge:

1. Lokaler Namespace: Bezieht sich speziell auf die Methode der aktuellen Funktion oder Klasse. Wenn die Funktion eine lokale Variable x oder einen Parameter x definiert, verwendet Python diese und beendet dann die Suche.

2. Globaler Namespace: Bezieht sich speziell auf das aktuelle Modul. Wenn das Modul eine Variable, Funktion oder Klasse mit dem Namen x definiert, verwendet Python diese und beendet dann die Suche.

3. Integrierter Namespace: global für jedes Modul. Als letzten Ausweg geht Python davon aus, dass x eine integrierte Funktion oder Variable ist.

4. Wenn Python x in diesen Namespaces nicht finden kann, gibt es die Suche ab und löst eine NameError-Ausnahme aus, z. B. NameError: Name 'aa' ist nicht definiert.


Situation mit verschachtelten Funktionen:

1. Suchen Sie zuerst nach

2. Suchen Sie dann nach

im Namensraum der übergeordneten Funktion 3. Suchen Sie dann nach

im Modul-Namensraum 4. Suchen Sie schließlich nach


Beispiel:

info = "Adress : "
 def func_father(country):
     def func_son(area):
         city= "Shanghai " #此处的city变量,覆盖了父函数的city变量
         print(info + country + city + area)
     city = " Beijing "
     #调用内部函数
     func_son("ChaoYang ");
    
 func_father("China ")
Nach dem Login kopieren


Ausgabe: Adresse: China Shanghai ChaoYang

Im obigen Beispiel befindet sich „Info“ im globalen Namensraum, „Land“ im Namensraum der übergeordneten Funktion und „Stadt“ und „Gebiet“ im Namensraum der eigenen Funktion



3. Namespace-Lebenszyklus

Verschiedene Namespaces werden zu unterschiedlichen Zeiten erstellt und haben unterschiedliche Lebensdauern.

1. Der integrierte Namespace wird beim Start des Python-Interpreters erstellt und bleibt immer erhalten und wird nicht gelöscht.

2. Der globale Namensraum des Moduls wird erstellt, wenn die Moduldefinition eingelesen wird. Normalerweise wird der Modul-Namensraum gespeichert, bis der Interpreter beendet wird.

3. Beim Aufruf der Funktion wird ein lokaler Namespace erstellt und gelöscht, wenn die Funktion ein Ergebnis zurückgibt oder eine Ausnahme auslöst. Jede rekursiv aufgerufene Funktion hat ihren eigenen Namensraum.


Eines der Besonderheiten von Python ist, dass seine Zuweisungsoperationen immer im innersten Bereich erfolgen. Durch die Zuweisung werden die Daten nicht kopiert, sondern lediglich der Name an das Objekt gebunden. Das Gleiche gilt für das Löschen: „del y“ löscht einfach den Namen y aus dem Namensraum des lokalen Bereichs. Tatsächlich werden alle Operationen, die neue Namen einführen, im lokalen Bereich ausgeführt.

Beispiel:

i=1

def func2():

i=i 1


func2();

#Error: UnboundLocalError: Lokale Variable 'i', auf die vor der Zuweisung verwiesen wird

Beim Erstellen eines Namespace überprüft Python den Code und füllt den lokalen Namespace aus. Bevor Python diese Codezeile ausführt, findet es die Zuweisung zu i und fügt sie dem lokalen Namespace hinzu. Wenn die Funktion ausgeführt wird, geht der Python-Interpreter davon aus, dass sich i im lokalen Namespace befindet, aber keinen Wert hat, sodass ein Fehler auftritt.

def func3():

y=123

del y

print(y)

func3()

#Fehler: UnboundLocalError: Auf die lokale Variable 'y' wurde vor der Zuweisung verwiesen

#Nach dem Entfernen der „del y“-Anweisung wird sie normal ausgeführt


4. Namespace-Zugriff

1. Auf lokale Namespaces kann mit locals() BIF zugegriffen werden.

locals gibt ein Wörterbuch mit Name/Wert-Paaren zurück. Die Schlüssel dieses Wörterbuchs sind Variablennamen in Form einer Zeichenfolge, und die Werte des Wörterbuchs sind die tatsächlichen Werte der Variablen.

Beispiel:

def func1(i, str ):

x = 12345

print(locals())


func1(1, „first“)

输出:{'str': 'first', 'x': 12345, 'i': 1}


2、全局 (模块级别)命名空间可以通过 globals() BIF来访问。

示例:

'''Created on 2013-5-26'''
   
import copy
from copy import deepcopy
   
gstr = "global string"
   
def func1(i, info):
    x = 12345
    print(locals())
   
func1(1 , "first")
   
if __name__ == "__main__":
    print("the current scope's global variables:")
    dictionary=globals()
    print(dictionary)
Nach dem Login kopieren


输出:(我自己给人为的换行、更换了顺序,加颜色的语句下面重点说明)

{

'__name__': '__main__',

'__doc__': 'Created on 2013-5-26',

'__package__': None,

'__cached__': None,

'__file__': 'E:\\WorkspaceP\\Test1\\src\\base\\test1.py',

'__loader__': <_frozen_importlib.SourceFileLoader object at 0x01C702D0>,

'copy': ,

'__builtins__': ,

'gstr': 'global string',

'dictionary': {...},

'func1': ,

'deepcopy':

}


总结

  1、模块的名字空间不仅仅包含模块级的变量和常量,还包括所有在模块中定义的函数和类。除此以外,它还包括了任何被导入到模块中的东西。

  2、我们看到,内置命名也同样被包含在一个模块中,它被称作 __builtin__。

  3、回想一下 from module import 和 import module 之间的不同。

    使用 import module,模块自身被导入,但是它保持着自已的名字空间,这就是为什么您需要使用模块名来访问它的函数或属性:module.function 的原因。

    但是使用 from module import function,实际上是从另一个模块中将指定的函数和属性导入到您自己的名字空间,这就是为什么您可以直接访问它们却不需要引用它们所来源的模块。使用 globals 函数,您会真切地看到这一切的发生,见上面的红色输出语句。


3、 locals 与 globals 之间的一个重要的区别

locals 是只读的,globals 不是

示例:

def func1(i, info):
    x = 12345
    print(locals())
    locals()["x"]= 6789
    print("x=",x)
   
y=54321
func1(1 , "first")
globals()["y"]= 9876
print( "y=",y)
Nach dem Login kopieren

   


输出:

{'i': 1, 'x': 12345, 'info': 'first'}

x= 12345

y= 9876

解释:

  locals 实际上没有返回局部名字空间,它返回的是一个拷贝。所以对它进行改变对局部名字空间中的变量值并无影响。

  globals 返回实际的全局名字空间,而不是一个拷贝。所以对 globals 所返回的 dictionary 的任何的改动都会直接影响到全局变量。


Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Python: Spiele, GUIs und mehr Python: Spiele, GUIs und mehr Apr 13, 2025 am 12:14 AM

Python zeichnet sich in Gaming und GUI -Entwicklung aus. 1) Spielentwicklung verwendet Pygame, die Zeichnungen, Audio- und andere Funktionen bereitstellt, die für die Erstellung von 2D -Spielen geeignet sind. 2) Die GUI -Entwicklung kann Tkinter oder Pyqt auswählen. Tkinter ist einfach und einfach zu bedienen. PYQT hat reichhaltige Funktionen und ist für die berufliche Entwicklung geeignet.

PHP und Python: Vergleich von zwei beliebten Programmiersprachen PHP und Python: Vergleich von zwei beliebten Programmiersprachen Apr 14, 2025 am 12:13 AM

PHP und Python haben jeweils ihre eigenen Vorteile und wählen nach den Projektanforderungen. 1.PHP ist für die Webentwicklung geeignet, insbesondere für die schnelle Entwicklung und Wartung von Websites. 2. Python eignet sich für Datenwissenschaft, maschinelles Lernen und künstliche Intelligenz mit prägnanter Syntax und für Anfänger.

Wie Debian Readdir sich in andere Tools integriert Wie Debian Readdir sich in andere Tools integriert Apr 13, 2025 am 09:42 AM

Die Readdir -Funktion im Debian -System ist ein Systemaufruf, der zum Lesen des Verzeichnisgehalts verwendet wird und häufig in der C -Programmierung verwendet wird. In diesem Artikel wird erläutert, wie Readdir in andere Tools integriert wird, um seine Funktionalität zu verbessern. Methode 1: Kombinieren Sie C -Sprachprogramm und Pipeline zuerst ein C -Programm, um die Funktion der Readdir aufzurufen und das Ergebnis auszugeben:#include#include#includeIntmain (intargc, char*argv []) {Dir*Dir; structDirent*Eintrag; if (argc! = 2) {{

Python und Zeit: Machen Sie das Beste aus Ihrer Studienzeit Python und Zeit: Machen Sie das Beste aus Ihrer Studienzeit Apr 14, 2025 am 12:02 AM

Um die Effizienz des Lernens von Python in einer begrenzten Zeit zu maximieren, können Sie Pythons DateTime-, Zeit- und Zeitplanmodule verwenden. 1. Das DateTime -Modul wird verwendet, um die Lernzeit aufzuzeichnen und zu planen. 2. Das Zeitmodul hilft, die Studie zu setzen und Zeit zu ruhen. 3. Das Zeitplanmodul arrangiert automatisch wöchentliche Lernaufgaben.

So konfigurieren Sie den HTTPS -Server in Debian OpenSSL So konfigurieren Sie den HTTPS -Server in Debian OpenSSL Apr 13, 2025 am 11:03 AM

Das Konfigurieren eines HTTPS -Servers auf einem Debian -System umfasst mehrere Schritte, einschließlich der Installation der erforderlichen Software, der Generierung eines SSL -Zertifikats und der Konfiguration eines Webservers (z. B. Apache oder NGINX) für die Verwendung eines SSL -Zertifikats. Hier ist eine grundlegende Anleitung unter der Annahme, dass Sie einen Apacheweb -Server verwenden. 1. Installieren Sie zuerst die erforderliche Software, stellen Sie sicher, dass Ihr System auf dem neuesten Stand ist, und installieren Sie Apache und OpenSSL: sudoaptupdatesudoaptupgradesudoaptinsta

Nginx SSL -Zertifikat -Aktualisierung Debian Tutorial Nginx SSL -Zertifikat -Aktualisierung Debian Tutorial Apr 13, 2025 am 07:21 AM

In diesem Artikel werden Sie begleitet, wie Sie Ihr NginXSSL -Zertifikat auf Ihrem Debian -System aktualisieren. Schritt 1: Installieren Sie zuerst CertBot und stellen Sie sicher, dass Ihr System Certbot- und Python3-CertBot-Nginx-Pakete installiert hat. If not installed, please execute the following command: sudoapt-getupdatesudoapt-getinstallcertbotpython3-certbot-nginx Step 2: Obtain and configure the certificate Use the certbot command to obtain the Let'sEncrypt certificate and configure Nginx: sudocertbot--nginx Follow the prompts to select

Gitlabs Plug-in-Entwicklungshandbuch zu Debian Gitlabs Plug-in-Entwicklungshandbuch zu Debian Apr 13, 2025 am 08:24 AM

Die Entwicklung eines Gitlab -Plugins für Debian erfordert einige spezifische Schritte und Kenntnisse. Hier ist ein grundlegender Leitfaden, mit dem Sie mit diesem Prozess beginnen können. Wenn Sie zuerst GitLab installieren, müssen Sie GitLab in Ihrem Debian -System installieren. Sie können sich auf das offizielle Installationshandbuch von GitLab beziehen. Holen Sie sich API Access Token, bevor Sie die API -Integration durchführen. Öffnen Sie das GitLab -Dashboard, finden Sie die Option "AccessTokens" in den Benutzereinstellungen und generieren Sie ein neues Zugriffs -Token. Wird generiert

Welcher Dienst ist Apache Welcher Dienst ist Apache Apr 13, 2025 pm 12:06 PM

Apache ist der Held hinter dem Internet. Es ist nicht nur ein Webserver, sondern auch eine leistungsstarke Plattform, die enormen Datenverkehr unterstützt und dynamische Inhalte bietet. Es bietet eine extrem hohe Flexibilität durch ein modulares Design und ermöglicht die Ausdehnung verschiedener Funktionen nach Bedarf. Modularität stellt jedoch auch Konfigurations- und Leistungsherausforderungen vor, die ein sorgfältiges Management erfordern. Apache eignet sich für Serverszenarien, die hoch anpassbare und entsprechende komplexe Anforderungen erfordern.

See all articles