Python-bashing ...

  • wird scheinbar echt mal Zeit ;)


    [als Beitrag zur Reihe: Was spricht für oder gegen XYZ als Programmiersprache?]

    Bislang erschienen:


    Ich fang' mal an:

    also ...

    1. laut Definition liefert eine Funktion ein Ergebnis zurück.

    Quote

    dass die Funktion ein Resultat direkt zurückgibt und deshalb in Ausdrücken verwendet werden kann.


    Quelle: -> https://de.wikipedia.org/wiki/Funktion_(Programmierung)


    Python kann aber mehrere Werte, die zudem verschiedene Typen haben können, zurückliefern.

    Streng genommen kann man das auch so sehen, dass es in Python dann keine Funktionen gibt, oder?

    Und nein ... es ist nicht dasselbe wie eine C-Funktion, die eine Struktur zurückliefert. Auf die Struktur-Elemente muss ich explizit zugreifen, wobei mir das in Python "verborgen" bleibt.


    2. Die kleinen "Hilfen", wie z.B. das "automatische" Schliessen eines Filehandels sind imho eher kontraproduktiv, da sie den "Programmierer" ( oder eben den, der es werden will ) zur Schlampigkeit/Nachlässigkeit verleiten.


    3. Einrückungen, die Einfluss auf die Programmlogik haben, sind - zumindest für mich - ein absolutes nogo ...


    Ich glaube, ich muss mich demnächst mal näher mit Python beschäftigen ... allein schon, um darüber herziehen zu können :rofl:


    Und nun ... auf geht's ...


    ciao,

    -ds-

  • Hi Dirk,


    Dankeschön. Das vorneweg, jetzt kann man den hier als Sandbox (Sandkasten :fies:) zum meckern verwenden. Aber nur hier.


    Python kann aber mehrere Werte, die zudem verschiedene Typen haben können, zurückliefern.


    Ganz folgen kann ich dir nicht, denn so wie du es schreibst ist es falsch. Eine Funktion gibt immer, immer genau einen Wert zurück, von genau einem Typ. Das kann explizit oder implizit geschehen (dann None). Wenn du sowas meinst:


    Python
    1. def foo():
    2. return [1, 2, 3], True, None, 1, "Hello"

    (übertrieben)

    Das ist ein Tuple, nicht mehrere Rückgabewerte. Siehe type(foo()).

    Streng genommen kann man das auch so sehen, dass es in Python dann keine Funktionen gibt, oder?

    Kannst du das nochmal kurz näher erläutern? Warum nicht?

    Python
    1. >>> def foo(): pass
    2. ...
    3. >>> type(foo)
    4. <class 'function'>
    5. >>>

    2. Die kleinen "Hilfen", wie z.B. das "automatische" Schliessen eines Filehandels sind imho eher kontraproduktiv, da sie den "Programmierer" ( oder eben den, der es werden will ) zur Schlampigkeit/Nachlässigkeit verleiten.

    Automatisch wird da gar nichts geschlossen, wenn du ein with Statement verwendest wird nur implizit die Methode close des Dateiobjekts aufgerufen. Keine Magie, obwohl "magic methods" ;)


    Ohne dem with-Statement musst du natürlic manuell mit fobj.close() schließen.

    3. Einrückungen, die Einfluss auf die Programmlogik haben, sind - zumindest für mich - ein absolutes nogo ...

    Da sag ich nix zu (hab ich schon in anderen Threads...). Aber reißt auch da gerne gegenseitig die Haare aus.

    Und nun ... auf geht's ...

    :mean:

    :wink:

  • Vielleicht noch eine Anmerkung zum Post von Andreas:

    Jetzt, wo ich drüber nachdenke. Ja, stimmt! Ich kann mich nicht entsinnen, dass im Lazarus-Forum oder im Dephi-Forum oder in der GIML (Global Icon Mailing List) oder dem Unicon-Pendant jemals eine solche Qualität an wirrem Code wie hier im Python-Unterforum ohne Code-Verständnis wild herum kopiert und dann noch gepostet wurde. Mein persönlicher Eindruck ist der, dass Nutzer anderer Programmiersprachen diese erst einmal richtig lernen, bevor sie andere Leute mit Code und ihren Erstlingswerken behelligen. Und Code, der wie hier in Python bei fast allen Beiträgen aus reiner C&P-Mentalität (Copy & Paste) zu entspringen scheint, ist mir in anderen Foren in diesem Umfang noch nicht begegnet. Wie gesagt, ist mein persönlicher Eindruck, der auch gut täuschen kann.


    das hat, aus meiner Sicht mehrere Ursachen.

    Zum einen beschäftigen sich heutzutage wesentlich mehr Menschlein mit "Programmieren" als zu Zeiten, wo das Thema noch recht elitär war.

    Desweiteren wird dem "Endanwender" gerne suggeriert, dass man Python - im Gegensatz zu anderen Programmiersprachen - nicht lernen muss sondern da ratz-fatz ohne grosses Einlesen oder Lernen zum gewünschten Ergebnis gelangt.

    Naja ... und das ist halt das Resultat ;)


    //EDIT:

    Dankeschön. Das vorneweg, jetzt kann man den hier als Sandbox (Sandkasten ) zum meckern verwenden. Aber nur hier.

    so war das gedacht ;)

    Das ist ein Tuple, nicht mehrere Rückgabewerte. Siehe type(foo()).


    Also wenn ich das richtig verstanden habe, dann kommt da aber kein Objekt sondern ein Schwung Werte zurück.

    Sprich: das würde so (oder so ähnlich) aussehen:


    a,b,c = rechneHumTempCO2();


    Kannst du das nochmal kurz näher erläutern? Warum nicht?

    Na weil das dann keine eindeutige Zuweisung ist.

    btw: es nervt mich schon immer an C++ dass es Funktionen mit gleichen Namen aber verschiedenen Rückgabe-Werten oder Übergabe-Parametern geben kann. Das hilft imho absolut nicht dabei die Logik eines Codes zu verstehen.


    Ohne dem with-Statement musst du natürlic manuell mit


    Naja ... streng genommen macht das das Betriebssystem beim Beenden auch. So gesehen ...


    cheers,

    -ds-

  • Also wenn ich das richtig verstanden habe, dann kommt da aber kein Objekt sondern ein Schwung Werte zurück.

    In Python ist Alles ein Objekt.

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • HI,

    pos ja ... pos.x, pos.y, pos.z als Elemente ( oder eben pos->x, pos->y, pos->z ) ... aber Mehrfachzuweisung?

    Dass das auf "interner" Ebene "vernmutlich" darauf hinausläuft ist eine Sache ... aber mehrere Werte zuweisen - da sträuben sich bei mir die Nackenhaare ...

    Finde mal den Fehler, wenn Du irgendwo im Code zwei Variablen bei der Zuweisung vertauscht hast ...


    //EDIT:

    In Python ist Alles ein Objekt.


    Ja und?

    Wenn ich schreibe


    temperatur, feuchtigkeit, luftdruck = holeSensorDaten();


    dann kommen da meinetwegen drei Objekte zurück ... ändert an der Mehrdeutigkeit aber nix ;)



    cu,

    -ds-

  • Also wenn ich das richtig verstanden habe, dann kommt da aber kein Objekt sondern ein Schwung Werte zurück.

    Schwierig, schwierig. Hast du nicht vorhin jemanden mit den Basics genervt :lol:

    Alles ist ein Objekt. Ein schwung Werte ist irgendwie schwammig, es ist ein Tuple. Stell dir das vor wie eine Liste, die du nicht verändern kannst. Ein "statischer" Satz von einem oder mehr Objekten. Ein Tuple eben! Immer noch nur ein Objekt.

    a,b,c = rechneHumTempCO2();

    Das nennt sich dann "Tuple unpacking". Wenn rechneHumTempCO2 ein Tuple oder eine Liste mit genau drei Elementen zurück gibt (EIN Objekt mit drei Elementen, nicht drei Objekte/Elemente!) geht das, es werden a, b und c dann die jeweiligen Werte mit Index 0, 1 und 2 zugewiesen.

    Na weil das dann keine eindeutige Zuweisung ist.

    Ok, ich steh' immer noch auf dem Schlauch... wieso brauchst du den eine Zuweisung? alles was mit def beginnt und nicht in einer Klasse ist, ist eine Funktion, einfach gesagt. Ich kann zwar ein bisschen C, habe Pointer verstanden und kann meine Arduinos und C-Extensions für Python damit problemlos programmieren, aber das war's auch schon. Vielleicht habe ich da ein gänzlich anderes Konzept in C nicht vor Augen?


    Desweiteren wird dem "Endanwender" gerne suggeriert, dass man Python - im Gegensatz zu anderen Programmiersprachen - nicht lernen muss sondern da ratz-fatz ohne grosses Einlesen oder Lernen zum gewünschten Ergebnis gelangt.

    Naja ... und das ist halt das Resultat

    Noch mal was dazu. Sicher, Python hat tendenzen, leichter zu erlernen zu sein als andere Sprachen. (IHR DÜRFT DAS ANDERS SEHEN, JA!). Wenn man den geschichtlichen Hintergrund Pythons kennt ist das auch wenig verwunderlich. Und mit der Wahl der Foundation, Python als "durchaus geeignete" Programmiersprache für den Raspi zu preisen würde dem Ganzen noch eins drauf gesetzt.


    Wir sind uns aber alle einig, dass das hier kein Fehler von Python ist, wenn der besagte Anfänger überhaupt keine Dokumentation liest und schlicht Code kopiert und zusammenwürfelt, den er gar nicht versteht? Es hatte viele andere Sprachen genau so treffen können mit den selben Resultaten. Auch ein C Helloworld ist schnell zusammengetippt und mit gcc helloworld.c im einfachsten Fall kompiliert. Das erste was schief geht, sind dann die Pointer IMHO.


    Und das Python dem Programmierer das Leben nicht unnötig schwer macht ist auch nicht pauschal etwas schlechtes, jede Sprache hat eben gewisse Eigenschaften und Funktionalitäten, die man erlernen muss.


    Python ist nur eine, meist interpretierte, von vielen Hochsprachen, neben vielen kompilierten Hochsprachen. Nur habe ich manchmal das Gefühl, hier versuchen manche Python die Schuld für "dumme Programmierer" aka "Scriptkiddies" in die Schuhe zu schieben.

    :wink:

  • Naja ... streng genommen macht das das Betriebssystem beim Beenden auch. So gesehen ...

    :conf: Das wär mir neu. Ein geöffneter file-handler / file-descriptor bleibt solange geöffnet bis er explizit geschlossen wird... Ein klein wenig komplexer ist das Thema schon, weil zwischen System-, Benutzer- und Prozessweiten fd's, unterschieden wird... übrigens vom Kernel gesteuert.


    Man kann für alles mögliche "Hilfsmittel" einrichten um Abläufe zu erleichtern. 'with' kümmert sich selber ums .close(), wenn dir das missfällt kannst du aber natürlich auch ohne 'with' arbeiten.


    In anderen Programmiersprachen nutzt man { } usw um zusammengehörige Blöcke zu definieren... Pascal nutzt BEGIN und END. C/C++ nutzt { und } ebenso wie Java & Co. HTML nutzt <html> und </html>. Bei Python sind es halt die Einrückungsebenen.


    Wenn Ihr euch denn nur mal damit genauer auseinander setzen wollen würdet - hier und da mal ein kleines Projekt mit Python umsetzt - würdet ihr denk ich anders darüber denken.

  • pos ja ... pos.x, pos.y, pos.z als Elemente ( oder eben pos->x, pos->y, pos->z ) ... aber Mehrfachzuweisung?

    Und das ist wieder was anderes... in einem Tuple/einer Liste kannst du die Elemente nur über ihren Index erreichen. Was du da machst, ist der Zugriff auf die Arttribute x, y und z eines Onjekts, z.B. einer Klasse (klassisch :lol:) oder eines Namedtuples.

    :wink:

  • >> Einrückungen


    Da sag ich nix zu (hab ich schon in anderen Threads.

    Auch wenn das anders interpretiert wurde: Ich habe nichts gegen Einrückungen. Ich liebe Einrückungen. Meine ASM, Basic, C, Pascal-Codes sind alle ordentlich eingerückt. Und wenn Du bei Ada auch nur ein Leerzeichen falsch hast...


    Aber während durch ein paar fehlende Leerzeichen aus


    Code
    1. for z in range(zmin, zmax + 1):
    2. typ = 1 - typ
    3. for x in range(xmin, xmax + 1):
    4. mc.setBlock(x, y, z, mat, typ)

    sowas wird

    Code
    1. for z in range(zmin, zmax + 1):
    2. typ = 1 - typ
    3. for x in range(xmin, xmax + 1):
    4. mc.setBlock(x, y, z, mat, typ)

    und das problemlos ausgeführt wird, allerdings ein völlig anderes Ergebnis bringt, muss man sich in C, Basic, Pascal richtig anstrengen, damit der Compiler hier nicht ein "for without next", fehlende Klammer oder "begin without end" anmeckert. Gleiches Problem bei Einrückungen nach if, else...


    Ja, ein erfahrener Programmierer sieht das natürlich. Aber wenn es kein Problem wäre, gäbe es nicht so viele Threads dazu, wo irgendwer mal wieder Code kopiert oder lustig zwischen Tab und Leertaste gewechselt hat, und dann nicht weiss warum "sein" Programm nicht läuft.


    Edit: Verdammt, der erste Quellcode ist schon falsch formatiert, obwohl er im Editor richtig stand.

  • Und das ist wieder was anderes... in einem Tuple/einer Liste kannst du die Elemente nur über ihren Index erreichen. Was du da machst, ist der Zugriff auf die Arttribute x, y und z eines Onjekts, z.B. einer Klasse (klassisch :lol:) oder eines Namedtuples.

    Ja wie nun? Wenn ich eine Structure pos mit x,y,z habe, dann kann ich sowas machen:

    Code
    1. pos.x = xnull
    2. pos.z = znull
    3. pos.y = ynull

    und es würden die richtigen Werte drinstehen.


    Wenn ich aber in Python

    Code
    1. x,z,y = mc.player.getPos()

    schreibe, steht dann die y-Pos in z und die z-Pos in y, oder wird das richtig zugewiesen? Muss ich morgen mal ausprobieren...


    Siehste, und das nervt mich so an: Nö, musst keine Variablen definieren. Machen wir alles für Dich. Musst Dich um gar nichts kümmern... außer um die Fehlersuche und das Rumprobieren.

  • Ja, ein erfahrener Programmierer sieht das natürlich. Aber wenn es kein Problem wäre, gäbe es nicht so viele Threads dazu, wo irgendwer mal wieder Code kopiert oder lustig zwischen Tab und Leertaste gewechselt hat, und dann nicht weiss warum "sein" Programm nicht läuft.

    Das ist wohl wahr. Ich selbst beherrsche auch einige Programmiersprachen, in denen die Strukturierung durch geschweifte Klammern festgelegt wird. Allen voran JavaScript und C#, aber auch C und gelegentlich Java. Ich komme mit beidem zurecht, es ist eben Geschmackssache und auch Gewöhnung, mit einem schnellen (gedanklichen) Wechsel und auch paralleler Programmierung von z.B. Python und JS (mache ich sogar ziemlich oft) habe ich kein Problem. Und letztenendes steht es jedem frei, so etwas zu verwenden, wenn es denn hilft (kenne ich u.a. aus C-ähnlichen und HTML):

    Python
    1. if foo:
    2. if bar:
    3. baz()
    4. else:
    5. return False
    6. # end if bar
    7. # end if foo

    :wink:

  • Hi Dreamshader,


    schön! Seit gefühlt vielen Wochen mal wieder ein Beitrag von Dir, den ich lese und auf den ich antworten möchte.


    Soll heißen, in den Subforen, in denen ich sonst Beiträge lese, habe ich nichts von Dir gefunden. Soll auch heißen: Berichtest du sonst nur noch über Erlebnisse aus dem 3D-Druck? (Ist für mich noch kein Thema - kann aber kommen...)


    Ob Programmieren mal elitär war, möchte ich mal so nicht stehen lassen. Schon immer (seit rund 1980) werden Programmierkurse in Schulen und Universitäten abgehalten. In der Schule habe ich alles mitgenommen, was angeboten wurde.


    An der Uni (als Chemiestudent) habe ich nur ein einziges Mal eine Vorlesung über C gehört. Also eine einzige Stunde. Dieser einen Stunde müssen viele Stunden vorausgegangen sein, jedenfalls ging es in dieser einen Stunde ausschließlich um Datenstrukturen, die Elemente enthalten, deren Datentyp nicht festgelegt war. Ist für C erstmal ungewöhnlich - aus Sicht der Programmierung von GUIs aber durchaus sinnvoll.

    Die Dozentin hat ihr Thema runtergerasselt und meinte dann auf die Frage eines informatik(?)-Studenten, wozu man das denn eigentlich gebrauchen könnte, wortwörtlich "Das habe ich mir auch schon überlegt. Mir ist keine Programmieranwendung eingefallen! Aber das gibt's halt in der C-Spezifikation."

    Ich habe mich daraufhin gemeldet und gemeint, dass diese "Mutual Pointer" sehr häufig bei der Erzeugung von Benutzeroberflächen eingesetzt werden. Screen-Struktur, Fenster-Struktur und Strukturen für Buttons etc. haben einen sehr ähnlichen Aufbau. Dort gibt es Datenfelder zur Bestimmung der x-, y-Koordinaten, Breite und Höhe, Eigenschaften für Rahmen, Vordergrund- und Hintergrundfarbe, Dicke, Beschriftung, Zeichensatz, Farbe, Größe, ...


    Einer Funktion zum Zeichnen bzw. Ändern von Datenfeldern kann es daher egal sein, auf welchen Datentyp jetzt genau gezeigt wird. Es reicht ein Zeiger auf eine möglichst kompatible Struktur, die über diese Datenfelder verfügt.


    Die Dozentin blickte verwirrt-verlegen - und sah mich zum letzten Mal.



    Ja, Du hast Recht! Programmieren ist heute nicht mehr elitär. Für 35 € oder 10 € bekommt jeder einen Raspberry Pi mit einem beeindruckenden Satz vorinstallierter Programmiersprachen. C, C++, Python und neuerdings auch FreePascal/Lazarus und bestimmt die gleiche Anzahl, die ich noch nicht gefunden habe, ist mit an Bord, wenn man Raspbian in der vollständigen Version installiert. Und aus Dutzenden Programmiersprachen kann man sich noch welche auswählen.


    Kennt eigentlich jemand ADA (in Form von gnat)? Eine wahrlich faszinierende Programmiersprache, die an Klarheit und Definitionstiefe (kaum) zu überbieten ist.


    Heute ist es so:

    Jeder, der mal einen Code zum Laufen gebracht hat, postet diesen in Foren oder eigenen Blogs. Das ist gut!


    Jeder, der das gleiche haben möchte, kann sich diesen Codes bedienen (so er denn zu suchen beginnt...). Und kann damit anstellen, was immer sich ein Menschengeist auszudenken vermag.



    Python halte ich nicht für eine Programmiersprache, in der man programmieren kann, ohne sich über eine kritische Masse hinausgegangen zu sein zu beschäftigen braucht. Ganz und gar nicht! Diese Programmiersprache ist so voller Absurditäten, dass man die gar nicht alle aufzählen kann. Möchte ich auch gar nicht - davon abgesehen. Das scheinen sehr viele User vollkommen zu übersehen. programmieren ist mehr, als "ähnlichen Code zusammenzuklöppeln" und hoffen, dass es "irgendjemand im Forum schon richten wird".


    Vor ein oder zwei Jahren habe ich mal die Programmiersprache Goaldie installiert. Darauf bin ich gestoßen, weil diese Programmiersprache die gleichen Sprachelemente wie Icon besitzt. Ich habe es aber ganz schnell sein lassen, als ich gemerkt habe, dass einleitende Klammern und abschließende Klammern an bestimmten Positionen stehen müssen, sonst werden die nicht als zusammengehörig erkannt. Für mich stellte das dann das Ende aller Bemühungen dar.




    Wenn man eine Programmiersprache sucht, mit der man ohne nennenswerte Anfangsbeschäftigung ansprechende GUI-Anwendungen entwickeln möchte, dem empfehle ich seit Jahren FreePascal/Lazarus. Mit dieser Programmiersprache bzw. integrierten Entwicklungsumgebung kann man sich - ohne jemals "programmiert" zu haben - eine GUI zusammenklicken, die richtig gut aussieht und die dann sogar funktioniert. Wie man dann allerdings zur funktionalen Anwendung gelangt, ist dann wiederum Ergebnis harten Lernens. Aber der Anfang ist gemacht. Denn oftmals kommt man einen Riesenschritt weiter, wenn es einem gelingt die entsprechenden Callbacks zu programmieren. Das sind oft nur wenige Zeilen Code - und mühsam ernährt sich das Eichhörnchen...


    Wenn man aber tiefer in die Materie einsteigen möchte (Stichwort: Treiberprogrammierung, betriebssystemnahe Entwicklung) kommt man ja an C/C++ nicht vorbei. Und da trennt sich dann sehr schnell Spreu von Weizen... Da entwickelt dann eine eigene Klasse von Programmierern. Wohl dem, der dann noch Assembler kann.


    Ich war mal bei ein Firma, da durfte jeder programmieren in was er/sie wollte, wenn durch dieses Programm dem Unternehmen ein nutzen entsteht. Unglaublich , wie viele Kollegen kleine Tools in Perl, VBA und haste-nich-gesehn entwickelt haben. Aber in die Software-Entwicklungsabteilung kam nur, wer in C programmieren konnte. Alle Software, die zum Kunden gelangte, war in C geschrieben, wurde Code-Reviews unterzogen, musste diverse Metriken bestanden haben, bevor die Software überhaupt mal validiert wurde.


    Und je älter ich werde, umso mehr sehe ich Entwicklung gleich welcher Art aus der Sicht eines Validierers, der Risiken für den Anwender minimiert wissen möchte (ich berate seit 2002 fast ausschließlich in der Medizintechnik und in der Pharma-Branche). Und da kommen für mich nur Tools in Frage, die mit geringem Aufwand (Definition der Spezifikationsforderungen, Risikoanalyse, Entwicklung, Debuggen, Dokumentation, Validierung) zum Ziel führen.



    Beste Grüße


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Edited once, last by Andreas ().

  • Python ist doch eine Würgeschlange die man sich aus Jux mal im Urlaub um den Hals legt, mehr aber auch nicht.


    Alleine wenn ich einrücken lese denke ich an Bundeswehr was mir glücklicherweise erspart blieb.

    Dazu passt das dort immer getreten wird


    lasst die PIs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Ja wie nun? Wenn ich eine Structure pos mit x,y,z habe, dann kann ich sowas machen:

    pos.x = xnull
    pos.z = znull
    pos.y = ynull

    Das kannst du in Python machen, wenn du ein Objekt hast, welches die schreibbaren Attribute x, y und z hat. Z.B. die Instanz einer Klasse. Ein Tuple hat diese nicht, da geht das also auch nicht. Ein Tuple ist eh immutable, also kannst du ein Tuple objekt nicht verändern, ohne ein neues Tuple zu erstellen. Und alles nur über Indizes.

    schreibe, steht dann die y-Pos in z und die z-Pos in y, oder wird das richtig zugewiesen? Muss ich morgen mal ausprobieren...

    Ja. Die Variablennamen x, y und z sind aber komplett "willkürlich", weil im Tuple wie gesagt keine "Namen" gegeben sind (anders als in einem Struct oder in Python einem Objekt mit den Attributen). Ein Tuple hält wirklich nur die Werte in einer definierten Reihenfolge, ohne Namen.

    :wink:

  • Hi Andreas ,

    Soll heißen, in den Subforen, in denen ich sonst Beiträge lese, habe ich nichts von Dir gefunden. Soll auch heißen: Berichtest du sonst nur noch über Erlebnisse aus dem 3D-Druck? (Ist für mich noch kein Thema - kann aber kommen...)

    tja ... das liegt daran, dass ich derzeit viel mit dem Drucker mache ( und da gehört u.a. selbst konstruieren mit dazu ).

    Dann hab' ich noch einiges an angefangener Hardware-Spielereien, die ich gerne noch fertig machen möchte.

    Zudem liegt noch das Thema "LoRa" auf Eis ... da will ich die neuen Module noch testen. Ausserdem wollte ich mal mit dem Mobil-Teil in die Stadt (Stichwort Reichweite) ... dazu muss ich aber das stationäre Modul erst wieder zusammen bauen und in Betrieb nehmen.


    Wir haben hier mittlerweile so viele, mittlerweile richtig kompetente "Nachwuchs-Kräfte", dass ich gerne ein bisschen kürzer trete und mich oft gar nicht einbringe, weil die "Youngster" das echt Klasse machen.

    Ich kann dafür zeichnen, bohren, sägen, ... ;)


    cheers,

    -ds-

  • Hi dreamshader,


    Wir haben hier mittlerweile so viele, mittlerweile richtig kompetente "Nachwuchs-Kräfte", dass ich gerne ein bisschen kürzer trete und mich oft gar nicht einbringe, weil die "Youngster" das echt Klasse machen.

    Ich kann dafür zeichnen, bohren, sägen, ... ;)

    Ja, das stimmt erfreulicherweise. So jung sind die zwar auch nicht mehr - aber man kann fast alles so stehen lassen, und braucht nicht mehr seinen Senf dazu zu geben. Ich bin auch mit vielen Dingen beschäftigt. Im Haus mit Händen arbeiten (Sägen, Bohren, Schleifen, Schrauben, Fließen, ...) - im aktuellen Projekt werde ich endlich mal wieder richtig gefordert. Beratung, wie ich sie schon immer machen wollte, und seit rund 10 Jahren nicht mehr in der Form hatte.


    Beste Grüße


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Ach ja ...

    meigrafd :

    Naja ... streng genommen macht das das Betriebssystem beim Beenden auch. So gesehen ...


    Das wär mir neu. Ein geöffneter file-handler / file-descriptor bleibt solange geöffnet bis er explizit geschlossen wird... Ein klein wenig komplexer ist das Thema schon, weil zwischen System-, Benutzer- und Prozessweiten fd's, unterschieden wird... übrigens vom Kernel gesteuert.


    dass wenn ein "Python-Programm" beendet ist, nicht zwangsläufig Python auch beendet ist, ist eine Sache.

    Aber ich schrieb explizit "... beim Beenden ..." - ich weiss ja nicht, wie das bei Dir ist, aber bei mir werden, das es ja keine systemweiten Datei-Handles gibt, alle evtl. geöffneten Dateien bei Programmende geschlossen.


    Deaktiviert :

    Ok, ich steh' immer noch auf dem Schlauch... wieso brauchst du den eine Zuweisung? alles was mit def beginnt

    ich meinte damit die Definition von "Funktion" im Eingangspost ;)


    cu,

    -ds-

  • jar  

    Der Name geht nicht etwa (wie das Logo vermuten ließe) auf die gleichnamige Schlangengattung (Pythons) zurück, sondern bezog sich ursprünglich auf die englische Komikertruppe Monty Python.


    Und wenn der Befehl "Einrücken!" kam, dann war der Feierabend & das darauf bezogene Getränk nahe... ;) und leider manchmal inklusive dessen Folgen: :kotz:


    Zum Thema: Ich war auch Klammern oder in- und out-"Tags" gewohnt. Durch die Einrückungen in Python wird/werde man/ich gezwungen übersichtlich zu bleiben. Das Zeigt schon einen gewissen Humor der Entwickler. Gut, muss man nicht witzig finden, aber IMHO hat das was und trägt zur Lesbarkeit bei. :shy:

  • Hi dreamshader,


    dass wenn ein "Python-Programm" beendet ist, nicht zwangsläufig Python auch beendet ist, ist eine Sache.

    Aber ich schrieb explizit "... beim Beenden ..." - ich weiss ja nicht, wie das bei Dir ist, aber bei mir werden, das es ja keine systemweiten Datei-Handles gibt, alle evtl. geöffneten Dateien bei Programmende geschlossen.


    Das kenne ich zwar auch so, dass ein Datei-Handle mit dem Beenden der Umgebung, die eine Anwendung gestartet hat, auch alle offenen Datei-Handles automatisch geschlossen werden. Aber ich habe mich darauf noch nie verlassen. Spätestens als ich gemerkt habe, welche Dateileichen auf einem Datenträger während einer Entwicklung aufgelaufen sind, weil z.B. während des Speicherns irgendwas anderes abgestürzt ist, habe ich umgedacht. Seit der Zeit (rund 35 Jahre her) schließe ich jede Datei unmittelbar, nachdem ich sie nicht mehr benötige. Das passt dann auch gut dazu, dass eine Anwendung nur eine recht überschaubare Anzahl an Datei-Handles geöffnet haben darf bzw. ein Betriebssystem auch eine (beachtlich höhere) Obergrenze an offenen Dateien geöffnet haben darf.

    Und ich verlasse mich ehrlich gesagt auch nicht darauf, dass eine "Umgebung" das immer für mich erledigt. Das hängt nämlich auch davon ab, ob dieses Feature überhaupt vorhanden ist. Das möchte ich nicht immer unterstellen, je mehr Ebenen zwischen Betriebssystem und der Anwendung vorhanden sind.



    Beste Grüße


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.