Hallo zusammen,
Nachdem ich nun Jahrelang Perl, dessen abwandlungen und MS Programmierungen machen durfte, wollte ich mal eben auf Python umsteigen,
denn was ist denn schon schwieriges dabei?! Da habe ich aber noch nicht mit den Eigenheiten dieser Sprache gerechnet, da den Code zu lesen doch recht aufschlussreich galt.,
Meine Frage, nachdem ich an mir zweifelnd Die Docs von V2 und V3 und viele TUTs durchsucht habe ich aber den Wald vor lauter Bäumen nicht sehe, könnt Ihr mir bitte sagen
was da vor meiner Nase klebt und einfach nicht zu finden ist?
Ich möchte eine Instanz Starten und einige Globale Variablen nutzen um verschiedenen Threads oder aber teilweise aus Übersichtlichkeitsgründen definieren, der Code wurde mittlerweilen aus,
"Good Coding Practice" zu -> statischem müll. Also bitte ich darüber hinweg zu sehen.
Welche Vererbung beachte ich nicht?! um eben untenstehende Sub durchzuführen?, da der wert von 0 auf 1 geändert wird, aber bei dem nächsten Aufruf wiederum bei 0 steht sieht es für mich aus wie ein Problem der vererbung, da ich nicht ein aufruf durchführen möchte mit Variable=SUB(Variable).
global CTransIDCurrent
CTransIDCurrent = 1
def request_TransID(CTransIDCurrent):
if CTransIDCurrent == 0 :
CTransIDCurrent=1
return CTransIDCurrent
elif CTransIDCurrent == 9999 :
CTransIDCurrent=1
return CTransIDCurrent
else:
return CTransIDCurrent + 1
Demnach, HIILLFFEEE... ich fühle mich als hätte ich das "sitzen" verlernt.
LG
Anfängerfrage :-P
1) Wenn du deinen Code in die entsprechenden Tags setzt, wird er deutlich übersichtlicher.
2) globale Variablen sind (bis auf wenige Ausnahmen) schlechter Stil
3) "global" verwendet man in Funktionen um eine Variable, die nicht in der Funktion definiert wurde quasi "beschreibbar" zu machen. Immer wenn man das schreiben muss damit ein Code funktioniert, sollten eigentlich alle Alarmglocken angehen.
4) Du übergibst der Funktion einen Parameter, der den selben Namen hat wie eine globale Variable. Das ist zwar prima, denn globale Variablen sind böse, Python spricht über den Namen jedoch immer nur die lokale Variable in der Funktion an.
Du solltest dir noch einmal "Namespaces" in Python anschauen.
2) globale Variablen sind (bis auf wenige Ausnahmen) schlechter Stil
3) "global" verwendet man in Funktionen um eine Variable, die nicht in der Funktion definiert wurde quasi "beschreibbar" zu machen. Immer wenn man das schreiben muss damit ein Code funktioniert, sollten eigentlich alle Alarmglocken angehen.
4) Du übergibst der Funktion einen Parameter, der den selben Namen hat wie eine globale Variable. Das ist zwar prima, denn globale Variablen sind böse, Python spricht über den Namen jedoch immer nur die lokale Variable in der Funktion an.
Code: Alles auswählen
>>> a = 100
>>> def test(a):
print a
a = a + 5
print a
>>> test(5)
5
10
>>> a
100
Ich bin noch am anfang mit Python, jedoch wenn du sagst, globale Variablen sind böse, dann muss ich wohl fragen: Warum?!?
Vielleicht bin ich in Python noch nicht all zu bewandert, Jedoch mache ich beruflich Softwareentwicklung, Security Audits für Div Staatliche Einrichtung in welcher es darum geht, Fehler zu finden und meiner Meinung nach, darf jeglicher Code im Aufbau aussehen wie er will, denn Blackbox und Whitebox testing Serverseitig hat keinerlei notwendigkeit was Sicherheit angeht. Denn sonnst müsste ich eingestehen, dass Jeder Code, welcher Modular, lesbar und Performant sein soll und das ist ausnahmslos jeder, da encryption und forensic protection gesetzlich nicht gestattet ist eine einzige Sicherheitslücke ist.
Ich möchte keine Diskussionen lostreten, sondern bloß eine Layermodell in seiner Konstruktion legitimieren.
Aber Danke, ich werde mir die "Magic" nochmals ansehen, aber auch eine andere Herangehensweise in einem Transaktionsmodell : Mein Projekt erstreckt sich nur privater Natur, und das fehlerpotential erstreckt sich nicht bei Python sondern bei einer nicht korrekten Implementierung von Modbus -> halt made in Taiwan
Vielleicht bin ich in Python noch nicht all zu bewandert, Jedoch mache ich beruflich Softwareentwicklung, Security Audits für Div Staatliche Einrichtung in welcher es darum geht, Fehler zu finden und meiner Meinung nach, darf jeglicher Code im Aufbau aussehen wie er will, denn Blackbox und Whitebox testing Serverseitig hat keinerlei notwendigkeit was Sicherheit angeht. Denn sonnst müsste ich eingestehen, dass Jeder Code, welcher Modular, lesbar und Performant sein soll und das ist ausnahmslos jeder, da encryption und forensic protection gesetzlich nicht gestattet ist eine einzige Sicherheitslücke ist.
Ich möchte keine Diskussionen lostreten, sondern bloß eine Layermodell in seiner Konstruktion legitimieren.
Aber Danke, ich werde mir die "Magic" nochmals ansehen, aber auch eine andere Herangehensweise in einem Transaktionsmodell : Mein Projekt erstreckt sich nur privater Natur, und das fehlerpotential erstreckt sich nicht bei Python sondern bei einer nicht korrekten Implementierung von Modbus -> halt made in Taiwan
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Du redest von einem Layermodell und Modularitaet, um globale Variablen zu legitimieren. Nun, letztere machen die ersten beiden schwer bis unmoeglich, da sie
- alle Layer durchbrechen, v.a. wenn sie ueberschrieben werden
- Code nicht modular verstehbar machen, d.h. man muss das Modul (gluecklicherweise gibt es nur modulweite Globals) in seiner Gaenze erfassen, um den Code einer Funktion mit einem Global zu verstehen
Natuerlich darf Code aussehen wie er will, da dass aber immer einen Einfluss auf Lesbarkeit und Verstehbarkeit - und damit auch auf deine Sicherheitsluecken - hat, _sollte_ er es nicht.
- alle Layer durchbrechen, v.a. wenn sie ueberschrieben werden
- Code nicht modular verstehbar machen, d.h. man muss das Modul (gluecklicherweise gibt es nur modulweite Globals) in seiner Gaenze erfassen, um den Code einer Funktion mit einem Global zu verstehen
Natuerlich darf Code aussehen wie er will, da dass aber immer einen Einfluss auf Lesbarkeit und Verstehbarkeit - und damit auch auf deine Sicherheitsluecken - hat, _sollte_ er es nicht.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Diese Aussagen
Deine Argumentation im mittleren Absatz, insbesondere die angebliche kausale Schlussfolgerung, erschließt sich mir nicht. Vielleicht hast Du das einfach zu schnell und schlampig aufgeschrieben?
passen irgend wie nicht zu folgendem:PPatrick hat geschrieben: Vielleicht bin ich in Python noch nicht all zu bewandert, Jedoch mache ich beruflich Softwareentwicklung, Security Audits für Div Staatliche Einrichtung in welcher es darum geht, Fehler zu finden ...
PPatrick hat geschrieben:Ich bin noch am anfang mit Python, jedoch wenn du sagst, globale Variablen sind böse, dann muss ich wohl fragen: Warum?!?
Deine Argumentation im mittleren Absatz, insbesondere die angebliche kausale Schlussfolgerung, erschließt sich mir nicht. Vielleicht hast Du das einfach zu schnell und schlampig aufgeschrieben?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Deine Aussage macht in der Form keinen Sinn. Was hat das mit globalen Variablen zu tun? Wie ist Oracle da überhaupt relevant?PPatrick hat geschrieben:Aber wie auch immer, aber dann halte vorallem von Oracle 8i - 11g Abstand die Integration von DB-Links u. Schnittstellen PL/Sql Transaktionsmodell würde dich in deinen Grundfesten erschüttern.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Zur "global-oder-nicht-global"-Diskussion hab' ich nichts beizutragen, aber zu Deinem Beispiel hab' ich eine Frage:
Soll der Wert um 1 erhöht werden, wenn er eingangs zwischen 1 und 9998 liegt und auf 1 zurückgesetzt, wenn er < 0 und > 9998 ist?
Wenn dem so ist, könnte folgendes eine Lösung sein:
Und um die Werte von Modulebene zur Funktion und wieder zurück zu transportieren, lässt sich das ganz einfach verwenden:
Oder hab' ich überhaupt nicht begriffen, um was es hier geht?
mutetella
Soll der Wert um 1 erhöht werden, wenn er eingangs zwischen 1 und 9998 liegt und auf 1 zurückgesetzt, wenn er < 0 und > 9998 ist?
Wenn dem so ist, könnte folgendes eine Lösung sein:
Code: Alles auswählen
def set_id(id):
if 0 < id < 9999:
return id + 1
return 1
Code: Alles auswählen
CTransIDCurrent = set_id(CTransIDCurrent)
mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit )
@wuf: Halte ich für wahrscheinlich, und die Programmiersprache scheint auch Einfluss auf das restliche Denken und die Wahrnehmung von deutscher Grammatik zu haben.