Für was nutzt ihr Python?



  • DirkB schrieb:

    Für nichts.

    Dieselbe Antwort bekomme ich sicher auch im Python-Forum über C/C++. Hätte ja sein können, dass hier ein paar Leute unterwegs sind die ab und an mal über den Tellerrand hinaus schauen.



  • Schlangenbeschwörer schrieb:

    Dieselbe Antwort bekomme ich sicher auch im Python-Forum über C/C++.

    Ich spreche nur für mich

    Schlangenbeschwörer schrieb:

    Hätte ja sein können, dass hier ein paar Leute unterwegs sind die ab und an mal über den Tellerrand hinaus schauen.

    Das tue ich.
    Aber nicht mit Python.



  • Im Moment für alles. Ich komme mit meiner C++-Lernerei einfach nicht wirklich auf einen grünen Zweig. Das liegt hauptsächlich an meinem Durchhaltevermögen. Mir macht C++ Spaß, wirklich - aber die Lernkurve ist zu steil, um mich bei der Stange zu halten.

    Python hat mich von Anfang an begeistert, und die Fortschritte, die ich mache, sind mit meinen C++-Abenteuern nicht vergleichbar. Und Python macht mindestens genauso viel Spaß. Es ist elegant und lässt zumindest mich für Desktopanwendungen nichts vermissen.

    C++ ganz den Rücken zu kehren, werde ich aber nicht schaffen. 😉



  • Schlangenbeschwörer schrieb:

    Für was nutzt ihr Python?

    Für alles wo die alten Dinosaurier-Progger früher PERL nutzten.
    Und dazu noch für viele Sachen wo die heutigen Kindergarten-Progger Visual Basic oder Java nutzen.

    Seriösere Antwort:
    Auf meinem Projekt persönlich:
    - Scripts die Textdateien parsen, zusammenfasen oder umwandeln.
    - Testscripts die Testszenarien auf Serverprogrammen ablaufen lassen.
    - Kleinere GUI-Apps, für Tools oder Prototypen.
    - ...

    Für richtig grosse, Mission-critical Produktionsprojekte kann ich mir Python nicht vorstellen, hauptsählich wegen der fehlenden Typsicherheit. Und nein, Unit-Tests sind dazu keine Alternative.



  • So ähnlich geht es mir auch, nur habe ich zuerst C dann etwas C++ gelernt. Ich habe damit auch ein paar Sachen gemacht, aber ich bin derzeit völlig verblüfft wie einfach Programmieren sein kann, wenn man Python nutzt. Ich lege C und C++ daher erst mal auf Eis, falls ich in Python mal einen Speed brauche, den mir die Libs nicht geben können, dann kann ich mir selbst immer noch Module schreiben, bzw gibt es ja Tools die automatisch Header Files für Python wrappen.

    Ich sehe jetzt meine C und C++-Zeit nicht als völlig sinnlos an, aber ich werde so schnell kein Projekt mehr damit anfangen. Das ist ja ein ganz großer Krampf im Vergleich zur Entwicklung mit Python. Selbst Klassen nutze ich nur noch selten, da sie oft unnützer Ballast für meine kleinen Hobbyprojekte sind.



  • Für richtig grosse, Mission-critical Produktionsprojekte kann ich mir Python nicht vorstellen

    Nein, ich mir auch nicht, aber solche Projekte kann ich allein eh nicht bewerkstelligen und im Team werde ich sicherlich nie arbeiten. Ich möchte mir aber ehrlich auch nicht vorstellen was Großes mit C++ oder gar C zu machen, dann schon eher Java oder so.

    Aber genau deine genannten Anwendungsfälle sehe ich auch als Hauptziele für Python, schnell mal was mit GUI machen oder einen Crawler oder einen Konverter schreiben. Ideen einfach schnell und unkompliziert umsetzen und jeder Entwickler versteht dabei den Code, auch die Anfänger.



  • Zum Webseiten scrapen (urllib und pyquery sind echt geil) und kleine Scripts.
    Nichts Größeres weil mich da das fehlende (explizite) Typsystem furchtbar nervt, ich finde Programmieren ohne Typen sehr schwierig.



  • Ethon schrieb:

    Nichts Größeres weil mich da das fehlende (explizite) Typsystem furchtbar nervt, ich finde Programmieren ohne Typen sehr schwierig.

    Solche Sprachen haben genau einen Typ.

    Für winzige Programme, die in lesbarer Schrift auf den Bildschirm passen, kann ich gerade so noch mit Lua leben. Ich kann mir aber nicht vorstellen wie man damit größere Programme schreiben kann. Auf der Arbeit musste ich mal einen Bug in einer wenige hundert Zeilen umfassenden Javascript-Datei für eine Webseite beheben. Das ist wahnsinnig schwierig, wenn man eine IDE und einen Compiler gewohnt ist, die ein sinnvolles Typsystem unterstützen und damit ganz viel Unsinn vor dem Ausführen finden. Was kann in diesem Argument alles hereinkommen? In einer vernünftigen Sprache ist diese Frage schnell beantwortet, denn es steht direkt in der Parameterliste. In so einer Schwachsinnssprache wie Javascript muss man dann alle Aufrufe heraussuchen und hoffen, dass man keinen übersehen hat. Etwas umbenennen oder einen Parameter hinzufügen? In einer vernünftigen Sprache ganz einfach, weil dann bei jeder Verwendung der Compiler einen Fehler meldet. In ach so flexiblen "dynamischen" Sprachen ist so etwas Einfaches der Horror.

    Da muss es einen tollen Vorteil geben, der den gewaltigen Produktivitätsverlust beim Herumsuchen ausgleicht. Kann mich mal jemand aufklären?



  • Ein Typ ist so gut wie kein Typ. 😉

    Und ich habe mich auf das gleiche Problem bezogen: Ich habe mich in einem 500 Zeilen Script nicht mehr ausgekannt nachdem es ein Studienkollege etwas refactort hat und musste wirklich die komplette Aufruf-Hierachie durch manuelles Typ-Tracing betreiben um zu verstehen was da herum gereicht wird. Hint: es war etwas wie eine Liste von Dictionaries, welche Strings auf Listen mappen.
    Grausam.



  • TyRoXx schrieb:

    Da muss es einen tollen Vorteil geben, der den gewaltigen Produktivitätsverlust beim Herumsuchen ausgleicht. Kann mich mal jemand aufklären?

    Nö, dynamic typing is bullshit. Aber Python ist an sich recht nett um schnell irgendwas zusammenzuhacken. Richtige Software würde ich damit nicht bauen wollen...



  • Für was nutzt ihr Python?

    für ein Skript, das die Frage beantwortet, wofür ihr python benutzt.

    Scherz.

    Für Aufgaben, für die mir bash zu unbequem ist, die aber zu einfach sind, um dafür ein C++ Projekt aufzusetzen. Z.B automatisierte log-Analysen und etwas kompliziertere Admin Skripten.

    In den letzten Jahren gehe ich aber mehr und mehr dazu über, die kleineren (und alle Admin-)Sachen mit bash zu skripten, für alles Größere C++ zu nehmen, und den Rest mit domain-specific languages. Für kleine Tools mit GUI würde ich fast noch immer lieber tcl/tk nehmen.

    Vor einigen Jahren hatte ich ein berufliches Projekt in python 2 mit rund 10k Loc, und ehrlich gesagt würde ich nicht wieder ein 10k Loc Projekt mit python erledigen wollen.

    Irgendwie habe ich keine Bedarfslücke, für die ich python wirklich bräuchte. Ist eine ganz hübsche Sprache.



  • Für Webserver. Mit dem Framework Django ist es extrem einfach, einigermassen komplizierte Webseiten zu erstellen. Klassenhierarchien werden automatisch (mit Reflection) zu Datenbanktabellen, Queries sind eine DSEL und in den HTML-Templates kann ich die Objekte aus Python benutzen.

    Ich wüsste nicht, wie das in C++ vernünftig umsetzbar wäre.

    Mit dynamic Typing hatte ich bisher nur ein Problem, wenn ich Parameter vertauscht habe, aber das passiert mir mit Named Arguments nicht mehr.



  • Ich nutze Python für ImageProcessing mit OpenCV und als GUI für CommandLineTools.



  • Ich benutze es momentan, um ein Tool in einer Firma zu schreiben, dass alle SVN-Repositories in ein einziges merged. Es gibt dafür leider kein Tool im Internet.

    python finde ich als Skriptsprache ganz gut, aber nicht sooo gut, wie jetzt vll. andere. Ruby ist z. B. ausdrucksstärker, Scala ebenfalls und hat dazu noch Typsicherheit und Performance. Das Beste an pyhton sind einfach die libs.

    L. G.,
    IBV



  • IBV schrieb:

    Ich benutze es momentan, um ein Tool in einer Firma zu schreiben, dass alle SVN-Repositories in ein einziges merged. Es gibt dafür leider kein Tool im Internet.

    Witzig, genauso ein Programm für Git habe ich neulich noch in Bash geschrieben.



  • Manchmal nutze ich Python fuer kleine Scripte, aber ansonsten nur noch Java. C++ muss ich leider gerade ein wenig fuer einen Auftrag machen, was fuer eine schreckliche Sprache und Workflow. Respekt wer sich so etwas freiwillig antut.



  • Python ist eine kleine, praktische Skriptsprache, mit der man sich schnell mal kleine Programme zusammenschreiben kann. Dabei hat man auch noch eine bessere Syntax und viel mehr moeglichkeiten als mit Bash. Auch zum ablaufenlassen von Tests scheint es ganz praktisch zu sein.

    Ich nutze es hauptsaechlich fuer kleine Berechnungen und um mal schnell was auszuprobieren.


  • Mod

    Für nichts mehr. Ich habe es eine Weile versucht, für Programme, die für Shellscript zu komplex und für eine general purpose Sprache zu einfach sind. Aber die Sprache hat mir überhaupt nicht gefallen. Seither bin ich stattdessen sehr viel besser in bash geworden und schrecke auch nicht zurück, für eine kleine Aufgabe C++ zu benutzen. Da habe ich mittlerweile so viele schöne kleine Helferlein, dass diese kleinen Aufgaben fast so einfach gehen wie in Scriptsprachen. Seither besteht kein Bedarf mehr für Zwischensprachen und ich habe Python mehr oder weniger aus dem Gedächtnis verdrängt. Ich weiß gar nicht mehr, was mich konkret störte, ich glaube es war irgendwas mit dem Objektmodell und/oder der Typisierung.

    PS: Und Nein, meine Helferlein veröffentliche ich nicht. Die sind historisch gewachsen und daher wahrscheinlich nur von mir vernünftig nutzbar.



  • Ich nutze Python auch überhaupt nicht.

    Ich finde Python-Code unglaublich anstrengend zu lesen. Ich hatte mal versucht damit was zu machen und alles in mir hat sich dagegen gewehrt solch einen Code zu schreiben. Es hat sich nicht natürlich für mich an gefühlt. Ich bin halt voll auf den C und C++ Syntax gepolt. Vielleicht bin ich auch zu alt um mich komplett um zu gewöhnen.



  • So viele Python-Hater hier! Dabei ist es so eine schöne Sprache und ich benutze sie, wann immer ich kann. Wer braucht schon C/C++!

    Nein, ich habe dieselben Probleme wie die meisten anderen und würde mich hüten, größere Anwendungen in Python zu schreiben. Für die abstrakte Ebene der Datenverarbeitung mit SciPy/NumPy ist Python ganz okay (was aber mehr mit den Bibliotheken zu tun hat als mit der Sprache), und MatPlotLib ist langsam, erzeugt aber wunderschöne Plots. Aber für größere kommerzielle Projekte mit mehreren Entwicklern und einer Deadline finde ich es ungeeignet.

    Vor einiger Zeit habe ich mal das Vergnügen gehabt, mich näher mit zwei größeren Python-Projekten aus der Bildverarbeitung auseinanderzusetzen, was meine Zweifel genährt hat:

    • beide GUIs waren furchtbar. Es gibt Qt-Wrapper für Python, und Qt kann sehr brauchbare Ergebnisse erzeugen, aber anscheinend haben Python-Programmierer kein Händchen dafür. Kein Wunder, wenn selbst der Schöpfer der Sprache solche Posts abläßt. "This then, was the big eye-opener for me: that despite all the hype, Windows UI programming is as tedious today as it was in 1995." - Klar, wir schreiben ja alle unsere Message-Loops von Hand; und was bitte ist ein Form-Designer?
    • der GIL verhindert fast alle nützlichen Formen von Multithreading. Aber wer braucht das schon, solange Intel alle zwei Jahre eine doppelt so schnelle CPU rausbringt!! Egal, jedenfalls waren die Autoren des einen Programms durchaus der Meinung, daß Multithreading ihnen nützen würde. Was also tun? Separate Worker-Prozesse spawnen und per IPC mit Daten füttern 😞
    • fast alle datenverarbeitenden Bibliotheken haben ein C-Backend, weil Python einfach zu langsam ist. Das wäre ja noch kein Problem, aber die meisten nutzen dafür Cython, und das läuft nur zusammen mit CPython. Das ist in der Praxis ein großer Hinderungsgrund, irgendwelche weniger bescheuerten Alternativen wie IronPython zu verwenden: alle Bibliotheken, die Cython verwenden, werden dann nicht unterstützt.
    • auch in Python hat der Autor einer Funktion üblicherweise eine genaue Vorstellung davon, welche Argumenttypen er erwartet. Die Folge ist, daß die typische API-Funktion einer Bibliothek zu 3/4 aus manuellen Typ-Assertions besteht. Und das ist guter Library-Code; wenn da keine Typ-Assertions sind, bekommt man irgendwo in den Untiefen der Bibliothek eine obskure Exception. Das ist fast dasselbe Problem wie mit Template-Typargumenten in C++, nur eben zur Laufzeit und ohne Performancevorteil. Außerdem fördert die dynamische Typisierung totum pro parte-Patterns ("dieser Parameter ist die ID des Objekts, aber du kannst auch das Objekt übergeben"), die eine statische Analyse zusätzlich erschweren. Und alles nur für ein paar Zeichen Tippersparnis.
    • die Komfort-Nachteile durch das dynamische Typsystem wurden schon erwähnt. Dabei gibt es sogar Tools, die eine Rohform von Code-Completion und sogar Refactorings anbieten (z.B. PTVS); aber es gibt ja sogar eine Python-Implementation ohne GIL (nämlich IronPython), und die benutzt auch keiner. Der wahre Python-Hacker schreibt seinen Code unter Linux im Texteditor (Debugger? Was ist das?), setzt CPython, automake und pip voraus und ist weitgehend kompatibel mit sich selbst.
    • natürlich sitzt die Hälfte der Abhängigkeiten noch auf Python 2.7 fest, so daß man selbst kein 3.x verwenden kann.

    Klar ist mit Python einfacher anfangen ( print "Hello, World!" ) als mit, sagen wir, C# ( using System; namespace MyProgram { public static class Program { public static void Main(string[] args) { Console.WriteLine("Hello World!"); } } } ). Aber sobald man mal >1000 LoC hat, sind die syntaktischen Fixkosten von C# irrelevant, ganz abgesehen davon, was einem der Tool-Support alles abnimmt ("Generate Method Stub" & "Implement Interface" ftw).

    So, jetzt will ich aber mal eine ordentliche Apologie für Python lesen, sonst wird das hier zu einseitig 🤡


Anmelden zum Antworten