Kapitel 1. Eine Python-Fragestunde
Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com
Wenn du dieses Buch gekauft hast, weißt du vielleicht schon, was Python ist und warum es ein wichtiges Werkzeug ist, das du lernen solltest. Wenn nicht, wirst du wahrscheinlich erst dann von Python überzeugt sein, wenn du den Rest dieses Buches gelesen und ein oder zwei Projekte durchgeführt hast. Doch bevor wir uns in die Details stürzen, stellen wir dir im ersten Kapitel dieses Buches kurz einige der Hauptgründe für die Beliebtheit von Python vor. Um eine Definition von Python zu erarbeiten, hat dieses Kapitel die Form einer Frage-und-Antwort-Runde, in der einige der häufigsten Fragen von Anfängern gestellt werden.
Warum benutzen Menschen Python?
Da es heute viele Programmiersprachen gibt, ist dies die übliche erste Frage von Neueinsteigern. Angesichts der Tatsache, dass es derzeit etwa 1 Million Python-Benutzer gibt, lässt sich diese Frage nicht mit absoluter Sicherheit beantworten.
Aber nachdem ich in den letzten 16 Jahren etwa 260 Gruppen und über 4.000 Schüler/innen in Python unterrichtet habe, habe ich einige Gemeinsamkeiten festgestellt. Die wichtigsten Faktoren, die von Python-Benutzer/innen genannt werden, scheinen diese zu sein:
- Software-Qualität
Für viele hebt sich Python durch seinen Fokus auf Lesbarkeit, Kohärenz und Softwarequalität im Allgemeinen von anderen Skriptsprachen ab. Python-Code ist so konzipiert, dass er lesbar und damit wiederverwendbar und wartbar ist - viel mehr als bei traditionellen Skriptsprachen. Die Einheitlichkeit des Python-Codes macht ihn leicht verständlich, auch wenn du ihn nicht selbst geschrieben hast. Außerdem unterstützt Python fortgeschrittene Mechanismen zur Wiederverwendung von Software, wie z. B. objektorientierte (OO) und funktionale Programmierung.
- Produktivität der Entwickler
Python steigert die Produktivität von Entwicklern um ein Vielfaches gegenüber kompilierten oder statisch typisierten Sprachen wie C, C++ und Java. Python-Code ist in der Regel ein Drittel bis ein Fünftelso groß wie entsprechender C++- oder Java-Code. Das bedeutet, dass weniger getippt werden muss, weniger zu debuggen ist und weniger nachträglich gewartet werden muss. Python-Programme sind außerdem sofort lauffähig, ohne die langwierigen Kompilier- und Link-Schritte, die bei anderen Tools erforderlich sind.
- Übertragbarkeit des Programms
Die meisten Python-Programme laufen unverändert auf allen wichtigen Computerplattformen. Die Portierung von Python-Code zwischen Linux und Windows zum Beispiel ist in der Regel nur eine Frage des Kopierens des Skript-Codes zwischen den Rechnern. Außerdem bietet Python zahlreiche Möglichkeiten, portable grafische Benutzeroberflächen, Datenbankzugriffsprogramme, webbasierte Systeme und vieles mehr zu programmieren. Sogar Betriebssystemschnittstellen, einschließlich Programmstarts und Verzeichnisverarbeitung, sind in Python so portabel wie nur möglich.
- Bibliotheken unterstützen
Python wird mit einer großen Sammlung vorgefertigter und portabler Funktionen geliefert, die unter als Standardbibliothek bekannt ist. Diese Bibliothek unterstützt eine Reihe von Programmieraufgaben auf Anwendungsebene, vom Textmusterabgleich bis zum Netzwerkskripting. Darüber hinaus kann Python sowohl mit selbst erstellten Bibliotheken als auch mit einer umfangreichen Sammlung von Anwendungssoftware von Drittanbietern erweitert werden. Im Bereich der Drittanbieter bietet Python Tools für die Erstellung von Websites, die numerische Programmierung, den Zugriff auf serielle Schnittstellen, die Entwicklung von Spielen und vieles mehr (eine Auswahl findest du weiter oben). Die Erweiterung NumPy zum Beispiel wird als kostenloses und leistungsfähigeres Äquivalent zum numerischen Programmiersystem Matlab beschrieben.
- Integration von Komponenten
Python-Skripte können über eine Vielzahl von Integrationsmechanismen problemlos mit anderen Teilen einer Anwendung kommunizieren. Durch solche Integrationen kann Python als Werkzeug zur Produktanpassung und -erweiterung eingesetzt werden. Heutzutage kann Python-Code C- und C++-Bibliotheken aufrufen, von C- und C++-Programmen aufgerufen werden, sich in Java- und .NET-Komponenten integrieren, über Frameworks wie COM und Silverlight kommunizieren, mit Geräten über serielle Schnittstellen zusammenarbeiten und über Netzwerke mit Schnittstellen wie SOAP, XML-RPC und CORBA interagieren. Es handelt sich nicht um ein eigenständiges Tool.
- Vergnügen
Dank der Benutzerfreundlichkeit und der eingebauten Werkzeuge kann Python das Programmieren zu einem Vergnügen und nicht zu einer lästigen Pflicht machen. Das mag zwar ein immaterieller Vorteil sein, aber seine Wirkung auf die Produktivität ist ein wichtiger Pluspunkt.
Von diesen Faktoren sind die ersten beiden (Qualität und Produktivität) wahrscheinlich die überzeugendsten Vorteile für die meisten Python-Nutzer und verdienen eine ausführlichere Beschreibung.
Software-Qualität
Python verfügt über eine bewusst einfache und lesbare Syntax und ein sehr kohärentes Programmiermodell. Wie ein Slogan auf einer vergangenen Python-Konferenz besagt, ist das Ergebnis, dass Python "zu deinem Gehirn passt", d.h. die Funktionen der Sprache interagieren auf konsistente und begrenzte Weise und ergeben sich auf natürliche Weise aus einer kleinen Anzahl von Kernkonzepten. Das macht es einfacher, die Sprache zu lernen, zu verstehen und zu erinnern. In der Praxis müssen Python-Programmierer/innen nicht ständig in Handbüchern nachschlagen, wenn sie Code lesen oder schreiben; es ist ein einheitlich gestaltetes System, das für viele überraschend einheitlichen Code hervorbringt.
Von der Philosophie her verfolgt Python einen minimalistischen Ansatz. Das bedeutet, dass es zwar in der Regel mehrere Möglichkeiten gibt, eine Programmieraufgabe zu erledigen, aber in der Regel gibt es nur einen offensichtlichen Weg, ein paar weniger offensichtliche Alternativen und eine kleine Menge von kohärenten Interaktionen überall in der Sprache. Außerdem trifft Python keine willkürlichen Entscheidungen für dich; wenn Interaktionen mehrdeutig sind, wird ein expliziter Eingriff der "Magie" vorgezogen. In Python ist explizit besser als implizit, und einfach ist besser als komplex.1
Abgesehen von solchen Designthemen enthält Python Werkzeuge wie Module und OOP, die die Wiederverwendbarkeit von Code natürlich fördern. Und weil Python auf Qualität ausgerichtet ist, sind es natürlich auch die Python-Programmierer.
Produktivität der Entwickler
Während des großen Internet-Booms Mitte bis Ende der 1990er Jahre war es schwierig, genügend Programmierer/innen für die Umsetzung von Softwareprojekten zu finden; die Entwickler/innen mussten Systeme so schnell implementieren, wie sich das Internet entwickelte. Später, in Zeiten von Entlassungen und wirtschaftlicher Rezession, änderte sich das Bild. Von den Programmierern wurde oft verlangt, die gleichen Aufgaben mit noch weniger Leuten zu erledigen.
In beiden Fällen hat sich Python als ein Werkzeug erwiesen, mit dem Programmierer mit weniger Aufwand mehr erreichen können. Python ist bewusst auf eine schnelle Entwicklungoptimiert - seineeinfache Syntax, die dynamische Typisierung, das Fehlen von Kompilierschritten und die integrierten Werkzeuge ermöglichen es Programmierern, Programme in einem Bruchteil der Zeit zu entwickeln, die bei der Verwendung anderer Werkzeuge benötigt wird. Der Nettoeffekt ist, dass Python die Produktivität von Entwicklern um ein Vielfaches über das Niveau traditioneller Sprachen hinaus steigert. Das ist eine gute Nachricht in Zeiten des Booms und der Krise und überall dort, wo die Softwarebranche dazwischen liegt.
Ist Python eine "Skriptsprache"?
Python ist eine universelle Programmiersprache, die oft für Skripte eingesetzt wird. Sie wird gemeinhin als objektorientierte Skriptsprachedefiniert - eineDefinition, die die Unterstützung von OOP mit einer allgemeinen Ausrichtung auf Skripting-Rollen verbindet. Wenn man mich um einen Einzeiler bittet, würde ich sagen, dass Python wahrscheinlich besser als Allzweckprogrammiersprachebekannt ist , die prozedurale, funktionale und objektorientierte Paradigmen miteinander verbindet - eineAussage, die den Reichtum und die Bandbreite des heutigen Pythons erfasst.
Dennoch scheint der Begriff "Skripting" wie Klebstoff an Python zu kleben, vielleicht als Kontrast zu dem größeren Programmieraufwand, den einige andere Tools erfordern. So wird zum Beispiel oft das Wort "Skript" anstelle von "Programm" verwendet, um eine Python-Code-Datei zu beschreiben. Im Einklang mit dieser Tradition werden in diesem Buch die Begriffe "Skript" und "Programm" austauschbar verwendet, wobei "Skript" leicht bevorzugt wird, wenn es sich um eine einfachere Top-Level-Datei handelt, und "Programm", wenn es sich um eine komplexere Anwendung mit mehreren Dateien handelt.
Weil der Begriff "Skriptsprache" für verschiedene Beobachter so viele verschiedene Bedeutungen hat, würden es einige vorziehen, ihn überhaupt nicht auf Python anzuwenden. Tatsächlich neigen die Menschen dazu, drei sehr unterschiedliche Assoziationen zu wecken, von denen einige nützlicher sind als andere, wenn sie hören, dass Python als solche bezeichnet wird:
- Shell-Tools
Manchmal , wenn Menschen hören, dass Python als Skriptsprache bezeichnet wird, denken sie, dass damit gemeint ist, dass Python ein Werkzeug zum Programmieren von betriebssystemorientierten Skripten ist. Solche Programme werden oft von der Befehlszeile der Konsole aus gestartet und führen Aufgaben wie die Verarbeitung von Textdateien und den Start anderer Programme aus.
Python-Programme können solche Aufgaben erfüllen und tun dies auch, aber das ist nur einer von Dutzenden üblichen Anwendungsbereichen von Python. Es ist nicht nur eine bessere Shell-Skriptsprache.
- Sprache kontrollieren
Für andere ist Skripting eine "Glue"-Schicht, die dazu dient, andere Anwendungskomponenten zu kontrollieren und zu steuern (d.h. zu skripten). Python-Programme werden tatsächlich oft im Kontext größerer Anwendungen eingesetzt. Um z. B. Hardwaregeräte zu testen, können Python-Programme Komponenten aufrufen, die einen Low-Level-Zugriff auf ein Gerät ermöglichen. Ebenso können Programme an strategischen Punkten Teile von Python-Code ausführen, um die Anpassung von Produkten durch den Endnutzer zu unterstützen, ohne dass der gesamte Quellcode des Systems ausgeliefert und neu kompiliert werden muss.
Die Einfachheit von Python macht es zu einem natürlich flexiblen Steuerungswerkzeug. Technisch gesehen ist das aber auch nur eine gewöhnliche Python-Rolle; viele (vielleicht die meisten) Python-Programmierer programmieren eigenständige Skripte, ohne jemals integrierte Komponenten zu verwenden oder zu kennen. Python ist nicht nur eine Steuersprache.
- Einfachheit der Nutzung
Am besten lässt sich der Begriff "Skriptsprache" wohl so verstehen, dass er sich auf eine einfache Sprache bezieht, mit der sich Aufgaben schnell programmieren lassen. Das gilt besonders für Python, das eine viel schnellere Programmentwicklung ermöglicht als kompilierte Sprachen wie C++. Der schnelle Entwicklungszyklus von fördert eine explorative, inkrementelle Art der Programmierung, die man erlebt haben muss, um sie zu schätzen.
Aber lass dich nicht täuschen - Python ist nicht nur für einfache Aufgaben geeignet, sondern macht sie durch seine Benutzerfreundlichkeit und Flexibilität einfach. Python hat einen einfachen Funktionsumfang, ermöglicht es aber, die Programme je nach Bedarf zu verfeinern. Deshalb wird es häufig für schnelle taktische Aufgaben und längerfristige strategische Entwicklungen eingesetzt.
Ist Python nun eine Skriptsprache oder nicht? Das hängt davon ab, wen du fragst. Im Allgemeinen wird der Begriff "Skripting" wahrscheinlich am besten verwendet, um die schnelle und flexible Art der Entwicklung zu beschreiben, die Python unterstützt, und nicht einen bestimmten Anwendungsbereich.
Okay, aber was ist der Nachteil?
Nachdem ich Python seit 21 Jahren benutze, seit 18 Jahren darüber schreibe und seit 16 Jahren unterrichte, habe ich festgestellt, dass der einzige signifikante, universelle Nachteil von Python darin besteht, dass seine Ausführungsgeschwindigkeit, so wie sie derzeit implementiert ist, nicht immer so schnell ist wie die von vollständig kompilierten und niedrigeren Sprachen wie C und C++. Auch wenn das heute nur noch selten vorkommt, kann es sein, dass du für manche Aufgaben "näher am Eisen" sein musst, indem du eine Sprache auf niedrigerer Ebene verwendest, die direkter auf die zugrunde liegende Hardware-Architektur abgestimmt ist.
Wir werden die Implementierungskonzepte später in diesem Buch im Detail besprechen. Kurz gesagt, die heutigen Standardimplementierungen von Python kompilieren (d.h. übersetzen) die Quelltextanweisungen in ein Zwischenformat, das als Bytecode bekannt ist, und interpretieren den Bytecode dann. Der Bytecode bietet Portabilität, da er ein plattformunabhängiges Format ist. Da Python jedoch normalerweise nicht bis hinunter zu binärem Maschinencode (z. B. Anweisungen für einen Intel-Chip) kompiliert wird, laufen einige Programme in Python langsamer als in einer vollständig kompilierten Sprache wie C. Das PyPy-System, das im nächsten Kapitel besprochen wird, kann eine 10- bis 100-fache Beschleunigung von Code erreichen, indem es weiter kompiliert wird, während dein Programm läuft, aber es ist eine separate, alternative Implementierung.
Ob du dich jemals für den Unterschied in der Ausführungsgeschwindigkeit interessieren wirst, hängt davon ab, welche Art von Programmen du schreibst. Python wurde bereits mehrfach optimiert, und in den meisten Anwendungsbereichen läuft Python-Code von selbst schnell genug. Außerdem läuft dein Programm immer dann, wenn du in einem Python-Skript etwas "Richtiges" tust, wie die Verarbeitung einer Datei oder die Erstellung einer grafischen Benutzeroberfläche (GUI), mit C-Geschwindigkeit, da solche Aufgaben sofort an den kompilierten C-Code im Python-Interpreter weitergeleitet werden. Grundsätzlich ist der Gewinn an Entwicklungsgeschwindigkeit in Python oft viel wichtiger als der Verlust an Ausführungsgeschwindigkeit, vor allem angesichts der Geschwindigkeit moderner Computer.
Aber selbst bei den heutigen CPU-Geschwindigkeiten gibt es immer noch einige Bereiche, die optimale Ausführungsgeschwindigkeiten erfordern. Bei der numerischen Programmierung und der Animation zum Beispiel müssen zumindest die Kernkomponenten, die Zahlen verarbeiten, oft mit C-Geschwindigkeit (oder besser) laufen. Wenn du in einem solchen Bereich arbeitest, kannst du immer noch Python verwenden. Teile einfach die Teile der Anwendung, die eine optimale Geschwindigkeit erfordern, in kompilierte Erweiterungen ab und binde diese in dein System ein, um sie in Python-Skripten zu verwenden.
Wir werden in diesem Text nicht viel über Erweiterungen sprechen, aber das ist eigentlich nur ein Beispiel für die Rolle von Python als Steuersprache, die wir bereits besprochen haben. Ein Paradebeispiel für diese Doppelsprachenstrategie ist die numerische Programmerweiterung NumPy für Python. Durch die Kombination von kompilierten und optimierten numerischen Erweiterungsbibliotheken mit der Sprache Python macht NumPy Python zu einem numerischen Programmierwerkzeug, das gleichzeitig effizient und einfach zu bedienen ist. Bei Bedarf bieten solche Erweiterungen ein leistungsstarkes Optimierungswerkzeug.
Wer benutzt Python heute?
Die beste Schätzung, die man derzeit über die Größe der Python-Benutzerbasis machen kann, ist, dass es heute weltweit etwa 1 Million Python-Benutzer gibt (plus/minus ein paar). Diese Schätzung basiert auf verschiedenen Statistiken wie Download-Raten, Webstatistiken und Umfragen unter Entwicklern. Da Python Open Source ist, ist eine genauere Zählung schwierig - es gibt keine Lizenzregistrierungen, die gezählt werden müssen. Außerdem ist Python automatisch in Linux-Distributionen, Macintosh-Computern und einer breiten Palette von Produkten und Hardware enthalten, was das Bild der Nutzerbasis weiter trübt.
Im Allgemeinen erfreut sich Python jedoch einer großen Nutzerbasis und einer sehr aktiven Entwicklergemeinschaft. Es wird allgemein als eine der 5 oder 10 meistgenutzten Programmiersprachen der Welt angesehen (die genaue Platzierung variiert je nach Quelle und Datum). Da Python schon seit über zwei Jahrzehnten existiert und weit verbreitet ist, ist sie auch sehr stabil und robust.
Python wird nicht nur von Einzelanwendern genutzt, sondern auch von echten Unternehmen, die mit ihren Produkten Umsatz machen. Zum Beispiel in der allgemein bekannten Python-Nutzerbasis:
Google nutzt Python ausgiebig für seine Websuchsysteme.
Der beliebte Video-Sharing-Dienst YouTube ist größtenteils in Python geschrieben.
Der Dropbox-Speicherdienst programmiert sowohl seine Server- als auch seine Desktop-Client-Software hauptsächlich in Python.
Der Einplatinencomputer Raspberry Pi wirbt mit Python als Unterrichtssprache.
EVE Online, ein Massively Multiplayer Online Game (MMOG) von CCP Games, nutzt Python in großem Umfang.
Das weit verbreitete Peer-to-Peer-Tauschbörsensystem BitTorrent begann sein Leben als Python-Programm.
Industrial Light & Magic, Pixar und andere verwenden Python bei der Produktion von Animationsfilmen.
ESRI verwendet Python als Anpassungswerkzeug für seine beliebten GIS-Kartenprodukte.
Googles Webentwicklungsframework App Engine verwendet Python als Anwendungssprache.
Das IronPort E-Mail-Server-Produkt verwendet mehr als 1 Million Zeilen Python-Code, um seine Arbeit zu erledigen.
Maya, ein leistungsstarkes integriertes 3D-Modellierungs- und Animationssystem, bietet eine Python-Skript-API.
Die NSA verwendet Python für Kryptografie und Geheimdienstanalysen.
iRobot verwendet Python, um kommerzielle und militärische Robotergeräte zu entwickeln.
Die anpassbaren Skriptereignisse des Spiels Civilization IV sind komplett in Python geschrieben.
Das One Laptop Per Child(OLPC)-Projekt hat seine Benutzeroberfläche und sein Aktivitätsmodell in Python entwickelt.
Netflix und Yelp haben beide die Rolle von Python in ihren Software-Infrastrukturen dokumentiert.
Intel, Cisco, Hewlett-Packard, Seagate, Qualcomm und IBM nutzen Python für Hardwaretests.
JPMorgan Chase, UBS, Getco und Citadel wenden Python für Finanzmarktprognosen an.
DieNASA, Los Alamos, Fermilab, JPL und andere nutzen Python für wissenschaftliche Programmieraufgaben.
Und so weiter - obwohl diese Liste repräsentativ ist, würde eine vollständige Auflistung den Rahmen dieses Buches sprengen und sich im Laufe der Zeit garantiert ändern. Eine aktuelle Auswahl weiterer Python-Benutzer, -Anwendungen und -Software findest du auf den folgenden Seiten auf der Python-Website und bei Wikipedia sowie über eine Suche in deinem Lieblings-Webbrowser:
Erfolgsgeschichten: http://www.python.org/about/success
Anwendungsbereiche: http://www.python.org/about/apps
Benutzerzitate: http://www.python.org/about/quotes
Wikipedia-Seite: http://en.wikipedia.org/wiki/List_of_Python_software
Die wahrscheinlich einzige Gemeinsamkeit zwischen den Unternehmen, die Python heute einsetzen, ist, dass Python in den verschiedensten Anwendungsbereichen eingesetzt wird. Durch seine Allgemeingültigkeit ist es in fast allen Bereichen einsetzbar, nicht nur in einem. Man kann sogar sagen, dass praktisch jedes größere Unternehmen, das Software entwickelt, Python einsetzt, sei es für kurzfristige taktische Aufgaben wie Tests und Verwaltung oder für die langfristige strategische Produktentwicklung. Python hat bewiesen, dass es in beiden Modi gut funktioniert.
Was kann ich mit Python machen?
Abgesehen davon, dass eine gut durchdachte Programmiersprache ist, ist Python auch nützlich, um reale Aufgaben zu erledigen - die Art von Dingen, die Entwickler jeden Tag tun. Es wird in vielen Bereichen eingesetzt, um Skripte für andere Komponenten zu erstellen und eigenständige Programme zu implementieren. Als Allzwecksprache sind die Einsatzmöglichkeiten von Python praktisch unbegrenzt: Du kannst es für alles verwenden, von der Website-Entwicklung über Spiele bis hin zu Robotik und Raumschiffsteuerung.
Die häufigsten Aufgaben von Python lassen sich jedoch in ein paar grobe Kategorien einteilen. In den folgenden Abschnitten werden einige der häufigsten Anwendungen von Python sowie die Tools beschrieben, die in jedem Bereich verwendet werden. Wir können die hier erwähnten Werkzeuge nicht in die Tiefe gehen - wenn du dich für eines dieser Themen interessierst, findest du auf der Python-Website oder in anderen Quellen weitere Informationen.
Systemprogrammierung
Die in Python eingebauten Schnittstellen zu Betriebssystemdiensten machen es ideal für das Schreiben von portablen, wartbaren Systemverwaltungswerkzeugen und Dienstprogrammen (manchmal auch Shell-Tools genannt). Python-Programme können Dateien und Verzeichnisbäume durchsuchen, andere Programme starten, mit Prozessen und Threads parallel arbeiten und so weiter.
Die Standardbibliothek von Python bietet POSIX-Bindungen und Unterstützung für alle üblichen Betriebssystem-Tools: Umgebungsvariablen, Dateien, Sockets, Pipes, Prozesse, mehrere Threads, Mustervergleiche mit regulären Ausdrücken, Befehlszeilenargumente, Standard-Stream-Schnittstellen, Shell-Befehlsstarter, Dateinamenexpansion, Hilfsprogramme für Zip-Dateien, XML- und JSON-Parser, CSV-Datei-Handler und vieles mehr. Außerdem sind die meisten Systemschnittstellen von Python so konzipiert, dass sie portabel sind; ein Skript, das Verzeichnisbäume kopiert, läuft zum Beispiel in der Regel unverändert auf allen wichtigen Python-Plattformen. Die Stackless Python-Implementierung, die in Kapitel 2 beschrieben und von EVE Online verwendet wird, bietet auch fortschrittliche Lösungen für Multiprozessing-Anforderungen.
GUIs
Die Einfachheit von Python und die schnelle Umsetzung machen es auch zu einer guten Wahl für die Programmierung grafischer Benutzeroberflächen auf dem Desktop. Python wird mit einer objektorientierten Standardschnittstelle zur Tk-GUI-API namens tkinter(Tkinter in 2.X) ausgeliefert, die es Python-Programmen ermöglicht, portable GUIs mit einem nativen Look and Feel zu implementieren. Python/tkinter-GUIs laufen unverändert auf Microsoft Windows, X Windows (auf Unix und Linux) und dem Mac OS (sowohl Classic als auch OS X). Ein kostenloses Erweiterungspaket, PMW, fügt dem tkinter-Toolkit erweiterte Widgets hinzu. Darüber hinaus bietet die wxPython GUI API, die auf einer C++-Bibliothek basiert, ein alternatives Toolkit für die Erstellung portabler GUIs in Python.
Übergeordnete Toolkits wie Dabo bauen auf Basis-APIs wie wxPython und tkinter auf. Mit der richtigen Bibliothek kannst du auch die GUI-Unterstützung in anderen Toolkits in Python nutzen, z. B. Qt mit PyQt, GTK mit PyGTK, MFC mit PyWin32, .NETmit IronPython und Swing mit Jython (der Java-Version von Python, beschrieben in Kapitel 2) oder JPype. Für Anwendungen, die in Webbrowsern laufen oder einfache Anforderungen an die Benutzeroberfläche haben, bieten sowohl Jython als auch Python-Webframeworks und serverseitige CGI-Skripte, die im nächsten Abschnitt beschrieben werden, zusätzliche Optionen für die Benutzeroberfläche.
Internet Scripting
Python wird mit Standard-Internetmodulen geliefert, die es Python-Programmen ermöglichen, eine Vielzahl von Netzwerkaufgaben im Client- und Servermodus auszuführen. Skripte können über Sockets kommunizieren, Formularinformationen extrahieren, die an serverseitige CGI-Skripte gesendet werden, Dateien per FTP übertragen, XML- und JSON-Dokumente parsen und generieren, E-Mails senden, empfangen, verfassen und parsen, Webseiten über URLs abrufen, das HTML der abgerufenen Webseiten parsen, über XML-RPC, SOAP und Telnet kommunizieren und vieles mehr. Die Python-Bibliotheken machen diese Aufgaben bemerkenswert einfach.
Darüber hinaus gibt es im Web eine große Sammlung von Drittanbieter-Tools für die Internetprogrammierung in Python. Das HTMLGen-System beispielsweise generiert HTML-Dateien aus klassenbasierten Python-Beschreibungen, das mod_python-Paket führt Python effizient innerhalb des Apache-Webservers aus und unterstützt serverseitiges Templating mit seinen Python Server Pages, und das Jython-System sorgt für eine nahtlose Python-/Java-Integration und unterstützt die Programmierung von serverseitigen Applets, die auf Clients laufen.
Darüber hinaus unterstützen vollwertige Webentwicklungs-Frameworks für Python wie Django, TurboGears, web2py, Pylons, Zope und WebWare die schnelle Erstellung von vollwertigen und produktionsfähigen Websites mit Python. Viele dieser Pakete enthalten Funktionen wie objektrelationale Mapper, eine Model/View/Controller-Architektur, serverseitiges Skripting und Templating sowie AJAX-Unterstützung, um vollständige Webentwicklungslösungen auf Unternehmensebene zu bieten.
In jüngerer Zeit hat sich Python mit Tools wie Silverlight in IronPython und pyjs (auch bekannt als pyjamas) und seinem Python-zu-JavaScript-Compiler, AJAX-Framework und Widget-Set auf Rich Internet Applications (RIAs) ausgeweitet. Mit der App Engine und anderen Tools, die im Abschnitt über Datenbanken beschrieben werden, ist Python auch im Cloud Computing angekommen. Wo das Web hinführt, folgt Python schnell.
Integration von Komponenten
Wir haben die Rolle von bei der Integration von Komponenten bereits bei der Beschreibung von Python als Steuersprache besprochen. Die Fähigkeit von Python, durch C- und C++-Systeme erweitert und in diese eingebettet zu werden, macht es zu einer flexiblen Sprache, mit der das Verhalten anderer Systeme und Komponenten gesteuert werden kann. Wenn du zum Beispiel eine C-Bibliothek in Python integrierst, kann Python die Komponenten der Bibliothek testen und starten, und wenn du Python in ein Produkt einbettest, kannst du Anpassungen vor Ort programmieren, ohne das gesamte Produkt neu kompilieren zu müssen (oder den Quellcode überhaupt zu liefern).
Werkzeuge wie die Codegeneratoren SWIG und SIP können einen Großteil der Arbeit automatisieren, die nötig ist, um kompilierte Komponenten für die Verwendung in Skripten in Python einzubinden, und das Cython-System ermöglicht es Programmierern, Python und C-ähnlichen Code zu mischen. Größere Frameworks wie die COM-Unterstützung von Python unter Windows, die Jython-Implementierung auf Java-Basis und die IronPython-Implementierung auf .NET-Basis bieten alternative Möglichkeiten, Komponenten zu skripten. Unter Windows können Python-Skripte zum Beispiel Frameworks nutzen, um Word und Excel zu skripten, auf Silverlight zuzugreifen und vieles mehr.
Datenbank Programmierung
Für traditionelle Datenbankanforderungen gibt es Python-Schnittstellen zu allen gängigen relationalen Datenbanksystemen - Sybase, Oracle, Informix, ODBC, MySQL, PostgreSQL, SQLite und mehr. Die Python-Welt hat außerdem eine portable Datenbank-API für den Zugriff auf SQL-Datenbanksysteme von Python-Skripten aus definiert, die auf einer Vielzahl von zugrunde liegenden Datenbanksystemen gleich aussieht. Da die Herstellerschnittstellen die portable API implementieren, funktioniert ein Skript, das für das freie MySQL-System geschrieben wurde, weitgehend unverändert auch auf anderen Systemen (z. B. Oracle); in der Regel musst du nur die zugrunde liegende Herstellerschnittstelle ersetzen. Die eingebettete SQLite-Datenbank-Engine ist seit Version 2.5 ein Standardbestandteil von Python und unterstützt sowohl das Prototyping als auch grundlegende Anforderungen an die Speicherung von Programmen.
Was die Nicht-SQL-Abteilung angeht, bietet Pythons Standardmodul pickle
ein einfaches Objektpersistenzsystem, mit dem Programme ganze Python-Objekte in Dateien und dateiähnlichen Objekten speichern und wiederherstellen können.
Im Internet findest du außerdem Open-Source-Systeme von Drittanbietern wie ZODB und Durus, die komplette objektorientierte Datenbanksysteme für Python-Skripte bereitstellen; andere, wie SQLObject und SQLAlchemy, implementieren objektrelationale Mapper (ORMs), die das Klassenmodell von Python auf relationale Tabellen übertragen; und PyMongo, eine Schnittstelle zu MongoDB, einer leistungsstarken Open-Source-Dokumentendatenbank im JSON-Stil, die Daten in Strukturen speichert, die Pythons Listen und Wörterbüchern sehr ähnlich sind, und deren Text mit Pythons Standardbibliothek json
geparst und erstellt werden kann.
Andere Systeme bieten spezialisiertere Möglichkeiten zur Speicherung von Daten, z. B. der Datenspeicher in Googles App Engine, der Daten mit Python-Klassen modelliert und umfangreiche Skalierbarkeit bietet, sowie weitere aufkommende Cloud-Speicheroptionen wie Azure, PiCloud, OpenStack und Stackato.
Rapid Prototyping
Für Python-Programme sehen die in Python und C geschriebenen Komponenten von gleich aus. Aus diesem Grund ist es möglich, Systeme zunächst in Python zu prototypisieren und dann ausgewählte Komponenten in eine kompilierte Sprache wie C oder C++ zu übertragen. Im Gegensatz zu anderen Prototyping-Tools muss Python nicht komplett umgeschrieben werden, wenn der Prototyp gefestigt ist. Teile des Systems, die nicht die Effizienz einer Sprache wie C++ erfordern, können in Python programmiert bleiben, um die Wartung und Nutzung zu erleichtern.
Numerische und wissenschaftliche Programmierung
Python wird auch häufig für numerische Programmierung verwendet - ein Bereich, der traditionell nicht zu den Skriptsprachen gezählt wurde, sich aber zu einem der überzeugendsten Anwendungsfälle von Python entwickelt hat. Die bereits erwähnte leistungsstarke numerische Programmerweiterung NumPy für Python ( ) enthält fortschrittliche Werkzeuge wie ein Array-Objekt, Schnittstellen zu mathematischen Standardbibliotheken und vieles mehr. Durch die Integration von Python mit numerischen Routinen, die aus Geschwindigkeitsgründen in einer kompilierten Sprache kodiert sind, macht NumPy Python zu einem hochentwickelten und dennoch benutzerfreundlichen Werkzeug für die numerische Programmierung, das oft bestehenden Code in traditionellen kompilierten Sprachen wie FORTRAN oder C++ ersetzen kann.
Zusätzliche numerische Werkzeuge für Python unterstützen Animation, 3D-Visualisierung, Parallelverarbeitung und so weiter. Die beliebten Erweiterungen SciPy und ScientificPython bieten zum Beispiel zusätzliche Bibliotheken mit wissenschaftlichen Programmierwerkzeugen und nutzen NumPy als Kernkomponente. Die PyPy-Implementierung von Python (siehe Kapitel 2) hat auch im numerischen Bereich an Zugkraft gewonnen, unter anderem weil stark algorithmischer Code, wie er in diesem Bereich häufig vorkommt, in PyPy deutlich schneller ausgeführt werden kann - oft 10- bis 100-mal schneller.
Und mehr: Spiele, Bilder, Data Mining, Roboter, Excel...
Python wird häufig in mehr Bereichen eingesetzt, als hier behandelt werden können. Du wirst zum Beispiel Tools finden, mit denen du Python verwenden kannst:
Spieleprogrammierung und Multimedia mit pygame, cgkit, pyglet, PySoy, Panda3D, und anderen
Kommunikation über die serielle Schnittstelle unter Windows, Linux und mehr mit der PySerial-Erweiterung
Bildbearbeitung mit PIL und seinem neueren Pillow Fork, PyOpenGL, Blender, Maya und mehr
Programmierung der Robotersteuerung mit dem PyRoToolkit
Analyse natürlicher Sprache mit dem NLTK-Paket
Instrumentierung auf dem Raspberry Pi und Arduino Board
Mobile Computing mit Portierungen von Python auf die Plattformen Google Android und Apple iOS
Programmierung von Excel-Tabellenfunktionen und Makros mit den Add-Ins PyXLL oder DataNitro
Verarbeitung von Mediendateiinhalten und Metadaten-Tags mit PyMedia, ID3, PIL/Pillow und mehr
Künstliche Intelligenz mit der PyBrain-Bibliothekfür neuronale Netze und dem Milk-Toolkit für maschinelles Lernen
Expertensystemprogrammierung mit PyCLIPS, Pyke, Pyrolog und pyDatalog
Netzwerküberwachung mit zenoss, geschrieben in und angepasst mit Python
Entwurf und Modellierung in Python mit PythonCAD, PythonOCC, FreeCAD und anderen
Dokumentenverarbeitung und -erstellung mit ReportLab, Sphinx, Cheetah, PyPDF und so weiter
Datenvisualisierung mit Mayavi, matplotlib, VTK, VPython und mehr
XML-Parsing mit dem
xml
Bibliothekspaket, demxmlrpclib
Modul und Erweiterungen von DrittanbieternJSON- und CSV-Dateiverarbeitung mit den Modulen
json
undcsv
Data Mining mit dem Orange Framework, dem Pattern Bundle, Scrapy und eigenem Code
Mit dem Programm PySolFC kannst du sogar Solitaire spielen . Und natürlich kannst du jederzeit eigene Python-Skripte in weniger wortreichen Bereichen programmieren, um die tägliche Systemadministration durchzuführen, deine E-Mails zu bearbeiten, deine Dokumenten- und Medienbibliotheken zu verwalten und so weiter. Links zur Unterstützung in vielen Bereichen findest du auf der PyPI-Website und über die Websuche (suche bei Google oder http://www.python.org nach Links).
Obwohl sie von großem praktischen Nutzen sind, sind viele dieser spezifischen Bereiche größtenteils nur Beispiele dafür, wie Python zur Integration von Komponenten eingesetzt wird. Wenn man Python als Frontend zu Bibliotheken von Komponenten hinzufügt, die in einer kompilierten Sprache wie C geschrieben wurden, ist Python für die Skripterstellung in einer Vielzahl von Bereichen nützlich. Als Allzwecksprache, die Integration unterstützt, ist Python weithin anwendbar.
Wie wird Python entwickelt und unterstützt?
Als beliebtes Open-Source-System erfreut sich Python einer großen und aktiven Entwicklergemeinschaft, die auf Probleme reagiert und Verbesserungen mit einer Geschwindigkeit entwickelt, die viele kommerzielle Softwareentwickler bemerkenswert finden würden. Python-Entwickler koordinieren ihre Arbeit online mit einem Source-Control-System. Änderungen werden nach einem formalen Protokoll entwickelt, zu dem auch das Schreiben eines PEP (Python Enhancement Proposal) oder eines anderen Dokuments sowie Erweiterungen des Regressionstestsystems von Python gehören. Tatsächlich ist die Änderung von Python heute ungefähr so aufwändig wie die Änderung kommerzieller Software - weit entfernt von den Anfängen von Python, als eine E-Mail an den Erfinder genügte, aber angesichts der großen Nutzerbasis heute eine gute Sache.
Die PSF (Python Software Foundation), eine offizielle gemeinnützige Gruppe, organisiert Konferenzen und befasst sich mit Fragen des geistigen Eigentums. Auf der ganzen Welt finden zahlreiche Python-Konferenzen statt; die OSCON von O'Reilly und die PyCon der PSF sind die größten. Die OSCON von O'Reilly und die PyCon der PSF sind die größten Konferenzen. Die OSCON befasst sich mit mehreren Open-Source-Projekten, während die PyCon eine reine Python-Veranstaltung ist, die in den letzten Jahren stark gewachsen ist. Die PyCon 2012 und 2013 erreichten jeweils 2. 500 Teilnehmer/innen; die PyCon 2013 musste ihre Teilnehmerzahl sogar auf diesen Wert begrenzen, nachdem sie 2012 überraschend ausverkauft war (und sowohl aus technischen als auch aus nichttechnischen Gründen große Aufmerksamkeit erregte, die ich hier nicht aufzählen werde). In früheren Jahren hat sich die Teilnehmerzahl oft verdoppelt - von 586 Teilnehmern im Jahr 2007 auf über 1.000 im Jahr 2008 - ein Zeichen für das Wachstum von Python im Allgemeinen und beeindruckend für diejenigen, die sich an frühere Konferenzen erinnern, bei denen die Teilnehmer größtenteils an einem einzigen Tisch im Restaurant bedient werden konnten.
Kompromisse bei Open Source
Dennoch ist es wichtig, , darauf hinzuweisen, dass Python zwar eine starke Entwicklungsgemeinschaft hat, diese aber auch Nachteile mit sich bringt. Open-Source-Software kann auch chaotisch wirken und manchmal sogar der Anarchie ähneln und wird nicht immer so reibungslos umgesetzt, wie die vorherigen Absätze vermuten lassen. Manche Änderungen entziehen sich den offiziellen Protokollen, und wie bei allen menschlichen Unternehmungen passieren trotz der Prozesskontrollen immer wieder Fehler (Python 3.2.0 hatte zum Beispiel eine fehlerhafte Konsolenfunktion input
unter Windows).
Darüber hinaus tauschen Open-Source-Projekte kommerzielle Interessen gegen die persönlichen Vorlieben einer Gruppe von Entwicklern ein, die mit den deinen übereinstimmen können oder auch nicht - du wirst nicht von einem Unternehmen als Geisel gehalten, sondern bist denjenigen ausgeliefert, die Zeit haben, das System zu verändern. Der Nettoeffekt ist, dass die Entwicklung von Open-Source-Software oft von einigen wenigen vorangetrieben, aber den vielen aufgezwungen wird.
In der Praxis wirken sich diese Kompromisse jedoch viel stärker auf diejenigen aus, die sich an der "blutigen" Kante neuer Versionen befinden, als auf diejenigen, die etablierte Versionen des Systems verwenden, einschließlich früherer Versionen von Python 3.X und 2.X. Wenn du zum Beispiel weiterhin klassische Klassen in Python 2.X verwendest, bist du weitgehend immun gegen die explosionsartige Zunahme der Klassenfunktionalität und die Veränderungen bei den Klassen im neuen Stil, die Anfang bis Mitte der 2000er Jahre stattfanden. Obwohl diese in 3.X obligatorisch geworden sind (und noch viel mehr), umgehen viele 2.X-Benutzer das Thema immer noch gerne.
Was sind die technischen Stärken von Python?
Natürlich ist dies die Frage eines Entwicklers. Wenn du noch keine Programmierkenntnisse hast, könnte die Sprache in den nächsten Abschnitten etwas verwirrend sein - keine Sorge, wir werden all diese Begriffe im Laufe des Buches noch genauer erklären. Für Entwickler/innen gibt es jedoch eine kurze Einführung in einige der wichtigsten technischen Funktionen von Python.
Es ist objektorientiert und funktional
Python ist von Grund auf eine objektorientierte Sprache. Sein Klassenmodell unterstützt fortschrittliche Konzepte wie Polymorphismus, Operatorüberladung und Mehrfachvererbung. Dennoch ist OOP im Kontext der einfachen Syntax und Typisierung von Python bemerkenswert einfach anzuwenden. Auch wenn du diese Begriffe nicht verstehst, wirst du feststellen, dass sie mit Python viel leichter zu erlernen sind als mit jeder anderen OOP-Sprache.
Python ist nicht nur ein leistungsfähiges Mittel zur Strukturierung und Wiederverwendung von Code, sondern eignet sich aufgrund seiner OOP-Natur auch ideal als Skripting-Tool für andere objektorientierte Systemsprachen. Mit dem entsprechenden Glue-Code können Python-Programme zum Beispiel Klassen, die in C++, Java und C# implementiert sind, unterklassifizieren (spezialisieren).
Ebenso wichtig ist, dass OOP in Python eine Option ist; du kannst es weit bringen, ohne gleich ein Objekt-Guru zu werden. Ähnlich wie C++ unterstützt Python sowohl prozedurale als auch objektorientierte Programmierweisen. Die objektorientierten Werkzeuge können eingesetzt werden, wenn es die Umstände erlauben. Das ist vor allem in taktischen Entwicklungsmodi nützlich, die Entwurfsphasen ausschließen.
Zusätzlich zu den ursprünglichen prozeduralen(anweisungsbasierten) und objektorientierten (klassenbasierten) Paradigmen hat Python in den letzten Jahren eine eingebaute Unterstützung für die funktionale Programmierungerhalten , dienach den meisten Maßstäben Generatoren, Comprehensions, Closures, Maps, Dekoratoren, anonyme Funktions-Lambdas und Funktionsobjekte erster Klasse umfasst. Diese können sowohl als Ergänzung als auch als Alternative zu den OOP-Tools dienen.
Es ist kostenlos
Python kann völlig frei verwendet und weitergegeben werden. Wie bei anderer Open-Source-Software, z. B. Tcl, Perl, Linux und Apache, kannst du den gesamten Quellcode des Python-Systems kostenlos im Internet herunterladen. Es gibt keine Einschränkungen, wenn du ihn kopierst, in deine Systeme einbettest oder mit deinen Produkten auslieferst. Du kannst den Quellcode von Python sogar verkaufen, wenn du möchtest.
Im Gegenteil: Die Python-Online-Community antwortet auf Benutzeranfragen so schnell, dass die meisten kommerziellen Software-Helpdesks gut daran täten, sich daran ein Beispiel zu nehmen. Da Python mit vollständigem Quellcode ausgeliefert wird, haben die Entwickler/innen die Möglichkeit, ein großes Team von Implementierungsexperten zu bilden. Auch wenn es nicht jedem Spaß macht, die Implementierung einer Programmiersprache zu studieren oder zu ändern, ist es beruhigend zu wissen, dass du das tun kannst, wenn du es brauchst. Du bist nicht von den Launen eines kommerziellen Anbieters abhängig, denn die ultimative Dokumentation - derQuellcode -steht dir als letztes Mittel zur Verfügung.
Wie bereits erwähnt, wird die Entwicklung von Python von einer Gemeinschaft betrieben, die ihre Bemühungen größtenteils über das Internet koordiniert. Sie besteht aus dem ursprünglichen Schöpfer von Python, Guidovan Rossum( ), der offiziell zum Benevolent Dictator for Life(BDFL) von Python ernannt wurde, sowie aus Tausenden von Unterstützern. Änderungen an der Sprache müssen ein formales Verbesserungsverfahren durchlaufen und sowohl von anderen Entwicklern als auch von der BDFL geprüft werden. Dadurch ist Python bei Änderungen konservativer als andere Sprachen und Systeme. Die Trennung von Python 3.X und 2.X brach zwar bewusst mit dieser Tradition, aber sie gilt im Allgemeinen immer noch für jede Python-Linie.
Es ist tragbar
Die Standardimplementierung von Python ( ) ist in der portablen Programmiersprache ANSI C geschrieben und lässt sich auf praktisch jeder gängigen Plattform kompilieren und ausführen. So laufen Python-Programme heute auf allen Plattformen, von PDAs bis hin zu Supercomputern. Eine unvollständige Liste: Python ist verfügbar auf:
Linux und Unix Systeme
Microsoft Windows (alle modernen Varianten)
Mac OS (sowohl OS X als auch Classic)
BeOS, OS/2, VMS und QNX
Echtzeitsysteme wie VxWorks
Cray-Supercomputer und IBM-Mainframes
PDAs mit Palm OS, PocketPC und Linux
Handys mit Symbian OS und Windows Mobile
Spielkonsolen und iPods
Tablets und Smartphones mit Android von Google und iOS von Apple
Und mehr
Wie der Sprachinterpreter selbst sind auch die Standardbibliotheksmodule, die mit Python ausgeliefert werden, so implementiert, dass sie über Plattformgrenzen hinweg möglichst portabel sind. Außerdem werden Python-Programme automatisch in portablen Bytecode kompiliert, der auf allen Plattformen mit einer kompatiblen Python-Version gleich läuft (mehr dazu im nächsten Kapitel).
Das bedeutet, dass Python-Programme, die die Kernsprache und die Standardbibliotheken verwenden, auf Linux, Windows und den meisten anderen Systemen mit einem Python-Interpreter gleich laufen. Die meisten Python-Portierungen enthalten auch plattformspezifische Erweiterungen (z. B. COM-Unterstützung unter Windows), aber die Kernsprache Python und die Bibliotheken funktionieren überall gleich. Wie bereits erwähnt, enthält Python auch eine Schnittstelle zum Tk-GUI-Toolkit namens tkinter (Tkinter in 2.X), mit der Python-Programme voll funktionsfähige grafische Benutzeroberflächen implementieren können, die auf allen wichtigen GUI-Desktop-Plattformen ohne Programmänderungen laufen.
Es ist mächtig
Von den Funktionen her gesehen ist Python eine Art Hybrid. Mit seinen Werkzeugen liegt es zwischen traditionellen Skriptsprachen (wie Tcl, Scheme und Perl) und Systementwicklungssprachen (wie C, C++ und Java). Python bietet die Einfachheit und Benutzerfreundlichkeit einer Skriptsprache und gleichzeitig fortschrittlichere Werkzeuge für die Softwareentwicklung, die man normalerweise in kompilierten Sprachen findet. Im Gegensatz zu anderen Skriptsprachen macht diese Kombination Python für umfangreiche Entwicklungsprojekte nützlich. Hier sind einige der wichtigsten Dinge, die du im Werkzeugkasten von Python finden kannst:
- Dynamisches Tippen
Python behält den Überblick über die Arten von Objekten, die dein Programm verwendet, wenn es läuft; es erfordert keine komplizierten Typ- und Größendeklarationen in deinem Code. Wie du in Kapitel 6 sehen wirst, gibt es in Python überhaupt keine Typ- oder Variablendeklaration. Da Python-Code keine Datentypen vorschreibt, ist er in der Regel auch automatisch auf eine ganze Reihe von Objekten anwendbar.
- Automatische Speicherverwaltung
Python weist automatisch Objekte zu und holt sie zurück ("Garbage Collects"), wenn sie nicht mehr gebraucht werden. Wie du noch lernen wirst, behält Python den Überblick über die Details des Speichers, damit du das nicht tun musst.
- Unterstützung bei der Programmierung im großen Stil
Um größere Systeme zu erstellen, enthält Python Werkzeuge wie Module, Klassen und Ausnahmen. Diese Werkzeuge ermöglichen es dir, Systeme in Komponenten zu organisieren, OOP zur Wiederverwendung und Anpassung von Code zu nutzen und Ereignisse und Fehler elegant zu behandeln. Die funktionalen Programmierwerkzeuge von Python, die bereits beschrieben wurden, bieten zusätzliche Möglichkeiten, um viele der gleichen Ziele zu erreichen.
- Eingebaute Objekttypen
Python bietet häufig verwendete Datenstrukturen wie Listen, Wörterbücher und Zeichenketten als feste Bestandteile der Sprache an; wie du sehen wirst, sind sie sowohl flexibel als auch einfach zu verwenden. Wie du sehen wirst, sind sie sowohl flexibel als auch einfach zu benutzen. Eingebaute Objekte können zum Beispiel bei Bedarf wachsen und schrumpfen, sie können beliebig verschachtelt werden, um komplexe Informationen darzustellen, und vieles mehr.
- Eingebaute Werkzeuge
Um all diese Objekttypen zu verarbeiten, verfügt Python über leistungsstarke Standardoperationen wie Verkettung (Zusammenfügen von Sammlungen), Slicing (Extrahieren von Abschnitten), Sortieren, Mapping und mehr.
- Bibliotheksdienstprogramme
Für spezifischere Aufgaben bietet Python außerdem eine große Sammlung von vorprogrammierten Bibliothekswerkzeugen, die alles von der Suche nach regulären Ausdrücken bis hin zur Vernetzung unterstützen. Sobald du die Sprache selbst gelernt hast, sind die Python-Bibliotheken der Ort, an dem die meisten Aktionen auf Anwendungsebene stattfinden.
- Dienstprogramme von Drittanbietern
Da Python quelloffen ist, werden Entwickler ermutigt, vorcodierte Tools beizusteuern, die Aufgaben unterstützen, die über die eingebauten Funktionen hinausgehen. Im Internet findest du kostenlose Unterstützung für COM, Imaging, numerische Programmierung, XML, Datenbankzugriff und vieles mehr.
Trotz der vielen Werkzeuge, die Python bietet, ist die Syntax und das Design bemerkenswert einfach. Das Ergebnis ist ein leistungsstarkes Programmierwerkzeug mit der Benutzerfreundlichkeit einer Skriptsprache.
Es ist mischbar
Python-Programme können auf vielfältige Weise mit Komponenten anderer Sprachen verbunden werden. Die C-API von Python ermöglicht es zum Beispiel, dass C-Programme flexibel Python-Programme aufrufen und von diesen aufgerufen werden können. Das bedeutet, dass du das Python-System bei Bedarf um weitere Funktionen erweitern und Python-Programme in anderen Umgebungen oder Systemen verwenden kannst.
Die Kombination von Python mit Bibliotheken, die in Sprachen wie C oder C++ kodiert sind, macht Python zu einer einfach zu verwendenden Frontend-Sprache und einem Anpassungswerkzeug. Wie bereits erwähnt, eignet sich Python dadurch auch gut für Rapid Prototyping: Systeme können zunächst in Python implementiert werden, um die Entwicklungsgeschwindigkeit zu nutzen, und später, je nach Leistungsanforderungen, Stück für Stück in C übertragen werden.
Es ist relativ einfach zu bedienen
Im Vergleich zu Alternativen wie C++, Java und C# erscheint die Programmierung in Python den meisten Beobachtern erstaunlich einfach. Um ein Python-Programm auszuführen, gibst du es einfach ein und führst es aus. Es gibt keine Zwischenschritte beim Kompilieren und Verknüpfen wie bei Sprachen wie C oder C++. Python führt Programme sofort aus, was ein interaktives Programmiererlebnis und eine schnelle Reaktion auf Programmänderungen ermöglicht - in vielen Fällen kannst du die Auswirkungen einer Programmänderung fast so schnell sehen, wie du sie eingegeben hast.
Natürlich ist die kurze Entwicklungszeit nur ein Aspekt der Benutzerfreundlichkeit von Python. Es bietet auch eine bewusst einfache Syntax und leistungsstarke integrierte Werkzeuge. Manche gehen sogar so weit, Python als ausführbaren Pseudocode zu bezeichnen. Da ein Großteil der Komplexität anderer Werkzeuge entfällt, sind Python-Programme einfacher, kleiner und flexibler als entsprechende Programme in anderen gängigen Sprachen.
Es ist relativ einfach zu lernen
Das bringt uns zu dem, worum es in diesem Buch geht: Vor allem im Vergleich zu anderen weit verbreiteten Programmiersprachen ist die Kernsprache Python bemerkenswert einfach zu erlernen. Wenn du ein erfahrener Programmierer bist, kannst du erwarten, dass du kleine Python-Programme in wenigen Tagen programmieren kannst und vielleicht sogar in der Lage bist, einige Teile der Sprache in nur wenigen Stunden zu erlernen - allerdings solltest du nicht erwarten, dass du so schnell zum Experten wirst (auch wenn du das vielleicht von den Marketingabteilungen gehört hast).
Natürlich ist es nicht trivial, ein so umfangreiches Thema wie das heutige Python zu beherrschen, und wir werden den Rest des Buches dieser Aufgabe widmen. Aber der Aufwand, den du betreiben musst, um Python zu beherrschen, lohnt sich - am Ende wirst du Programmierkenntnisse erlangen, die in fast allen Bereichen der Computeranwendung anwendbar sind. Außerdem finden die meisten, dass die Lernkurve von Python viel sanfter ist als die von anderen Programmierwerkzeugen.
Das ist eine gute Nachricht für professionelle Entwickler, die die Sprache für die Arbeit lernen wollen, und für Endbenutzer von Systemen, die eine Python-Schicht zur Anpassung oder Steuerung vorsehen. Heutzutage verlassen sich viele Systeme darauf, dass die Endnutzer/innen genug Python lernen können, um ihren Python-Anpassungscode mit wenig oder gar keiner Unterstützung vor Ort anzupassen. Außerdem hat Python eine große Gruppe von Nutzern hervorgebracht, die zum Spaß programmieren und nicht aus beruflichen Gründen. Obwohl Python über fortgeschrittene Programmierwerkzeuge verfügt, erscheinen die grundlegenden Funktionen der Sprache sowohl Anfängern als auch Gurus relativ einfach.
Es ist nach Monty Python benannt
Okay, das ist nicht unbedingt eine technische Stärke, aber es scheint ein überraschend gut gehütetes Geheimnis in der Python-Welt zu sein, das ich hier lüften möchte. Trotz all der Reptilien auf den Python-Büchern und -Symbolen ist Python in Wahrheit nach der britischen Comedy-Gruppe Monty Pythonbenannt - den Machernder BBC-Comedy-Serie Monty Python's Flying Circus aus den 1970er Jahren und einer Handvoll späterer abendfüllender Filme, darunter Monty Python and the Holy Grail, die auch heute noch sehr beliebt sind. Der ursprüngliche Schöpfer von Python war ein Fan von Monty Python, genau wie viele Softwareentwickler/innen (es scheint sogar eine Art Symmetrie zwischen den beiden Bereichen zu geben...).
Dieses Erbe verleiht den Python-Codebeispielen unweigerlich eine humorvolle Note. So werden zum Beispiel die traditionellen "foo" und "bar" für generische Variablennamen in der Python-Welt zu "spam" und "eggs". Die gelegentlichen "Brian", "ni" und "shrubbery" verdanken ihre Erscheinung ebenfalls diesem Namensvetter. Das hat sogar Auswirkungen auf die Python-Gemeinschaft insgesamt: Einige Veranstaltungen auf Python-Konferenzen werden regelmäßig als "Die Spanische Inquisition" angekündigt.
All das ist natürlich sehr witzig, wenn du mit den Shows vertraut bist, aber weniger, wenn nicht. Du musst die Arbeit von Monty Python nicht kennen, um die Anspielungen zu verstehen, die in diesem Buch zu finden sind, aber zumindest kennst du jetzt ihre Wurzeln. (Hey - ich habe dich gewarnt.)
Wie schneidet Python im Vergleich zur Sprache X ab?
Und schließlich wird Python manchmal mit Sprachen wie Perl, Tcl und Java verglichen, um es in den Kontext dessen zu stellen, was du vielleicht schon weißt. Dieser Abschnitt fasst den allgemeinen Konsens in diesem Bereich zusammen.
Ich möchte gleich zu Beginn anmerken, dass ich kein Fan davon bin, zu gewinnen, indem ich die Konkurrenz herabsetze - das funktioniert auf lange Sicht nicht, und das ist hier auch nicht das Ziel. Außerdem ist dies kein Nullsummenspiel - die meisten Programmierer/innen werden im Laufe ihres Berufslebens viele Sprachen verwenden. Dennoch gibt es bei Programmierwerkzeugen Entscheidungen und Kompromisse, die man in Betracht ziehen sollte. Denn wenn Python seinen Alternativen nichts entgegenzusetzen hätte, wäre es gar nicht erst eingesetzt worden.
Wir haben bereits über die Leistungseinbußen gesprochen, also konzentrieren wir uns hier auf die Funktionalität. Obwohl auch andere Sprachen nützliche Werkzeuge sind, die man kennen und nutzen sollte, finden viele Menschen, dass Python:
ist leistungsfähiger als Tcl. Die starke Unterstützung von Python für die "Programmierung im Großen" macht es für die Entwicklung größerer Systeme geeignet, und die Bibliothek der Anwendungswerkzeuge ist breiter.
ist besser lesbar als Perl. Python hat eine klare Syntax und ein einfaches, kohärentes Design. Das wiederum macht Python wiederverwendbar und wartbar und hilft, Programmfehler zu reduzieren.
ist einfacher und leichter zu benutzen als Java und C#. Python ist eine Skriptsprache, aber Java und C# haben einen Großteil der Komplexität und Syntax von größeren OOP-Systemsprachen wie C++ geerbt.
Python ist einfacher und leichter zu benutzen als C++. Python-Code ist einfacher als der entsprechende C++-Code und oft ein Drittel bis ein Fünftel so groß, obwohl Python als Skriptsprache manchmal andere Aufgaben erfüllt.
Python ist einfacher und übergeordneter als C. Die Loslösung von der zugrundeliegenden Hardware-Architektur macht den Code weniger komplex, besser strukturiert und zugänglicher als C, der Vorläufer von C++.
Python ist leistungsfähiger, vielseitiger und plattformübergreifender als Visual Basic. Python ist eine reichhaltigere Sprache, die breiter eingesetzt wird, und ihr Open-Source-Charakter bedeutet, dass sie nicht von einem einzigen Unternehmen kontrolliert wird.
Python ist besser lesbar und vielseitiger als PHP. Python wird nicht nur für die Erstellung von Websites verwendet, sondern auch in fast allen anderen Bereichen der Informatik, von der Robotik bis hin zu Filmanimationen und Spielen.
Ist leistungsfähiger und vielseitiger als JavaScript. Python hat ein größeres Toolset und ist nicht so stark an die Webentwicklung gebunden. Es wird auch für die wissenschaftliche Modellierung, Instrumentierung und mehr verwendet.
Python ist lesbarer und etablierter als Ruby. Die Syntax von Python ist weniger unübersichtlich, vor allem bei nicht-trivialem Code, und seine OOP ist für Benutzer und Projekte, auf die sie nicht anwendbar ist, völlig optional.
Ist ausgereifter und breiter angelegt als Lua. Der größere Funktionsumfang von Python und die umfangreichere Bibliotheksunterstützung geben ihm einen größeren Spielraum als Lua, eine eingebettete "Klebesprache" wie Tcl.
ist weniger esoterisch als Smalltalk, Lisp und Prolog. Python hat den dynamischen Charakter dieser Sprachen, aber auch eine traditionelle Syntax, die sowohl für Entwickler als auch für Endbenutzer von anpassbaren Systemen zugänglich ist.
Vor allem für Programme, die mehr tun, als Textdateien zu scannen, und die in Zukunft vielleicht von anderen (oder von dir!) gelesen werden müssen, finden viele, dass Python besser geeignet ist als jede andere heute verfügbare Skript- oder Programmiersprache. Außerdem ist Python oft eine gute Alternative zu Systementwicklungssprachen wie C, C++ und Java, es sei denn, deine Anwendung erfordert Spitzenleistung: Mit Python-Code lassen sich oft die gleichen Ziele erreichen, aber er ist viel einfacher zu schreiben, zu debuggen und zu warten.
Natürlich ist dein Autor seit 1992 ein bekennender Python-Evangelist, also nimm diese Kommentare, wie du willst (und die Meinungen der Verfechter anderer Sprachen können beliebig variieren). Sie spiegeln jedoch die Erfahrung vieler Entwicklerinnen und Entwickler wider, die sich die Zeit genommen haben, das Angebot von Python zu erkunden .
Kapitel Zusammenfassung
Und damit ist der "Hype"-Teil dieses Buches abgeschlossen. In diesem Kapitel haben wir einige der Gründe erforscht, warum Menschen Python für ihre Programmieraufgaben wählen. Wir haben auch gesehen, wie es angewendet wird, und haben uns eine repräsentative Auswahl derer angesehen, die es heute benutzen. Mein Ziel ist es jedoch, Python zu lehren und nicht, es zu verkaufen. Der beste Weg, eine Sprache zu beurteilen, ist, sie in Aktion zu sehen. Deshalb konzentriert sich der Rest dieses Buches ganz auf die Details der Sprache, die wir hier kurz angeschnitten haben.
In den nächsten beiden Kapiteln beginnt unsere technische Einführung in die Sprache. Darin erkunden wir, wie Python-Programme ausgeführt werden, werfen einen Blick auf Pythons Bytecode-Ausführungsmodell und stellen die Grundlagen von Moduldateien zum Speichern von Code vor. Das Ziel ist es, dir gerade so viele Informationen zu geben, dass du die Beispiele und Übungen im Rest des Buches ausführen kannst. Mit dem eigentlichen Programmieren fängst du erst in Kapitel 4 an, aber stell sicher, dass du die Details des Starts im Griff hast, bevor du weitermachst.
Teste dein Wissen: Quiz
In dieser Ausgabe des Buches schließen wir jedes Kapitel mit einem kurzen Quiz ab, um dir zu helfen, die wichtigsten Konzepte zu überprüfen. Die Antworten auf diese Quizfragen stehen direkt im Anschluss an die Fragen. Wir empfehlen dir, die Antworten zu lesen, nachdem du die Fragen selbst ausprobiert hast, da sie manchmal nützliche Hinweise geben.
Zusätzlich zu den Quizfragen am Ende jedes Kapitels findest du am Ende jedes Teils des Buches Übungsaufgaben, die dir helfen sollen, Python selbst zu programmieren. Hier ist dein erstes Quiz. Viel Glück und schau dir die Inhalte dieses Kapitels bei Bedarf noch einmal an.
Was sind die sechs Hauptgründe dafür, dass Menschen Python benutzen?
Nenne vier namhafte Unternehmen oder Organisationen, die Python heute einsetzen.
Warum solltest du Python nicht in einer Anwendung verwenden?
Was kannst du mit Python machen?
Welche Bedeutung hat die Python-Anweisung
import this
?Warum taucht "Spam" in so vielen Python-Beispielen in Büchern und im Internet auf?
Was ist deine Lieblingsfarbe?
Teste dein Wissen: Antworten
Wie hast du abgeschnitten? Hier sind die Antworten, die ich gefunden habe, auch wenn es für einige Quizfragen mehrere Lösungen geben kann. Auch wenn du dir bei deiner Antwort sicher bist, solltest du dir meine Antwort ansehen, um den Kontext zu verstehen. Wenn dir eine der Antworten nicht einleuchtet, kannst du im Text des Kapitels nachlesen, wie es weitergeht.
Softwarequalität, Entwicklerproduktivität, Programmportabilität, unterstützende Bibliotheken, Komponentenintegration und einfaches Vergnügen. Die Themen Qualität und Produktivität scheinen die Hauptgründe zu sein, warum sich Menschen für Python entscheiden.
Google, Industrial Light & Magic, CCP Games, Jet Propulsion Labs, Maya, ESRI, und viele mehr. Fast jedes Unternehmen, das Software entwickelt, nutzt Python in irgendeiner Form, sei es für die langfristige strategische Produktentwicklung oder für kurzfristige taktische Aufgaben wie Tests und Systemadministration.
Der größte Nachteil von Python ist die Leistung: Es läuft nicht so schnell wie vollständig kompilierte Sprachen wie C und C++. Andererseits ist sie für die meisten Anwendungen schnell genug, und typischer Python-Code läuft ohnehin fast mit C-Geschwindigkeit, weil er im Interpreter verlinkten C-Code aufruft. Wenn es auf die Geschwindigkeit ankommt, gibt es kompilierte Erweiterungen für zahlenintensive Teile einer Anwendung.
Du kannst Python für fast alles verwenden, was du mit einem Computer machen kannst, von der Website-Entwicklung über Spiele bis hin zu Robotik und Raumschiffsteuerung.
Dies wurde in einer Fußnote erwähnt:
import this
löst ein Osterei in Python aus, das einige der Designphilosophien der Sprache zeigt. Wie du diese Anweisung ausführen kannst, erfährst du im nächsten Kapitel."Spam" ist eine Anspielung auf einen berühmten Monty Python-Sketch, in dem Leute, die in einer Cafeteria Essen bestellen wollen, von einem Chor von Wikingern übertönt werden, die über Spam singen. Oh, und es ist auch ein häufiger Variablenname in Python-Skripten...
1 Wenn du einen genaueren Blick auf die Python-Philosophie werfen willst, gib den Befehl import this
in eine beliebige interaktive Eingabeaufforderung von Python ein (wie das geht, erfährst du in Kapitel 3). Dadurch wird ein in Python verstecktes "Osterei" aufgerufen - eine Sammlung von Designprinzipien, die Python zugrunde liegen und sowohl die Sprache als auch ihre Benutzergemeinschaft durchdringen. Das Akronym EIBTI steht für die Regel "explicit is better than implicit" (explizit ist besser als implizit) und ist heute in aller Munde. Diese Prinzipien sind zwar keine Religion, aber sie sind nah genug dran, um als Motto und Credo für Python zu gelten, aus dem wir in diesem Buch oft zitieren werden.
Get Python lernen, 5. Auflage now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.