kaytec hat geschrieben:Habe mal den gleichen Fehler in die neue Funktion eingebaut. Ich erzeuge die Liste a und verändere sie lokal in der Funktion. Global ist sie aber noch als 'leere' Liste vorhanden. Diese Liste wird dann auch so ausgegeben ?
Natürlich wird die die modulglobale Liste unter dem Namen ``a`` nicht verändert. Wenn du zu ``a`` etwas in einem Funktionsscope (Namensraum) zuweist, wird die globale Variable "überdeckt" und nicht überschrieben. Dies ist das Standardverhalten von Python und es ist auch gut so. Es gibt aber die Möglichkeit Globale Variablen zu überschrieben: sollte man aber wirklich, wirklich
nur in Ausnahmefällen tun! Das macht das Programm wesentlich weniger verständlich.
So sieht es mit überschreiben globaler Variablen aus:
Code: Alles auswählen
import random
a = list()
def erzeuge():
global a
random_number = range(1, 10)
random.shuffle(random_number)
a = random_number
return a
b = erzeuge()
print a
print b
Übrigens, so etwas geht auch:
Code: Alles auswählen
import random
a = list()
def erzeuge(a):
random_number = range(1, 10)
random.shuffle(random_number)
a.extend(random_number)
erzeuge(a)
print a
Da ``a`` eine Liste ist und Listen mutabel (also veränderlich) sind, kann man an sie etwas anhängen, ohne ``global`` Schlüsselwort. Das liegt daran, dass im ersten Code die Liste ``a`` mit einer
neuen Liste überschrieben wird und im zweiten Beispiel wird an die Liste a nur etwas drangehängt - ohne eine neue Liste zu erstellen.