global vermeiden

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.
harryberlin
User
Beiträge: 189
Registriert: Donnerstag 17. Dezember 2015, 12:17

Dienstag 9. Februar 2016, 22:06

@noisefloor
wenn z.b. ein thread in einer while schleife ist, die beendet werden soll(ggf. auch durch nen anderen thread). dafür möchte ich die variable auf True setzen.
zum style guide und pep:
ja ich weiß, wer meine vorgeschichte nicht kennt, wird es als "assi" auffassen.
nur ich wurde schon zu genüge darauf hingewiesen.
Zuletzt geändert von harryberlin am Dienstag 9. Februar 2016, 22:19, insgesamt 1-mal geändert.
empty Sig
Sirius3
User
Beiträge: 7586
Registriert: Sonntag 21. Oktober 2012, 17:20

Dienstag 9. Februar 2016, 22:12

@harryberlin: Threads dürfen gar keine Variablen teilen. Dafür gibt es spezielle Datenstrukturen (Events, Queues, Semaphoren).
BlackJack

Dienstag 9. Februar 2016, 23:42

@harryberlin: Ich habe mal kurz reingeschaut und kämpfe gerade damit nicht PEP8 als Lektüre zu empfehlen, denn das soll ich ja nicht. ;-) Ernsthaft, da ist mir zu viel ``global`` und zu viele Sternchen-Importe drin um mich damit näher auseinandersetzen zu wollen.
harryberlin
User
Beiträge: 189
Registriert: Donnerstag 17. Dezember 2015, 12:17

Dienstag 9. Februar 2016, 23:42

oh wahnsinn. ich hab nen code der läuft, aber eigentlich absoluter schrott ist....
das wird ja ewig dauern, bis ich da was vernünftiges draus gemacht hab.
ewig, weil ich meine meiste zeit mit Brötchenverdienen verbringe.

ja, die sternchen...
ich werd echt mal schaun, dass ich ein py file mit klassen draus mache.
empty Sig
Benutzeravatar
pillmuncher
User
Beiträge: 1093
Registriert: Samstag 21. März 2009, 22:59
Wohnort: München

Mittwoch 10. Februar 2016, 02:17

harryberlin hat geschrieben:oh wahnsinn. ich hab nen code der läuft, aber eigentlich absoluter schrott ist....
das wird ja ewig dauern, bis ich da was vernünftiges draus gemacht hab.
ewig, weil ich meine meiste zeit mit Brötchenverdienen verbringe.
Wie die meisten hier.

Es geht einfach darum, dass du dir dein Leben einfach machst, indem du Code schreibst, der einfach zu handhaben ist. Sternchen-Importe sind schlecht, weil dann nicht klar ist, welcher Name aus welchem Modul kommt. Wenn man dagegen Stenchen-Importe vermeidet und statt dessen explizit hinschreibt, welche Namen man importiert, sieht man sofort, wo ein Name herkommt und muss nicht raten.

Globale Variablen sind schlecht, weil man damit seinen Systemzustand über den gesamten Code verteilt. Übergänge von einem zu einem anderen Zustand können dann prinzipiell überall und zu jeder Zeit geschehen. Man muss also zB. bei jeder Zuweisung den gesamten Code im Kopf behalten, damit man alle Implikationen dieser Zuweisung verstehen kann. Insbesondere bei nebenläufigen Programmen ist das oft gar nicht möglich. Statt globale Variablen verwendet man dabei lieber Events oder Queues, die man den Threads bei der Initialisierung als Argumente übergibt. Darüber können dann die Threads kommunizieren, ohne dass ihnen irgendeine andere Codestelle ein Bein stellt.

Wirklich, es geht nicht darum, dass du Code schreibst, der irgendeinem abstrakten Schönheitsideal enspricht, bloß weil wir hier alle Ästheten sind, die aus bloßer Spießigkeit auf diesem Ideal beharren, sondern es geht darum, dass du dir dein Leben einfach machst.

Die Geschichte vom Metzger Ding aus dem Zhuangzi (AKA "Das wahre Buch vom Südlichen Blütenland") illustriert diesen Sachverhalt.

Ebenso "The Big Lebowski" von den Cohen-Brüdern.

Sagte ich bereits, dass du dir dein Leben einfach machen sollst?
In specifications, Murphy's Law supersedes Ohm's.
Benutzeravatar
pillmuncher
User
Beiträge: 1093
Registriert: Samstag 21. März 2009, 22:59
Wohnort: München

Mittwoch 10. Februar 2016, 03:10

Zhuangzi, Buch III - Der Koch: http://www.zeno.org/Philosophie/M/Zhuan ... .+Der+Koch

Nach Laozi, von dem das Daodejing (Tao Te King) stammt, war Zhuangzi (auch Tschuang Tzu, Dschuang Dsi, Chuang Tse) der zweite große Denker des Daoismus. Die Überseztung in dem Link oben stammt von Richard Wilhelm, 1912. Er übersetzt Dào (道) als SINN. Es heißt aber Weg, sowohl im Sinne von Straße als auch von Weise etwas zu tun. Wilhelm hat sich auch nicht von allen abendländischen (lies: christlichen; er war Missionar) Vorstellungen über die Bedeutung der Worte freigemacht und auch nicht von allen zeittypischen Vorstellungen über China. Trotzdem kann man die Geschichte vom Metzger/Koch Ding gut verstehen, IMO.
In specifications, Murphy's Law supersedes Ohm's.
Benutzeravatar
pillmuncher
User
Beiträge: 1093
Registriert: Samstag 21. März 2009, 22:59
Wohnort: München

Mittwoch 10. Februar 2016, 03:46

Noch einer, weil ich den Beitrag nicht mehr ändern kann.

Bevor mich jemand anmopst, weil er/sie meint, Dào sei hier offtopic:

The Tao of Programming, 1.4:
The wise programmer is told about Tao and follows it. The average programmer is told about Tao and searches for it. The foolish programmer is told about Tao and laughs at it.

If it were not for laughter, there would be no Tao.

The highest sounds are hardest to hear. Going forward is a way to retreat. Great talent shows itself late in life. Even a perfect program still has bugs.
In specifications, Murphy's Law supersedes Ohm's.
harryberlin
User
Beiträge: 189
Registriert: Donnerstag 17. Dezember 2015, 12:17

Mittwoch 10. Februar 2016, 06:26

Auf jeden Fall, danke an euch.

Dass man Sternchen nicht macht, da hab ich letztens drüber gelesen.
Im Grunde benötige ich den zustand übers ganze System.
und wenn ich boolsche variablen sinnvoll benenne, sollte ein nachvollziehen nicht all zu schwer sein, bei nur True oder False.

Was mir etwas Kopfzerbrechen bereitet, wenn ich Zustände als Argument an einen Thread übergebe, das ist ja dann erstmal statisch in dem Thread. Ändert sich dann der Zustand, dann hat es keine Wirkung auf die Funktion im Thread. Oder ist das nicht so, bleibt die Verbindung Argument und Zustand erhalten, und wirkt sofort bei einer Änderung?
empty Sig
Antworten