Seite 1 von 1
Anfängerfrage :-P
Verfasst: Donnerstag 25. Oktober 2012, 09:41
von PPatrick
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
Re: Anfängerfrage :-P
Verfasst: Donnerstag 25. Oktober 2012, 10:13
von sparrow
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.
Code: Alles auswählen
>>> a = 100
>>> def test(a):
print a
a = a + 5
print a
>>> test(5)
5
10
>>> a
100
Du solltest dir noch einmal "Namespaces" in Python anschauen.
Re: Anfängerfrage :-P
Verfasst: Donnerstag 25. Oktober 2012, 10:34
von PPatrick
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
Re: Anfängerfrage :-P
Verfasst: Donnerstag 25. Oktober 2012, 10:58
von cofi
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.
Re: Anfängerfrage :-P
Verfasst: Donnerstag 25. Oktober 2012, 15:57
von PPatrick
Bitte was? 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.
Re: Anfängerfrage :-P
Verfasst: Donnerstag 25. Oktober 2012, 18:04
von Hyperion
Diese Aussagen
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 ...
passen irgend wie nicht zu folgendem:
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?

Re: Anfängerfrage :-P
Verfasst: Donnerstag 25. Oktober 2012, 20:43
von Leonidas
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.
Deine Aussage macht in der Form keinen Sinn. Was hat das mit globalen Variablen zu tun? Wie ist Oracle da überhaupt relevant?
Re: Anfängerfrage :-P
Verfasst: Freitag 26. Oktober 2012, 09:05
von mutetella
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:
Code: Alles auswählen
def set_id(id):
if 0 < id < 9999:
return id + 1
return 1
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
Re: Anfängerfrage :-P
Verfasst: Freitag 26. Oktober 2012, 09:15
von wuf
PPatrick hat geschrieben:Nachdem ich nun Jahrelang Perl......
Ist es möglich, dass du zu lange mit Perl programmiert hast?
Gruß wu

Re: Anfängerfrage :-P
Verfasst: Freitag 26. Oktober 2012, 10:16
von BlackJack
@wuf: Halte ich für wahrscheinlich, und die Programmiersprache scheint auch Einfluss auf das restliche Denken und die Wahrnehmung von deutscher Grammatik zu haben.

Re: Anfängerfrage :-P
Verfasst: Freitag 26. Oktober 2012, 22:42
von jerch
Haha - schöner freitäglicher Trollbeitrag.
Geballter Unsinn wird auch mit ein paar Fremdwörtern gespickt, nicht wahrer
Upps, ist ja von Donnerstag...