Warum ist Python so beliebt? (C) 2019-2024 T.Birnthaler OSTC GmbH ============================ --> Why Python? Eric Raymond * Ursprünglich als LEHRSPRACHE konzipiert, daher leicht zu erlernen (auch für technisch Orientierte ohne formale Programmierausbildung). * Syntax ist relativ einfach lesbar/schreibbar und konsistent (verglichen mit anderen Programmiersprachen wie z.B. C++) + Nur 35 Schlüsselworte (--> Bedeutung aller anderen Bezeichner änderbar) * Stark VEREINHEITLICHTES Programmiermodell (analog SmallTalk, LISP): + ALLES ist ein OBJEKT (auch Werte elementarer Datentypen, Funktionen, Datentypen, Klassen, Module) + Es gilt immer: NAME --> REFERENZ --> OBJEKT = TYP + WERT + REFCNT (NAME ist neutral, REFERENZ ist auch neutral, OBJEKT enthält alle Daten) + Kein Unterschied zwischen eingebauten Datentypen und neu erzeugten Klassen (KLASSE == DATENTYP) + Variablen sind IMMER INITIALISIERT + Es gibt nur CALL BY REFERENCE und RETURN BY REFERENCE + Automatische Speicherverwaltung per REFERENCE COUNTING + GARBAGE COLLECTION + DUCK TYPING ("if it looks and behaves like a duck, it's a duck") + Vieles per NAMENS-KONVENTION geregelt + EINRÜCKUNG ist bedeutungstragender Teil der Syntax (def. Verschachtelung) und wird somit erzwungen (BLOCK INDENTATION) * Nichts wird verboten, alles ist möglich, weniges wird erzwungen, vieles per Konvention geregelt (PEP 8). * Ausgezeichnete Fehlermeldungen zur Übersetzungs- und zur Laufzeit (werden mit jeder Python-Version sogar noch verbessert). * Darf durch Einbau neuer Fähigkeiten und Eigenschaften nicht langsamer werden (lehrreiche Erfahrung aus dem Übergang von Python 2 nach 3, P3 war wg. UTF8 bei String-Verarbeitung zunächst 3-mal langsamer als P2). * Multiparadigmensprache: Unterstützt strukturierte, objektorientierte, funktionale, deklarative und aspekteorientierte Programmierung. * Viele moderne Programmierkonzepte werden unterstützt: + Iteratoren, Generatoren und Koroutinen + Metafunktionen / Higher-order Funktionen + Closures + Dekorateure + lambda, map, filter, reduce + Asynchrone Programmierung + Introspection, Reflection, Selfdescription + Descriptoren + Name Spaces + Kontext Manager + Operator Overloading + Properties + Wrapper-Funktionen und Currying + Abstract Base Classes + Metaklassen + Dynamische Klassen (Monkey Patching) + (Multiple) Inheritance + Traits und Mixins + Type Annotation / Type Hints + Comprehensions + Dynamic Typing + Meta-Programming + Positional and Keyword Arguments + Exception Handling + Domain Specific Languages (DSL) + ... * Umfangreiche und ausgereifte Standardbibliothek wird mitgeliefert ("Batteries included"). * Python und seine Standardbibliothek sind portabel. * Umfangreiche und ausgezeichnete Online-Dokumentation der eigentlichen Sprache, der Standardbibliothek sowie des Entwicklungsprozesses (PEPs). * Quellcode-Dokumentation per "Docstring"-Verfahren in Code integrierbar und per "help"-Funktion oder "pydoc"-Kommando aus Quellcode extrahierbar. * Über 30 Jahre weiterentwickelt und gereift. * Lizenz ist sehr freizügig (MIT), Community agiert sehr vernünftig, eine Kommerzialisierung ist nicht zu befürchten. * Der Umfang der Python-Laufzeitumgebung ist relativ klein (etwa 200 MB), sie lässt sich somit leicht ausliefern und in andere Systeme einbetten. * In anderen Programmiersprachen geschriebene Bibliotheken lassen sich relativ leicht mit einer Python-Schnittstelle ausstatten und nutzen (man merkt nicht, dass man in einer anderen Sprache erstellten Code nutzt). * "Lingua Franca" zur Nutzung vieler Bibliotheken. ("Glue Language" = Bindeglied). * Zentrales Repository PyPi mit frei verfügbaren Bibliotheken, aus dem diese einfach inkl. Abhängigkeiten installiert werden können (pip, easy_install). * Viele frei verfügbare Bibliotheken für aktuell relevante Themen vorhanden: + AI/KI (Artificial Intelligence/Künstliche Intelligenz) + ML (Machine Learning) + Neuronale Netze (Deep Learning) + Data Science + Statistik + Simulation + Number Crunching (NumPy) + Symbolische Mathematik (SymPy) + Configuration Management + Container Management + Software Deployment + Ticket Systeme + TDD (Test Driven Development) + BDD (Behaviour Driven Development) + IoT (Internet of Things) + Controller (RaspberryPi) + Web Frameworks + GUI Toolkits * Ersetzt zunehmend kommerzielle Systeme wie Matlab, R, Stata, SAS, Excel, Labview, ... * Kritische Masse an Verwendern ist schon lange erreicht. * War einfach zur rechten Zeit am rechten Ort!