Heim  >  Artikel  >  Backend-Entwicklung  >  nichtlokales Schlüsselwort in Python

nichtlokales Schlüsselwort in Python

高洛峰
高洛峰Original
2016-10-20 09:42:532345Durchsuche

In diesem Artikel stellen wir die Verwendung von „Pythons Schließung und Nichtlokal“ vor, da „Nichtlokal“ ein neues Schlüsselwort in Python3.0 ist und von Python2.x nicht unterstützt wird. Der Artikel schlägt vor, das eingebettete Problem in Python2.x zu lösen Die einzige Möglichkeit, externe Variablen aus einer Reihe von Funktionen zu referenzieren, besteht darin, das globale Schlüsselwort zum Definieren globaler Variablen zu verwenden. Eine andere mögliche Lösung besteht darin, eine Liste oder ein Wörterbuch anstelle des zu bearbeitenden Schlüsselworts zu verwenden.

Beispiele sind wie folgt:

1.python3.0 mit nicht-lokalen Schlüsselwörtern

>>> def outer():
        x = 1
        def inner():
            nonlocal x
            x = 2
            print("inner:", x)
        inner()
        print("outer:", x)
  
 >>> outer()
 inner: 2
 outer: 2

2.python2. x Verwenden Sie list oder dict, um

>>> def outer():
        x = [1]
        def inner():
            x[0] += 1 #修改x[0]保存的值
            print("inner:", x[0])
        inner()
        print("outer:", x[0])
 >>> outer()
 inner: 2
 outer: 2


Weitere Referenzen:

1. //stackoverflow.com/questions/1261875/python-nonlocal-statement

2. Ähnlichkeiten und Unterschiede zwischen der Bereichskettendefinition in Javascript und dem Python-Bereich

3.Offizielle Dokumentation:

„Die nicht-lokale Anweisung bewirkt, dass die aufgelisteten Bezeichner auf zuvor gebundene Variablen im nächstgelegenen umschließenden Bereich verweisen. Dies ist wichtig, da das Standardverhalten für die Bindung darin besteht, zuerst den lokalen Namespace zu durchsuchen. Die Anweisung ermöglicht es gekapseltem Code, Variablen außerhalb des Bereichs erneut zu binden lokaler Bereich neben dem globalen (Modul-)Bereich.

Namen, die in einer nicht-lokalen Anweisung aufgeführt sind, müssen sich im Gegensatz zu den in einer globalen Anweisung aufgeführten Namen auf bereits vorhandene Bindungen in einem umschließenden Bereich beziehen (dem Bereich, in dem eine neue Bindung erstellt wird). erstellt werden soll, kann nicht eindeutig bestimmt werden).

Namen, die in einer nicht-lokalen Anweisung aufgeführt sind, dürfen nicht mit bereits vorhandenen Bindungen im lokalen Bereich kollidieren.“


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