Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung von fünf Wissenspunkten, um den Umfang von Python leicht zu verstehen

Detaillierte Erläuterung von fünf Wissenspunkten, um den Umfang von Python leicht zu verstehen

高洛峰
高洛峰Original
2017-03-28 15:09:571287Durchsuche

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!

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