Python3 – Index und Splices

Was ich jetzt zeige, funktioniert übrigens neben in Listen auch in Tupel und Strings. Die Splices sind einer der Gründe was mich zum Python Fan gemacht hat.

Es gibt die Möglichkeit über den Index auf entsprechende Elemente in den Objekten zuzugreifen:

Gezählt wird hierbei von 0, womit 1 das zweite Element wäre usw.

Teilbereiche

Es ist als nächstes auch möglich einen kompletten Teilbereich abzugreifen.  variable[von:bis]. von beginnt wieder bei 0, bis aber bei 1:

Soll es komplett vom Anfang oder bis zum Ende gehen, kann man die Zahl einfach auslassen:

Oder man kann auch von der anderen Richtung zählen, dazu einfach Negative Grenzen angeben:

Steps

Und zum Finale kann man auch noch den Step angeben.  Das ist der dritte Parameter:

 

Der Schnellkurs

Bei Fragen hinterlasse mir  einfach ein Kommetar.

Python3 – Tupel

Das Theme heute wird ganz einfach. Das Tupel.

Warum, seht hier mal selbst:

Bis auf das append gleich wie die Liste, das habt ihr sicher schon erkannt. Und der Unterschied zur Liste ist nun, das ein Tuple nicht mehr änderbar ist. Bedeutet es kann effizienter im Speicher angelegt werden, da man nicht damit rechnen muss es zu ändern. Wer jetzt meint, ein tuple doch irgendwie geändert zu haben, muss mit id() nur mal seine id vergleiche und bekommt zu sehen das ein neues Objekt angelegt wurde:

Und dann noch eine Besonderheit. Ein Tuple kann ich auch ohne Klammer schreiben. Schaut euch mal folgendes an, was so (bis auf klammern weglassen) auch mit Listen funktioniert:

Ein kleiner vorgriff, auf diese Weise kann man in Python Funktionen auch mehrere werte zurück geben: return a, b, c bzw. return (a,b,c). Hier empfehle ich die Schreibweise ohne klammern. Ansonsten passiert es schnell, das man return für eine Funktion hält.

Fragen dazu?

 

 

Python3 – Listen

Listen sind ein teil von dem, was Python zu so einer tollen Programmiersprache machen. Eigentlich sind sie nichts anderes als eine Sammlung beliebiger Werte. Das beliebig macht sie hierbei so besonders. Nützlich ist das in vielen Fällen.  Als einfaches Beispiel das lesen einer Datei. Hier kann es sich anbieten, aus jeder Zeile eine Liste zu machen (Trenner ein Leerzeichen) und diese wieder in eine Liste zu hängen. So kann man Bequem auf jede Zeile und dort auf jedes Wort zugreifen. Das zeige ich aber gleich, erst einmal ein paar einfache Funktionen und die sogenanten Splices:

Die hier gezeigten List Splices sind in vielen Situationen hilfreich. Z.b. in der Schleife:

Zu beachten ist hier der Index. Der Beginnt mit 0 für das erste Element. Wenn ich jedoch einen Bereich festlege wie z.B. meine_liste[3:6] ist 6 auch das sechste Element, aber 3 das vierte.

Details dazu habe ich noch mal hier zusammengefasst.

Beispiel mit Datei

Und nun das versprochene Beispiel, von der Datei zur Liste. Datei operationen sind in Python ziemlich unspektakulär. Die erste Zeile liest nämlich schon die ganze Datei in die Liste. Genauer gesagt das readlines().  Die Listen Einträge repräsentieren nun die einzellnen Zeilen als langer String. Split kann diese am Leerzeichen auftrennen, und gibt das erneut als Liste zurück. Split akzeptiert übrigens als Parameter auch jedes andere Zeichen.

Ab jetzt der weg zur Liste in der Liste. Wie erwähnt besteht die Liste aus beliebigen Inhalten. Das können also, Strings und Integer, aber genauso weitere Listen, Dictionarys oder Funktionen sein.

Ein kürzerer Weg wäre die List Comprehension. Diese fasst unsern Container und die Schleife direkt zusammen.

Weitere Listenfunktionen

Gibt es einen Wert in der Liste (siehe auch den Abschnitt Performance)

Wert an eine Liste anhängen:

Aber Achtung:

Bug? Nein Feature. Listen können ziemlich groß werden. Es wäre oft nicht effizient diese einmal komplett im Speicher zu kopieren, obwohl man eigentlich vielleicht nur den Namen ändern will. Was also hier gerade passiert ist,  ist das wir mit liste2 eine weitere Variable auf die erste Liste zeigen lassen. Braucht man eine eigenständige Liste, muss man explizit kopieren:

Zum diesem Thema (Mutalbe und Imutable Typen), schreibe ich jedoch noch einen komplett eigenen Beitrag.

Fazit

Dies hier ist nur ein ganz kleiner Einstieg in Listen. Man kann mit ihnen noch so einiges mehr machen. Dazu schaut kurz mal in der Python Doc vorbei. Aus meiner Erfahrung sind sie sehr praktisch und lösen viele Aufgaben.

Der Schnellkurs

Bei Fragen hinterlasse mir  einfach ein Kommetar.

Python3 – Strings und Zahlen

Hier nun der Teil zu Strings und Integer in meiner Python3 Schnelleinstiegs Serie.

Strings

Wie in andern Sprachen auch, ist ein String eine Zeichenfolge. In Python hat diese eine beliebige Länge und ist auch Binär sicher (Unterstützt somit 0-Bytes).

Ob Strings in einfachen oder doppelten Anführungszeichen geschrieben werden, macht keinen Unterschied. Lediglich muss man in einem String der in Doppelten Anführungszeichen steht, das einfache Anführungszeichen nicht Escapen und umgekehrt.

Generell kann man sich bei Python übrigens das Escapen in RegEx Ausdrücken sparen, wenn man den String entsprechend kennzeichnet:

Eine weitere Besonderheit sind auch mehrzeilige Strings. Diese werden mit 3 Anführungszeichen ein- und aus geleitet. Einfach oder doppelt macht auch hier keinen Unterschied.

String Funktionen

Hier noch ein paar nützliche Funktionen mit Strings

Zahlen

In python wird zwischen Ganzzahlen (Int) und Fliesskommazahlen (Float) unterschieden:

Wie im Beispiel zu sehen, wandelt Python3 beim Dividieren von Integer automatisch nach Float um. Das war in Python2 noch nicht so.

Mehr muss im Rahmen eines Schnelleinstieges gar nicht gesagt werden.  Es stehen ansonsten alle Vergleichsoperatoren von hier zur Verfügung.

Konvertieren

Zwischen allen drei Typen (str, float, int) kann übrigens auch einfach konvertiert werden.

Der Schnellkurs

Bei Fragen hinterlasse mir  einfach ein Kommetar.

Python3 – Bedinungen

Bei den Bedinungen if, elif oder while, prüfen wir eigentlich nur ob ein Wert oder eine Bedinung True oder False ist.

Als Vergleichsoperationen stehen zu Verfügung:

Verglichen werden, kann so einiges. Das Ergebnis ist immer ein Boolscher Wert, True oder False. Verglichen werden können Strings, genauso wie Integer oder Float Werte. Auch direkt das Ergebnis von Funktionen, hier ein Beispiel:

Als Operatoren stehen and, or und not zur verfügung:

Die Bedingte Code Ausführung klappt nun mit dem bekannten if, else und elif. Wichtig hier die Syntax von Python, Es wird ein Block durch den Doppelpunkt gestartet, der solange besteht wie eingerückt wird:

Simpel oder?

Der Schnellkurs

Bei Fragen hinterlasse mir  einfach ein Kommetar.

Python3 – Variablen

Variablen

Variablennamen in Python sind erstmal Case Sensitiv. Ansonsten sind folgende Zeichen erlaubt:

  • A bis Z und a bis z
  • 0-9 (nur nicht an erster Stelle)
  • _ (undersocre)
  • unicode zeichen, was aber nicht ratsam ist.

Ein Dollar Zeichen am Anfang wird nicht benötigt. Spart auf Dauer auch wieder einiges an getippten Zeichen.

Und dann gibt es einen großen Unterschied zu sprachen wie Java oder C. In diesen werde nämlich Variablen typisiert. Das ist in Python jedoch nicht der Fall. Eine Variable in Python hat keinen Typ. Wohl aber das Objekt, auf welche die Variable verweist.

Somit funktioniert das folgende problemlos:

Sprich eben noch auf ein int Objekt verwiesen, kann die variable im nächsten Moment auf einen String zeigen. Variablen können auf alles verweisen, auch auf Funktionen. Dazu später mehr.

Es bleibt noch zu merken das eine Variable erst zur Laufzeit entsteht und zwar zum Zeitpunkt der ersten Zuweisung.

Gültigkeit

Bei der Gültigkeit einer Variable gibt es einen etwas eigenwilligen Ansatz. Der ist aber auch der Tatsache geschuldet böse Globalen Variablen zu vermeiden. Für die Beispiele ein Hintergrund: def leitet eine Funktion ein. Dann fangen wir an:

Dies funktioniert, da  s nicht innerhalb der Funktion lokal definiert ist. Es wird (lesend) auf die globale Variable s zugegriffen.

Hier erfolgt aus Ausgabe:

Die Variable s in der Funktion f bleibt nun eine lokale Variable innerhalb der Funktion und hat wie jede andere in Funktionen definierten Variablen keinen Einfluss außerhalb der Funktion.

Der mix geht jetzt natürlich nicht:

Dieses Chaos ergibt zu recht ein: UnboundLocalError: local variable ‘s’ referenced before assignment

Das Chaos könnte man nun mit dem global Schlüsselwort gültig machen. Aber sollte man das wirklich mal brauchen läuft mit dem Code sowieso irgend etwas falsch.

Der Schnellkurs

Bei Fragen hinterlasse mir  einfach ein Kommetar.

Python3 – Hallo Welt, Syntax und der Interaktive Modus

Hallo Welt

Hallo Welt ist in Python schnell geschafft. Vorausgesetzt ihr habt Python3 erfolgreich installiert (wobei es fast auf jedem aktuellen *NIX von alleine mitkommt), braucht ihr nur eine Datei die auf .py endet.

Beispiel: hallo_welt.py

Wie aus anderen Scriptsprachen bekannt, wird in der ersten Zeile nach der Shebang (#!) der Pfad zum Interpreter angegeben. Um z.B. in Virtuellen Umgebungen flexible zu bleiben, geben wir hier nicht den direkten Pfad aus, sondern beziehen ihn immer aus unserem Environment.

Die Datei muss jetzt nur noch ausführbar gemacht werden, und kann dann ausgeführt werden:

Syntax

Hier unterscheidet sich nun Python von den verbreiteten C Ähnlichen Programmiersprachen. Das mag am Anfang nun etwas gewöhnungsbedürftig sein, aber man lernt es wirklich lieben.

Blöcke werden in Python nicht mit geschweiften Klammern gebildet, sondern durch einen Doppelpunkt gestartet. Alles was zu dem Block gehört, bleibt jetzt mindestens 2, optimal und verbreitet 4 stellen eingerückt. Hier sei noch gesagt, stellt euren Editor so ein das er aus Tabs entsprechend Leerzeichen macht. Sonst kann es mal zum Chaos kommen wenn ihr mit mehren Leuten zusammenarbeitet.

Beispiel:

Zeilenenden

Zeilenende müssen im Gegensatz zu vielen anderen Sprachen nicht gekennzeichnet werden. Eine Zeile ist zu ende, wenn sie zu ende ist. Ausnahme, das Zeilenende ist aufgehoben. Eine ziemlich geniale Sache, spart man sich doch das Tippen unzähliger Zeichen.

Entwertet wird das Zeilenende entweder von Hand, mit einem \, oder ist es automatisch wenn eine Klammer ( { [ nicht geschlossen ist.  Auch gibt es in Python eine bestimmte Sorte Strings, die Mehrzeilig sein kann. Einfach entweder 3x ” oder 3x ‘.

In Python gibt es übrigens keinen Unterschied zwischen Strings in einfachen oder doppelten Anführungszeichen. Lediglich muss ich die einfachen innerhalb doppelter nicht escapen und umgekehrt.

Dann zum Beispiel

Kommentare

Was Kommentare angeht ist Python auch sehr einfach. Einfach das Hash Zeichen. Jeweils von # wird bis zum Zeilenende kommentiert.

Mehrzeilig geht auch mit einer Art Trick. Dieser wird auch benutzt um Methoden und Funktionen zu Dokumentieren. Und zwar mit einem Mehrzeiligen String (“””)

Interaktiver Modus

Ein nützliches Feature in Python ist der Interaktive Modus. Er ist praktisch um schnell mal was auszuprobieren. Print braucht man nicht, alles wird direkt ausgegeben. Gestartet wird er durch die Eingabe python3, beendet mit Strg + D

Der Schnellkurs

Das war auch schon der erste Einstieg. Bei Fragen hinterlasse mir  einfach ein Kommetar.

Schnelleinstieg in Python3

Bei Python handelt es sich um eine verbreitete Programmiersprache, die nicht nur einfach, sondern auch schnell und mächtig ist. Sie wurde 1990 von Guido van Rossum veröffentlicht. Inzwischen gibt es bereits mehrere Jahre die Version 3 von Python, die jedoch nicht kompatibel zum Vorgänger ist. In der Version 3 wurde so manche unschönheit der Version 2 beseitigt. Vor einigen Jahren hat sich die Frage 2 oder 3 noch gestellt, heute jedoch fängt man nur noch mit 3 an.

Für jeden, der bereits (etwas) Programmiererfahrung hat, habe ich hier einen Schnelleinstieg zusammengestellt, welcher die wichtigsten Grundlagen einfach zu vermitteln versucht.

Und wer dann Tiefer einsteigen will, der findet z.B. diesem Buch alle Details.

Themen

Python Flask: Mutable Objekte in der Session

(Alle Beispiele nur exemplarisch)
In Flask steht eine sehr praktische Session funktion zur Verfügung:

Aber das Problem:

Auf der dritten Seite wird man nun merken das der Wert inhalt3 fehlen wird.
Das ist kein Bug, sondern hier fehlt ein session.modified = True

Dies ist bei jedem mutablen Typ notwendig, um Flask über die änderung zu informieren.
Siehe dazu auch: Flask Dokumentation

Ubuntu, Windows und Strg Tasten Tauschen

Da ich inzwischen mit Mac und Linux Systemen im Wechsel arbeite,
möchte ich natürlich ein möglichst gleiches verhalten von allen Systemen.

Unter Ubuntu mit dem Awesome Desktop manager, reicht es für mich die linke Windows mit der linken Strg Taste zu tauschen. Das schafft Xmodmap.

Unter ~/.Xmodmap benötige ich die folgenden Einträge:

Hier geht man davon aus, das Keycode 37 die Taste Strg, und Keycode 133 die Windows Taste ist. Klarheit schaft hier das tool xev, das sich mit apt-get install xev installieren lässt.

Wer übrigens auch die Caps Lock Taste mal sinnvoll nutzen mag,
geht so:

Hier wurde ihr (code 66) die Funktion der Windows Taste zugewiesen. Macht die Tastenkombinationen in Awesome einfacher :)