Python WTF?



  • Hi,

    ich wollt' mal fragen, ob und warum (oder warum nicht) ihr Python verwendet. Angeblich sind Pythons Highlights seine Anfängerfreundlichkeit und dass es eine Multiparadigmen-Sprache ist. Aber sind dies wirklich Vorteile, die den Praktiker interessieren?

    Hintergrund: ich habe mich vorher nie mit Python beschäftigt, bin nun aber "gezwungen" mich damit auseinanderzusetzen. Was mir als erstes störend auffiel, ist die Inkompatibilität zwischen Python 2 und 3, sowie (wen wundert es?) die Zusammenfassung von Anweisungen mittels Einrückung (was früher oder später zu Tab- vs. Space-Problemen führen muss?!).

    Kurz: ich kenne C++, Java, PHP, diverse Hardware-Beschreibungssprachen und einiges mehr. Diese Sprachen haben allesamt Stärken und Schwächen, die ihrer Existenz einen Sinn geben. Aber Python macht auf mich den Eindruck wie gewollt und nicht gekonnt. Bitte ändert meine Meinung.

    Danke im Voraus. 🙂



  • ich verwende es gerne um Prototypen für Bildverarbeitungsalgorithmen zu erstellen.

    Dank sehr guten Bibliotheken (OpenCV, Numpy, ...) kann man da fast wie mit Matlab arbeiten.



  • Ich benutze es kaum.
    Mir fehlt einfach das statische Typsystem, statisch definierte Klassen und damit Sicherheit und vernuenftige Fehlermeldungen. Dazu ist es auch ziemlich langsam und ich mag es einfach nicht, wenn die Ebene zwischen Programmiersprache und Programminhalt vermischt wird und das wird gemacht, z.B. kann man Funktionsparameter setzen, indem man dictionaries oder arrays dereferenziert. Fuer Matherechnungen benutze ich es aber gerne, weil es so schoen viele libraries gibt und man durch eingebaute dictionaries, biginteger, list comprehension schnell den Kram zusammenklatschen kann.

    Es bietet sich auch als Sprache fuer etwas komplexere Bash-scripte an, z.B. wird es gerne zum automatischen durchlaufen von unit-tests verwendet.

    Fuer grosse Programme profitiert man von den eingebauten Features kaum, aber dafuer fehlen die Sicherungsmoeglichkeiten.

    Ich habe versucht, mit Python anzufangen, aber es gibt viel zu viele fortgeschrittene Moeglichkeiten. In C++ kann man erstmal mit einfachen Klassen anfangen und erst allmaehlich zu komplizierten Konzepten wie iteratoren wechseln.
    Ich habe uebrigens nicht mit C++ angefangen, sondern mit einer sehr primitiven, von der Syntax C aehnlichen Spieleskriptsprache und AutoIt angefangen, nachdem ich mit Python gescheitert bin.


  • Mod

    Ich wollte Python mögen. Aber ich schaffte es einfach nicht. Danach nie wieder angeguckt. Gründe sind in etwa die, die der Threadersteller und Marthog bereits genannt haben. Wenn ich die Dinge nennen sollte, die mich am meisten störten:
    -Whitespace als syntaktische Element
    -Wie Objektorientierung in Python umgesetzt wurde



  • ich habe python früher für ein ~10 kloc Projekt beruflich benutzt und mehrere kleinere private Projekte.

    Seit einigen Jahren benutze ich python nicht mehr, aus dem einfachen Grund, daß ich Skripting fast nur noch mit bash mache und "ernsthafte" Sachen eigentlich immer mit C++.

    Gerne kombiniere ich bash mit C++ statt eine Skriptsprache zu benutzen.

    python 2 vs python 3 habe ich nur am Rande miterlebt, wäre für mich aber ein ernsthafter "show stopper", wenn ich Zuschauer wäre. Mich hat damals schon die Umstellung von 2.3 auf 2.4 (glaub' ich) gestört, wo ich in einem beruflichen Projekt alle Exceptions (waren mehrere hundert) von string exceptions auf exception classes umstellen mußte 😮



  • ach ja: das Argument "self" finde ich auch nicht so gelungen, und __main__ ... naja. Immerhin hat das Objektmodell durch new-style classes und meta classes an Möglichkeiten zugelegt, auch wenn es auch mich immer noch irgendwo "angeflanscht" wirkt.


  • Administrator

    Ich mag Python zum Erstellen von Tools oder kleinen Hilfsprogrammen. Sobald es ein grösseres Programm wird, bekomme ich Probleme mit der Strukturierung. Es ist unglaublich frustrierend, dass das Konzept von One-Class-Per-File nicht möglich ist, da das File selber ein Modul darstellt. Dadurch bekommt man unnötige Namensräume.

    Und wie bereits erwähnt wurde, fehlt mir dann irgendwann auch ein statisches Typsystem. Für komplexere Dinge erachte ich dies einfach als Fehleranfällig und sogar hinderlich in einer IDE, da es zum Teil einfach nicht herausfinden kann, was für ein Typ nun tatsächlich angeboten wird, wodurch nicht angegeben werden kann, welche Methoden zur Verfügung stehen, usw.

    Aber eben für kleine Dinge ist es sehr gut. Vor allem wegen der umfassenden Standardbibliothek und vielen zusätzlichen verfügbaren Bibliotheken. Man kann so recht schnell einfache Dinge zusammensetzen.

    Z schrieb:

    Was mir als erstes störend auffiel, ist die Inkompatibilität zwischen Python 2 und 3, ...

    Wenn du Python 3 programmierst, ist das grundsätzlich kein Problem. Jede Bibliothek, welche noch gewartet wird, sollte inzwischen für Python 3 vorhanden sein. Python 2 wird ja nicht mehr weiterentwickelt. Was ich nie so recht verstanden habe, wieso man dies nicht mehr erzwungen hat. Wieso hat man den Leuten so viel Zeit gelassen, man hätte mehr Druck zum Wechseln ausüben sollen. Die Unterschiede sind nicht so markant und können relativ leicht durchgeführt werden. Dadurch dass man so lange Zeit gelassen hat, haben viele Bibliothek den Wechsel hinausgezögert und es gab eine unglaublich lange Phase, wo irgendwie alles inkompatibel zueinander wurde. Äusserst mühsam...

    Z schrieb:

    ... sowie (wen wundert es?) die Zusammenfassung von Anweisungen mittels Einrückung (was früher oder später zu Tab- vs. Space-Problemen führen muss?!).

    Das bemängeln irgendwie alle Anfänger von Python. Ich hatte dieses Problem noch überhaupt nie. Nicht einmal in den Anfangszeiten. Ich weiss nicht, woher die Idee kommt, dass dies ein Problem darstellen soll. Jede IDE, ja sogar jeder Texteditor wird dir dabei helfen, dass dies richtig gemacht wird. Python 3 empfiehlt auch nur Spaces zu verwenden und warnt dich, falls du das nicht gemacht hast. Ich meine jeder rückt seinen Code sowieso bereits ein. Da ist es eigentlich wirklich egal, ob nun noch geschweifte Klammern oder ähnliches am Anfang und Ende verwendet werden oder nicht.



  • Marthog (sinngemäss) schrieb:

    Ich stelle auf Stur und weigere mich, ein dynamisches Typsystem zu benutzen

    Mit der Einstellung kommst du nicht weit. Es hat Vor- und Nachteile aber wenn man die Programme vernünftig angeht, hat man da kein Problem.

    SeppJ schrieb:

    -Whitespace als syntaktische Element

    Wie kann das ein Grund sein? Die Syntax von C++ finde ich ja mal obermühsam.

    SeppJ schrieb:

    -Wie Objektorientierung in Python umgesetzt wurde

    Umgesetzt in welchem Sinne? Die Umsetzung war mit Python 2 in der Tat noch broken. Mit Python 3 wurde ist das gefixt.

    Die Designentscheidung von Membern als Dictionary finde ich sehr gelungen. Mag auf den ersten Blick etwas seltsam erscheinen, aber die Möglichkeiten mit Meta-Klassen sind wirklich enorm.

    Decorators vermisse ich auch ständig in C++.

    Dravere schrieb:

    Ich mag Python zum Erstellen von Tools oder kleinen Hilfsprogrammen. Sobald es ein grösseres Programm wird, bekomme ich Probleme mit der Strukturierung. Es ist unglaublich frustrierend, dass das Konzept von One-Class-Per-File nicht möglich ist, da das File selber ein Modul darstellt. Dadurch bekommt man unnötige Namensräume.

    Dann schreibst du halt ein __init__.py. Ist sowieso immer eine gute Idee, nicht alle Symbole zu exportieren. Wobei ich nicht der Meinung bin, dass das One-Class-Per-File-Konzept in Python sehr sinnvoll ist.



  • pythonic schrieb:

    Marthog (sinngemäss) schrieb:

    Ich stelle auf Stur und weigere mich, ein dynamisches Typsystem zu benutzen

    Mit der Einstellung kommst du nicht weit. Es hat Vor- und Nachteile aber wenn man die Programme vernünftig angeht, hat man da kein Problem.

    Der Vorteil ist, dass man es mal so eben schnell hinklatschen und etwas ausprobieren kann, insbesondere wenn es auf verschiedenen Typen aufbauen soll.
    Python ist gut fuer Extreme Programming geeignet, weil man den Code schnell anpassen kann und viele Fehler uebers testen findet.
    Fuer grosse Projekte kann es hingegen sehr schnell passieren, dass man einfach mal eine Methode vergessen hat und einem der Fehler dan erst zur Laufzeit um die Ohren fliegt. Der Fehler tritt aber schoen in irgendwelchen tief verschachtelten Funtionen auf und im schlimmsten Fall wird das Objekt sogar in einem Container gespeichert und erst eine ganze Zeit spaeter ausgeloest.
    Ein statisches Typsystem faengt diese Feher alle zur Compilezeit ab.

    pythonic schrieb:

    SeppJ schrieb:

    -Wie Objektorientierung in Python umgesetzt wurde

    Umgesetzt in welchem Sinne? Die Umsetzung war mit Python 2 in der Tat noch broken. Mit Python 3 wurde ist das gefixt.

    Die Designentscheidung von Membern als Dictionary finde ich sehr gelungen. Mag auf den ersten Blick etwas seltsam erscheinen, aber die Möglichkeiten mit Meta-Klassen sind wirklich enorm.

    Decorators vermisse ich auch ständig in C++.

    Hier:

    template <class T>
    auto decorator(T some_func) {
        return []() {
            std::cout << "decorator called";
    	return some_func();
        };
    }
    

    mit ein paar templates kann man auch noch auf beliebige Parameter erweitern und mit einem Macro kommt man vielleicht sogar auf nahezu pythons syntax. Wenn man die Funktion zur Laufzeit generisch will, kann man auch std::function einsetzen, verliert dadurch aber etwas Geschwindigkeit.



  • Marthog schrieb:

    Hier:

    template <class T>
    auto decorator(T some_func) {
        return []() {
            std::cout << "decorator called";
    	return some_func();
        };
    }
    

    mit ein paar templates kann man auch noch auf beliebige Parameter erweitern und mit einem Macro kommt man vielleicht sogar auf nahezu pythons syntax. Wenn man die Funktion zur Laufzeit generisch will, kann man auch std::function einsetzen, verliert dadurch aber etwas Geschwindigkeit.

    Das kann ja wohl nur ein schlechter Scherz sein.
    Oder wie tauscht du damit eine Memberfunktion eines Objekts aus?



  • Z schrieb:

    Hi,
    ich wollt' mal fragen, ob und warum (oder warum nicht) ihr Python verwendet.

    Ich nutze Python um Blender und Gimp zu erweitern und anzupassen. Meine Pythonprogramme sind auch außerhalb dessen meist sehr klein. Große Software entwickeln finde ich extrem anstrengend, da geht mir jeglicher Spaß verloren wenn ich erst in Schichten, DesignPattern und OOP denken muss, also lasse ich es. Ich lebe schließlich nur einmal und das recht kurz.



  • Ich habe die letzte Woche einiges in Python gemacht, ja. Aber mögen tue ich das nicht. Ich bin einfach kein Fan von dynamischen Sprachen. Das kommt mir alles so schmutzig vor. Für kleine Sachen find' ich das noch OK … wobei ich da auch noch GNU/Octave in meiner Werkzeugkiste habe und gerne mal benutze (auch dynamisch, aber da stört es mich nicht).



  • Mir geht es genau umgekehrt ich finde Sprachen wie C++ total lästig, wenn man nur kleine Plugins oder Scripts schreiben möchte. Ich brauche halt kein OOP, Typensicherheit und was weiß ich noch alles. Ich möchte so angenehm und schnell(im Sinne von Arbeitszeit) wie Möglich von A nach B kommen und nicht so sicher oder erweiterbar wie möglich.

    Ist doch schön dass sich das Programmieren und die Sprachen dazu weiter entwickeln und sich den Bedürfnissen der User immer mehr anpassen. Generalisierte Lösungen sind meist immer schwere Monster und meist weniger für den speziellen Zweck zu gebrauchen.

    Python hat sich bewährt, sonst hätte es nicht so lange überlebt. Was da wie unter der Haube passiert ist mir als Anwender herzlich egal. Wenn das Werkzeug zu mir passt wird es benutzt, wenn es mir zu kompliziert ist kommt es in die Tonne.



  • BlenderRender schrieb:

    Ich brauche halt kein OOP…

    Das ist kein Argument für Python und gegen C++, weil Du in beiden Sprachen genauso viel/wenig "OOP" anwenden kannst/musst.

    BlenderRender schrieb:

    Python hat sich bewährt, sonst hätte es nicht so lange überlebt.

    Weil es überlebt hat, ist es gut? Oder nur gut genug? 😉 Das wäre auch kein Argument.

    Jeder nach seiner Fasson…



  • Für System Scriptsprachen gibt es defakto ja nur 3 Optionen:

    Perl, Python, Ruby

    Perl verwenden nur Masochisten also bleibt die Wahl zwischen Python und Ruby. Die Beiden nehmen sich aber nicht viel.

    Deshalb verwenden viele Leute eben Python.



  • Du hast Lua vergessen. Also mit Lua, Pyhon und Javascript + JSON/XML als Beschreibungssprache und einem kleinen Coreteil C/C++/Rust etc. kann man schon ganz mächtige Applikationen zaubern. Der Anteil von reinen Systemsprachen wird doch immer weniger. Man nimmt sie halt da wo man sie nehmen muss, aber ab dann kann man sehr gut alles scripten.

    Ein großes Projekt nur in reinem C++ wäre wohl heute ganz großer Unsinn.





  • BlenderRender schrieb:

    Ein großes Projekt nur in reinem C++ wäre wohl heute ganz großer Unsinn.

    Gerade bei grossen Projekten wird das was die dynamischen Scriptsprachen wie Lua oder Python so praktisch macht sehr gefährlich.
    Also nein, grosse C++ Projekte sind kein Unsinn. Du hast einfach nur keine Ahnung.



  • Ich freue mich, dass ich anscheinend nicht alleine mit meiner Meinung bin. Ich verwende Python auch nur um Kleinigkeiten zu programmieren. Kleine Scripte, die mir die Arbeit erleichtern. Für alles andere setzte ich auf typsichere Sprachen, weil ich einfach keine Lust habe, dass mir Programme wegen Fehlern zur Laufzeit um die Ohren fliegen, die eine typsichere Sprache schon zur Compilezeit abgefangen hätte.


Anmelden zum Antworten