wake-up-neo.com

Python-globale/lokale Variablen

Warum funktioniert dieser Code:

var = 0

def func(num):
    print num
    var = 1
    if num != 0:
        func(num-1)

func(10)

diese gibt jedoch den Fehler "lokale Variable 'var' vor der Zuweisung referenziert":

var = 0

def func(num):
    print num
    var = var
    if num != 0:
        func(num-1)

func(10)
10
JJ Beck

Da Sie im ersten Code eine lokale Variable var erstellt und deren Wert verwendet haben, verwenden Sie im zweiten Code die lokale Variable var, ohne sie zu definieren.

Wenn Sie also Ihre 2. Funktion zum Laufen bringen wollen, müssen Sie Folgendes angeben: -

global var

in der Funktion vor der Verwendung von var.

def func(num):
    print num
    var = 1  <--  # You create a local variable
    if num != 0:
        func(num-1)

Während in diesem Code: 

def func(num):
    print num
    var = var <--- # You are using the local variable on RHS without defining it
    if num != 0:
        func(num-1)

UPDATE: -

Gemäß dem Kommentar von @ Tim sollten Sie jedoch keine Variable global in Ihren Funktionen verwenden. Definieren Sie Ihre Variable vielmehr vor der Verwendung, um sie in local scope zu verwenden. Im Allgemeinen sollten Sie versuchen, den Geltungsbereich Ihrer Variablen in limit und sogar in local-Namespace local im Geltungsbereich lokaler Variablen zu limit zu verweisen, da Ihr Code dadurch leichter verständlich wird. 

Je mehr Sie den Gültigkeitsbereich Ihrer Variablen vergrößern, desto größer ist die Wahrscheinlichkeit, dass sie von der externen Quelle verwendet wird, wenn sie nicht verwendet werden muss.

9
Rohit Jain

Wenn Sie var = ... irgendwo in einer Funktion haben, wird der Name "var" als lokale Variable für die gesamte Funktion behandelt, unabhängig davon, wo diese Zuweisung erfolgt. Dies bedeutet, dass alle Vorkommen von var in Ihrer Funktion im lokalen Gültigkeitsbereich aufgelöst werden. Daher führt die rechte Seite von var = var zu dem vor dem Zuweisungsfehler referenzierten Fehler, da var noch nicht im Funktionsumfang der Funktion initialisiert wurde.

6
Andrew Clark

In Ihrem zweiten Code haben Sie eine lokale Variable in RHS erstellt, und ohne sie zu definieren, weisen Sie sie der LHS-Variablen var zu, die global ist (eine außerhalb der Funktion definierte Variable wird explizit als global betrachtet). 

Wenn Sie beabsichtigen, eine lokale Variable innerhalb der Funktion zu erstellen und sie dem Wert der globalen Variablen zuzuweisen, führt dies zu einem Trick:

var = 0

def func(num):
    print num
    func.var = var # func.var is referring the local
                   # variable var inside the function func
    if num != 0:
        func(num-1)

func(10)
0
TechnoTech

Sie können ein globales Objekt lesen, ohne es global zu deklarieren. Aber um ein globales zu schreiben, müssen Sie es als global deklarieren.

0
user1277476
def runscan(self):
    p = os.popen('LD_PRELOAD=/usr/libv4l/v4l1compat.so zbarcam
                /dev/video0','r')

def input(self):
    self.entryc.insert(END, code)

wie wäre es damit? Ich möchte lokalen Code für die nächste Funktion verwenden, um das Ergebnis des Barcodes in meine Tkinter entryBox einzufügen. Danke