Seite 1 von 2

Definitionen

Verfasst: Mittwoch 8. März 2006, 16:51
von oscar15
Hallo noch maa!!

Hätte da wieder eine Frage!!

Ich habe jetzt eine Definition, doch ich bekomme meine zugewiesenen Werte nicht aus der Definition "raus"!!

Code: Alles auswählen

def test():
    a = 1
    b = 2

print test()
test()



Aber nun bekomme ich sie weder mit, oder ohne, print raus!!

Verfasst: Mittwoch 8. März 2006, 16:59
von modelnine
Das ist keine Definition, das ist eine Funktion, und Du deklarierst Variablen im Funktions-Namensraum. Der ist von außen nicht zugreifbar (da er eh nur besteht wenn die Funktion gerade läuft, und jedes mal anders ist/sein kann).

Was willst Du machen? Dann kann man Dich eher auf eine mögliche Art und Weise wie das ganze zu funktionieren hat hinweisen. Nur so ein paar Stichwörter in den Raum geworfen: global, return...

Verfasst: Mittwoch 8. März 2006, 17:00
von Rebecca
Eine Funktion ist nicht dazu da, Daten zu speichern. Sie fuehrt nur etwas aus, und wenn die Funktion zu ende ist, werden a und b wieder geloescht, wenn man sie nicht an den aufrufer zurueckgibt.
Schau dir mal das an:

Code: Alles auswählen

def test():
    a=1
    b=2
    print a
    print b

test()

Code: Alles auswählen

def test():
    a=1
    b=2
    return (a, b)

print test()
EDIT: Vielleicht wills du ja auch Klassen definieren???

Verfasst: Mittwoch 8. März 2006, 17:06
von oscar15
ich will eine zuweisung erstellen, damit ich später auf sie zugreifen kann! Die Variabeln werden aber noch von anderen Zuweisungen benutzt.

Verfasst: Mittwoch 8. März 2006, 17:08
von modelnine

Code: Alles auswählen

def test():
    global a, b
    a, b = 10, 20

a, b = 5, 10
print a, b
test()
print a, b
Das ungefähr was Du willst? Das ist aber alles andere als sauber. Siehe Rebeccas zweite Beispiel mit dem return (a,b), was Du dann auch im Hauptprogramm zuweisen kannst, was erheblich besser ist...

Verfasst: Mittwoch 8. März 2006, 17:14
von oscar15
Ja, danke!!

Genau das ist es!

Nur was bewirkt der Befehl global?

Trotzdem nochmal danke, danke, danke

Verfasst: Mittwoch 8. März 2006, 17:23
von modelnine
global bewirkt dass der Name/die Namen die nach ihm genannt werden als Namen im globalen Namespace (also nicht dem Namensraum der Funktion, den ich vorhin schon angesprochen hatte) behandelt werden. Der globale Namensraum überzieht das ganze Skript.

Es sei aber noch mal gesagt: globale Variablen sind im Normalfall BÖSE!

Verfasst: Mittwoch 8. März 2006, 17:26
von Rebecca
Normalerweise sind Variablen nur in einem eingeschraenkten Bereich gueltig. Variablen, die im Hauptprogramm definiert sind, sind in Funktionen nicht sichtbar, und auf Variablen, die in Funktionen definiert sind, kann man vom Hauptprogramm nicht zugreifen.

Auf globale Variablen hingegen kann man von ueberall zugreifen. Dadurch kann man auch ziemlichen Murks machen, und man sollte sie nicht verwenden, wie Modelnine schon sagte. Meistens geht es naemlich auch anders.

EDIT: Ich bin heute zu langsam...

Verfasst: Mittwoch 8. März 2006, 17:27
von oscar15
Danke Heiko!!

aber da hätte ich dann noch eine frage!

Wenn ich jetzt ein Glied aus der Kette löschen möchte, ich aber nicht weiß an welcher Stelle es steht, und nur den Namen habe, welche Befehle gibt es dann?

Ich habe es bereits mit

Code: Alles auswählen

del test[name]
probiert(sowohl mit " wie auch ohne ihnen!!

Verfasst: Mittwoch 8. März 2006, 17:29
von oscar15
Trotzdem danke Rebecca, auch wenn du nen bissl länger gebraucht hast ;) , ich weiß deine Hilfe trotzdem zu schätzen!! :)

Immerhin weiß ich es ja nicht!!

Verfasst: Mittwoch 8. März 2006, 17:32
von modelnine
Wenn ich jetzt ein Glied aus der Kette löschen möchte, ich aber nicht weiß an welcher Stelle es steht, und nur den Namen habe, welche Befehle gibt es dann?
Du willst einen Namen löschen? Probiers mal mit:

Code: Alles auswählen

a = 10
print a
del a
print a
Was einen NameError geben sollte, was eben bedeutet, dass dieser Name nicht (mehr) definiert ist. Wie ich bereits sagte: der Name ist kein Bestandteil der Funktion, sondern ein Name des globalen Namespaces. Du greifst also auch auf ihn nicht über test zu, sondern über a, b, etc. del <Name> löscht den Namen aus dem lokalen Namespace.

Verfasst: Mittwoch 8. März 2006, 17:34
von oscar15
Ich wollte einen Namen aus einer Liste in eine andere "transferieren", also aus einer löschen und in einer anderen hinzufügen!!

Derzeit schaffe ich es nur, wenn der Name das erste Glied in der Kette ist (a[0])!!
Aber wenn die Liste geshufflet wird, ist sie nicht mehr das erste Glied!!

Verfasst: Mittwoch 8. März 2006, 17:38
von Rebecca
Ach so, du redest von Listen!

Code: Alles auswählen

test = [5, 1, 2, "bla"]
test.remove(2)
print test
test.remove("bla")
print test
EDIT: Oh, Fehler im Code! Es heisst natuerlich remove!

Verfasst: Mittwoch 8. März 2006, 17:42
von oscar15
danke, genau das hab ich gesucht, hab auch schon mit del probiert, klapp aber nicht!! ;)

danke, remove is gut!!

nur was ist der unterschied remove und del?

Verfasst: Mittwoch 8. März 2006, 17:58
von oscar15
Also auf ein neues....

Nun ich habe eine gemischte Liste. Ich füge die ersten 7 Glieder in eine andere Liste. Nun sind es aber Namen, da die erste Liste ja gemischt ist weiß ich nicht ihre namen! Wie soll ich sie also in der zweite Lsite einfügen?

Code: Alles auswählen

del Liste1[:7]
Liste2.append(??)
Wie kann man das lösen?

Verfasst: Mittwoch 8. März 2006, 18:09
von modelnine

Code: Alles auswählen

liste2.extend(liste1[:7])
del liste1[:7]
sollte tun was Du willst.

Verfasst: Mittwoch 8. März 2006, 18:29
von oscar15
ja genau diesen Befehl hab ich gesucht!!

danke nochmal, aber bitte nicht weglaufen ich brauche sicher gleich nochmaa Hilfe!! :P

Verfasst: Mittwoch 8. März 2006, 18:35
von oscar15
so....

da bin ich wieder...

neues Problem (was auch sonst!! :D)

Also ich habe vollgendes Problem:

Ich will meine eine Liste mischen...

Problem:
AttributeError: 'builtin_function_or_method' object has no attribute 'shuffle'

Code: Alles auswählen

random.shuffle(liste)

Verfasst: Mittwoch 8. März 2006, 18:40
von modelnine
random ist nicht das was es vorgibt zu sein (nämlich ein Modul), weil Du es irgendwo in Deinem Programm überschrieben hast.

Guck mal genau nach wo Du den Namen random benutzt (eben außerhalb des Kontextes den Du da geschrieben hast), und ersetz den Namen da durch was sinnvolleres.

Das sollte helfen.

Verfasst: Mittwoch 8. März 2006, 18:42
von oscar15
from random import *

ist das einzige mal!!

danach wird noch eine andere Liste gemischt!!