Heim > Artikel > Backend-Entwicklung > Detaillierte Erläuterung von fünf Wissenspunkten, um den Umfang von Python leicht zu verstehen
Es gibt viele Einführungen in den Umfang von Python im Internet. Der Artikel, den ich heute mit Ihnen teile, ermöglicht es Ihnen, den Umfang von Python durch das Erlernen dieser 5 Wissenspunkte leicht zu verstehen.
">
1. Bereich auf Blockebene
Überlegen Sie, ob zu diesem Zeitpunkt eine Ausgabe erfolgt, wenn das folgende Programm ausgeführt wird? Wird die Ausführung erfolgreich sein?
#Bereich auf Blockebene
if 1 == 1:
name = "lzl"
print(name)
for i in range( 10):
age = i
print(age)
Werfen wir zunächst einen Blick auf die Ausführungsergebnisse
C:/Users/L /PycharmProjects/s14/preview/ Day8/scope/main.py
lzl
9
Prozess mit Exit-Code 0 abgeschlossen
Der Code wurde erfolgreich ausgeführt, kein Problem; Java/C#, führen Sie den oben genannten Code aus, der darauf hinweist, dass Name und Alter nicht definiert sind, aber er kann in Python erfolgreich ausgeführt werden. Dies liegt daran, dass es in Python keinen Bereich auf Blockebene gibt extern, damit es erfolgreich ausgeführt werden kann.
2. Lokaler Bereich
Wenn wir auf das Wissen zurückblicken, das wir zuvor gelernt haben, war die Funktion ein separater Bereich -Level-Bereich in Python, aber es gibt einen lokalen Bereich; schauen Sie sich den folgenden Code an:
#Lokaler Bereich
def func():
name = "lzl"
print(name)
Führen Sie diesen Abschnittscode aus, überlegen Sie, ob eine Ausgabe erfolgt?
Traceback (letzter Aufruf zuletzt):
Datei „C:/Users/L /PycharmProjects/s14/preview/Day8/scope/main.py ", Zeile 23, in
print(name)
NameError: name 'name' ist nicht definiert
Wird ausgeführt Fehler, ich glaube, das kann jeder verstehen, die Namensvariable ist nur intern wirksam, daher kann sie nicht global aufgerufen werden. Nehmen Sie eine einfache Anpassung am obigen Code vor und sehen Sie, was das Ergebnis ist 🎜>#Lokaler Bereich
def func ():
name = "lzl"
func() #Funktion ausführen
print(name)
hinzugefügt einen Code zum vorherigen Code vor dem Drucken des Variablennamens, führen Sie die Funktion aus. Wird es zu diesem Zeitpunkt irgendwelche Änderungen beim Drucken geben
Traceback (letzter Aufruf zuletzt):
Datei „C:/“ Users/L/PycharmProjects/s14/preview/Day8/Function Domain/main.py“, Zeile 23, in print(name)
NameError: name 'name' is not definiert
Die Ausführung meldet immer noch einen Fehler, also kehren Sie zum vorherigen Satz zurück. Wörter: Auch wenn die Funktion ausgeführt wird, liegt der Gültigkeitsbereich des Namens nur innerhalb der Funktion und kann immer noch nicht von außen aufgerufen werden. Denken Sie an die ersten beiden Wissenspunkte und beginnen Sie dann mit der Erweiterung des Tricks
3. Scope Chain
Nehmen Sie Anpassungen an der Funktion vor und sehen Sie, was das Ausführungsergebnis des folgenden Codes ist?
#Scope-Kette
name = "lzl"
def f1():
name = "Eric"
def f2():
name = " Snor"
print(name)
f2()
f1()
Wenn Sie Funktionen gelernt haben, müssen Sie wissen, dass Snor nach der Ausführung von f1() ausgegeben wird; erinnern wir uns Zuerst ein Konzept, es gibt eine Bereichskette in Python, Variablen werden von innen nach außen durchsucht, gehen Sie zuerst zu Ihrem eigenen Bereich, um sie zu finden, und Sie werden nicht auf die übergeordnete Ebene gehen, um sie zu finden, bis Sie sie nicht finden können und einen Fehler melden
4. Ultimativer Umfang
Okay, genug Vorbereitung, die ultimative Version ist da~~
#Ultimate Version Umfang
name = "lzl"
def f1( ):
print(name)
def f2():
name = "eric"
f1()
f2()
denken Sie: Möchten Sie „lzl“ oder „eric“ als endgültiges Ausführungsergebnis von f2() ausgeben? Merken Sie sich Ihre Antwort. Veröffentlichen Sie die Antwort jetzt nicht. Schauen Sie sich den folgenden Code an:
#ULTIMATE SCOPE
name = "lzl"
def f1(). :
print(name)
def f2():
name = "eric"
return f1
ret = f2()
ret()
#Ausgabe: Das Ausführungsergebnis von lzl
ist „lzl“. Das Ausführungsergebnis von f2() ist die Speicheradresse der Funktion f1, also ret=f1 ; Die Ausführung von ret() entspricht der Ausführung von f1(), es hat jedoch nichts damit zu tun, dass sich f2() in derselben Gültigkeitsbereichskette befindet Innerhalb der Funktion wird danach gesucht, daher ist der Wert des Zeitvariablennamens „lzl“. Wenn Sie dies verstehen, wissen Sie auch, dass die Antwort auf den ultimativen Code gerade nicht gegeben wurde
#Ultimate Version Scope
name = "lzl"
def f1():
print(name)
def f2():
name = "eric"
f1()
f2 ()
# Ausgabe: lzl
Ja, die Ausgabe ist „lzl“. Denken Sie daran, dass vor der Ausführung der Funktion der Bereich gebildet und auch die Bereichskette generiert wurde
5. Sina-Interviewfragen
li = [lambda :x für x im Bereich(10)]
Bestimmen Sie den Typ von li? Welcher Art sind die Elemente in li?
print(type(li))
print(type(li[0]))
#
#
Sie können sehen, dass li ein Listentyp ist und die Elemente in der Liste Funktionen sind. Geben Sie dann den Rückgabewert des ersten Elements in der Liste aus.
#lambada-Interviewfragen
li = [lambda :x für x im Bereich(10)]
res = li[0]()
print(res )
#Ausgabe: 9
liDer Rückgabewert der ersten Funktion ist 9, nicht 0. Denken Sie daran: Der interne Code wird nicht ausgeführt, bevor die Funktion ausgeführt wird Sie können es selbst üben und Ihren Eindruck vertiefen
Zusammenfassung
Das Obige ist der gesamte Inhalt dieses Artikels. Ich weiß nicht, ob es für das Lernen und Arbeiten von jedem hilfreich sein kann Wenn Sie Fragen haben, können Sie Nachrichten zur Kommunikation hinterlassen.
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung von fünf Wissenspunkten, um den Umfang von Python leicht zu verstehen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!