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)
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.
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.
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)
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.
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