Variablen löschen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
st_baum
User
Beiträge: 26
Registriert: Sonntag 24. Mai 2020, 13:54

Ich möchte eine Reihe Variablen löschen, etwa nach dem Schema:

Code: Alles auswählen

del var_*
Wobei "*" für alle Zeichen stehen soll, z.b. var_1, var_2, var_a etc. Sollte doch machbar sein, oder?
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Ja, das ist prinzipiell machbar, aber unschön. Da stellen sich mir zwei grundsätzliche Fragen. Warum sind das überhaupt einzelne Variablen und keine passende Datenstruktur? Warum glaubst du, dass du `del` brauchst?

Das ist ein bisschen so wie "Ich habe jetzt 10km Verlängerungskabel und möchte das an mein Elektroauto anschließen. Wie geht das?". Natürlich kann dir jemand erklären wie das geht, aber es ist deutlich intelligenter, erst einmal die Sinnhaftigkeit des Vorgehens abzufragen.
st_baum
User
Beiträge: 26
Registriert: Sonntag 24. Mai 2020, 13:54

Weil es mir so wie ich es brauche am einfachsten erscheint. Möglicherweise ist das nicht der sinnvollste Weg. Solange ich damit aber zum Ziel komme, ist das doch aber in Ordnung.

Was ist denn in Python der Code bzw. das Zeichen welches "*" in dem Kontext umsetzt?
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@st_baum: Ich würde auch noch mal sagen wollen das Du was falsch machst. ``del`` auf Namen verwendet man ganz selten bis gar nicht. Warum denkst Du so einen Unsinn machen zu müssen? Warum hast Du überhaupt nummerierte Namen oder zumindest einen Haufen Namen mit dem gleichen Präfix? Das riecht komisch.

Edit: Und warum sollen die Namen gelöscht werden? Die würden doch auch nicht weiter stören. Und wenn doch, warum?
Zuletzt geändert von __blackjack__ am Donnerstag 28. Mai 2020, 12:23, insgesamt 1-mal geändert.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Gar nicht. Man setzt das so um, das man eine entsprechende Datenstruktur baut. Listen oder Woerterbuecher ueblicherweise. Und das IST der einfachste Weg.
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Machbar ist es mit Stringformatierung und exec(), aber ich würde eher auf die Tipps hier hören. Das was du vor hast bringt wahrscheinlich nur Probleme.
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ui, jetzt auch noch `exec()`, das wird ja immer gruseliger. 😱
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Ich hab nur gesagt wie es theoretisch Möglich wäre. Wenn er unbedingt diesen Weg gehen will hat er damit die Möglichkeit (was wie gesagt nicht zu empfehlen ist). Dazu hab ich aber auch gesagt dass das meistens nur Probleme gibt.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

"Hier ist eine durchgeladene, entsicherte 9mm. Du solltest nicht mit ihr spielen, aber ich gebe sie dir trotzdem!"
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

@st_baum: diese Zeile sollte äquivalent zu Deinem Code sein: Falls nicht, hast Du an anderer Stelle noch einen Fehler.
Zeig doch mal, was Du hast und was Du erreichen möchtest.
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

@__deets__ da bleibt halt nur auf die Vernunft zu hoffen. :roll:
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Genau. Von Leuten, denen die Uebersicht fehlt, was sie da eigentlich tun oder lassen, Vernunft zu erhoffen - bomben Strategie.
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Jankie: Die Frage zur Analogie von __deets__ war „Ich möchte mir gerne in den Kopf schiessen.“ Da sollte man nicht auf all zu viel Vernunft hoffen. 😉
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Wenn man einem Kind sagt "Fass nicht auf die Herdplatte, die ist heiß" dann kann das Kind vernünftig sein und es glauben, oder aber es denkt es weiß es besser und packt auf die Herdplatte und merkt dann, dass die wirklich heiß ist.

@__blackjack__: Wenn sich jemand wirklich in den Kopf schießen will und davon fest überzeugt ist wird er es umsetzen. Da bleibt ja auch nur Überreden und auf Vernunft hoffen.
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Jankie: Das ist kein Problem solange das Kind nicht weiss wie es überhaupt an die Herdplatte heran kommt. Das sollte man ihm dann vielleicht auch gar nicht erst verraten. Denn das Kind hier hat ja sehr deutlich gesagt das es das nicht glaubt und unbedingt auf die Herdplatte fassen will, weil das eine einfach Lösung für irgendetwas sei.

Das Problem ist halt auch, dass der Vergleich hinkt, weil das im Gegensatz zur Herdplatte nicht sofort weh tut komisch benannte Namen zu löschen, sondern alles nur komplizierter macht und fehleranfälliger macht. Dem OP wird das noch nicht mal sofort auffallen, solange nicht die tatsächlichen Probleme genannt/gezeigt werden, so dass man eine tatsächlich sinnvollere Lösung zeigen kann. Der OP ist ja überzeugt, dass das alles in Ordnung ist was da bisher gemacht wird und das Code generieren um Namen zu löschen eine einfache Lösung sei.

Edit: Natürlich bleibt da nur auf Vernunft zu hoffen wenn sich jemand in den Kopf schiessen will. Aber man gibt dem doch keine geladene Waffe und hofft, sondern gibt dem *keine* geladene Waffe und fragt nach welche Probleme er damit lösen will, um eine andere Lösung zu finden/aufzuzeigen, die nicht mit einem Loch um Kopf endet.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Das Kind ist aber bestimmt neugierig und wenn der Vater nicht Antwortet wo die Herdplatte ist wird halt der Onkel gefragt. Ich bin kein Vater (vielleicht ist es besser so, sonst hätte ich viele Kinder mit Verbrennungen). Ich habe Ihm quasi gezeigt "Das da ist eine Herdplatte! Die ist heiß! Nicht Anfassen!" Was das Kind dann macht gehört zum Lernprozess.

Aber genug jetzt davon, wird langsam Offtopic. Dann werde ich in Zukunft halt keine scharfen Waffen mehr verteilen sondern nur Wasserpistolen. :D


#edit:

zu deinem edit: Da könnte man jetzt eine Diskussion zur aktiven Sterbehilfe anfangen, aber ich glaube das hier ist ein Python Forum und kein Forum wo es um Ethik geht.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du setzt jemanden auf's falsche Gleis. Die ausgebildeten Denkstrukturen und Problemloesestrategien sind ungeeignet fuer umfangreichere oder auch nur leicht anders gelagerte Probleme, und muessen muehselig entlernt werden. Damit tust du der Person schlicht keinen Gefallen. Im Gegenteil. Und da die Vernunft anzurufen ist nichts anderes als ein billiges cop-out, sich selbst nicht verantwortlich zu verhalten.
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Ich hätte Ihn aufs falsche Gleis gesetzt wenn ich gesagt hätte: "Genau so geht das!". Ich habe Ihm eher gesagt, welches das falsche Gleis ist, nur ohne zu sagen welches auch das richtige Gleis ist.

Aber ich verstehe eure Arugmentation und werde es in Zukunft vermeiden.


#offtopic: Glückwunsch zu > 6000 Beiträgen __blackjack__
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Jankie: Re: Aktive Sterbehilfe: Wenn man die Analogie nimmt, ist die Frage ob man jemanden der sterben will, einfach bedingungslos sagt wo er das Gift her bekommt. Aber auch da wird man doch (hoffentlich), bevor man das tut erst einmal nachhaken was denn der konkrete Grund ist. Und wenn dann nur ein, „Verrate ich nicht, das ist einfach die einfachste Lösung für mein Problem“, wird ein verantwortungsvoller Mensch in der Regel nicht sagen wo man das Gift bekommt.

Das ”Gift” in diesem Fall ist ja durchaus auch in wenigen Fällen sinnvoll einsetzbar, sonst wäre die Existenz schon ein Problem für sich. Nur würde *ich* halt ganz gerne vorher das Problem kennen, bevor ich so eine extreme Lösung oder Zutaten dafür anbiete. Vor allem wenn das bisschen vom Problem was bekannt ist, schon dermassen riecht. Denn nummerierte Namen sind schon ein „code smell“ der darauf hindeutet, dass man eine Datenstruktur verwenden will. Aber auch viele Namen mit einem gemeinsamen Präfix deuten darauf hin, beziehungsweise allgemein auf einen Namensraum. Und dann solche Namen nach einem Muster löschen zu wollen ist im Grunde auch wieder ein Hinweis darauf, dass man eigentlich einen Namensraum mit einer Lebensdauer aufmachen will. Also beispielsweise ein Objekt und/oder eine Funktion mit lokalen Namen.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

@st_baum: Nur für den Fall, dass das in dem Thread für dich nicht deutlich wurde: Dein Fehler liegt bereits an der Stelle, wo du angefangen hast Variablen durchzunummerieren. Immer wenn man das tut, möchte man eigentlich eine Liste benutzen. Und damit erübrigt sich auch deine Frage hier, denn eine Liste hat entsprechende Funktionen und Eigentschaften, die genau das tun, was du möchtest.
Antworten