Hallo zusammen,
Ich komm mir grade ein bisschen Doof vor, brauche in einer Funktion
mehrere Statische Variablen. Z.B. ob die Serielle-Schnittstelle bereits
geöffnet ist.
Dazu findet man überall im Internet dass selbe Beispiel:
1
defa():
2
ifnothasattr(a,'var'):
3
a.var=1
4
var=var+1
5
print(var)
6
7
while(1):
8
a()
Ich würde nun eine Ausgabe aufsteigender Zahlen erwarten, stattdessen
bekomme ich:
Eigentlich sollte var nun nicht nur existieren sondern sogar dauerhaft
erhalten bleiben.
Immerhin kann ich feststellen dass er ins "if" rein geht, denn bei
Matthias schrieb:> Ich komm mir grade ein bisschen Doof vor, brauche in einer Funktion> mehrere Statische Variablen. Z.B. ob die Serielle-Schnittstelle bereits> geöffnet ist.
Was hast Du denn in Wirklichkeit damit vor? Unter Python deutet so ein
Vorgehen fast immer auf einen Denk- und / oder Designfehler hin.
Üblicherweise würden eine Klasse oder eine Closure-Funktion verwendet:
Was die Linux-Distribution angeht, so ist das ziemlich egal, ob Du ein
[KXL]Ubuntu, ein Debian oder etwas aus der RPM-Familie nimmst, oder ein
Gentoo, Arch, ... Python ist Python, das tut sich nichts, und auch die
Unterschiede unter den Distributionen sind eher marginal. Es sollte
vielleicht keine Uralt-Version von Python sein, schon gar kein Python
2.x, und wenn Du Pythons neuestes Feature benutzen willst, nämlich das
Structural Pattern Matching, muß es natürlich mindestens das aktuelle
Python in Version 3.10 sein. Ich glaube allerdings: wenn Du dort
angekommen bist, werden die großen Distributionen vermutlich auch alle
Python 3.10 an Bord haben.
Ansonsten herzlich willkommen und viel Spaß, Glück, und Erfolg!
Ich schließe mich meinen Vorrednern an die statische Variablen für keine
so gute Idee halten. Wenn man sich einmal an das Konzept von Klassen
gewöhnt hat, möchte man nicht mehr ohne…
Norbert schrieb:> Ich schließe mich meinen Vorrednern an die statische Variablen für keine> so gute Idee halten. Wenn man sich einmal an das Konzept von Klassen> gewöhnt hat, möchte man nicht mehr ohne…
Ja, richtig. Es erschließt sich mir auch nicht, warum man in einer
objektorientierten Sprache wie Python -- das die Objektorientierung
obendrein besonders einfach macht -- mit so häßlichen Hacks wie der
Metaprogrammierung oben versuchen wollen würde, die Verwendung von
Klassen zu vermeiden?!
Ein T. schrieb:> ...Es erschließt sich mir auch nicht, warum man in einer> objektorientierten Sprache wie Python -- das die Objektorientierung> obendrein besonders einfach macht -- mit so häßlichen Hacks wie der> Metaprogrammierung oben versuchen wollen würde, die Verwendung von> Klassen zu vermeiden?!
Vermutlich weil man das Konzept der Objektorientierung noch nicht kennt
oder verstanden hat.
@TO: Auch ich würde Dir raten, die damit zu befassen, es lohnt sich, ;)
Eine eigene Frage?
Dieser Thread ist über 4 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.