|
|
Python - Lexikon A - Z (Teil A - M) |
|---|
|
Hier werden vorrangig Begriffe
erläutert, die
speziell in Python vorkommen bzw. die in Python zu der
sonst üblichen Bedeutung irgendeine Besonderheit aufweisen. In der
Regel werden zuerst die Begriffe vermerkt, die sich als interessant
für Umsteiger erweisen. Die passenden Erläuterungen
können dann verzögert und schrittweise auftauchen. Sofern ein
Leser sich hier beteiligen möchte, würde ich gern
seine zugearbeitete Definition bzw. Erläuterung hier mit
reinstellen. Ebenso nehme ich gern Vorschläge für weitere
wichtige Pythonbegriffe entgegen! :-)
|
B
__ builtins__ (dieser Link ist nicht vollständig unterstrichen,
weil die Schreibweise __builtins__
sonst nicht mehr korrekt zu sehen ist. Daher klickt bitte auf die
Unterstriche vor
oder nach dem Wort)
F
Frame - Widget
G
gekoppelte Operatoren
global - Anweisung
H
Hauptschleife in Tkinter
Hierarchie der Widgets in Tkinter
K
Kapselung
Klassenmethoden
Kopie
flache
tiefe
M
mainloop()
Mehrfachvererbung
Modulreimport
msvcrt - Modul
Bestandteil einer Klasse, der aus den Daten- und Funktionsobjekten besteht. Die Attribute werden in Verbindung mit dem Klassennamen aufgerufen. Bsp.
class test:
def __init__(self):
self.variable = 0
def zeigevar():
return self.variable
t = test()
t.variable = 100
print t.zeigevar()
__builtins__ ist ein Modul. Es enthält die eingebauten Namen (Variablen und Funktionen). Diese können mit
>>> dir(__builtins__)
sichtbar gemacht werden. In anderen Modulen ist ebenfalls __builtins__ vordefiniert.
Ist ein Modul für die Unix/Linux - Welt. Es gestattet u.a., den
Kursor an die gewünschte Stelle zu setzen und dort auf dem
Bildschirm weiterzuschreiben. Damit können Ausgaben nicht nur im
Scrolling (alles rollt von unten nach oben und unten wird geschrieben)
vorgenommen werden, sondern es können zum Bsp. in einer
Eingabemaske Eingaben auf einer bestimmten Position des Bildschirms
erfolgen. In der Zeit der graphischen Benutzeroberflächen gibt es
inzwischen schönere Lösungen. Aber wenn man so etwas in der
Windows - Welt machen will, erfordert das den Einsatz anderer Module.
Einige Möglichkeiten der Kursorsteuerung
im Textmodus für Windows oder Linux sind hier nachzulesen.
auch assoziatives Feld genannt. Ein D. ordnet Schlüsseln Werte zu, wobei der Schlüssel eindeutig sein muss, d.h. er darf im D. nur einmal vorkommen. Die Schreibweise erfolgt mit geschweiften Klammern:
d = {'vorname': 'paul', 'alter': 43, 'name': 'schulz'}
Hinzufügen kann man durch Zuweisen:
d['wohnort'] = 'frankfurt'
Wird einem Schlüssel, der schon vorhanden ist, ein Wert zugewiesen, dann geht der alte Wert verloren.
In einem Modul, einer Klasse oder einer Funktion/Methode kann in den ersten Zeilen des jeweiligen Objektes einfach ein String hingeschrieben werden (mit der entsprechenden Einrückung). Dieser String kann dann z.B. durch den außenstehenden benutzer mit print.__doc__ herausgelesen werden. Für längere Erklärungen verwenden wir natürlich die Schreibart, die mit der Kennzeichnung """ vorn und hinten eingeschlossen wird, die dann über mehrere Zeilen gehen kann.
"Die Erklärung zum Modul"
class probe:
"Die Erklärung zur Klasse"
def machwas(self):
"Die Erklärung zur
Funktion"
print __doc__
print probe.__doc__
print probe.machwas.__doc__
Die Erklärung zum Modul
Die Erklärung zur Klasse
Die Erklärung zur Funktion
Dynamisches Auswerten einer Befehlszeile, die zur Laufzeit des Programms vom Programm selbst erstellt bzw. modifiziert wird. Das ist eine sehr leistungsfähige Möglichkeit Dinge zu tun, die sonst garnicht so ohne weiteres gehen würden! So werden z.B. Instanzen einer Klasse fortlaufend erzeugt:
# Feld von Klasseninstanzen
class knoten:
def __init__(self, name):
self.name = name
def zeige(self):
return self.name
for i in range(0, 12):
kn_name = 'kn' + str(i)
exec kn_name + "= knoten(kn_name)"
Nachdem man das Progrämmchen gestartet hat, stehen folgende Variable in der dir( ) - Anweisung:
['__builtins__', '__doc__', '__name__', 'i', 'kn0', 'kn1', 'kn10', 'kn11', 'kn2', 'kn3', 'kn4', 'kn5', 'kn6', 'kn7', 'kn8', 'kn9' , 'kn_name', 'knoten']
Und das Schönste daran ist, dass diese Objekte ihren eigenen Variablennamen wissen. Wozu man das brauchen kann? Eine Beispielanwendung ist hier aufgeführt .
Die Verwendung mehrerer Operatoren zugleich. Ab Python 2.x angeandt.
Zum Beispiel die Kombination +=,
oder auch -=, *= oder **=.
Programmierumgebung für Python, die bei den Python - Paketen im Lieferumfang zumeist gleich mit dabei ist. Sie setzt Tkinter voraus, was wiederumg ein installiertes Tk erwartet. Idle enthält eine Python - Shell, in der man Interpreterbefehle aus der Komandozeile heraus ausführen kann. Weiterhin ist ein Editor enthalten, der eine Farbunterstützung für syntaktische Elemte von Python bereitstellt. Weiterhin sind enthalten: Ein Klassenbrowser (zur grafischen Darstellung der Klassenhirarchie), ein Debugger und ein Path-Browser. Ein Schnappschuss ist hier zu sehen.
Python - Interpreter, der in Java geschrieben ist. Damit läuft er auf allen Plattformen, die über eine virtuelle Javamaschine verfügen. Zugleich hat er den großen Vorzug, dass man aus ihm heraus auch auf die Java - Komponenten zugreifen kann, was zusätzliche Möglichkeiten bietet.
K. sind Methoden von Klassen, die man für die gesamte Klasse aufruft. Sie werden also bereits in der Klassendefinition formuliert, ohne dass sie an Instanzen gebunden sein müssen. Als Beispiel: wir formulieren zwei verschiedene Klassen A und B. Nun soll von der Klasse B eine ihrer Methoden aufgerufen werden. Dieser Aufruf soll in der Klasse A in einer ihrer Methoden erfolgen.
class A:
def machwas():
print "nun ist es geschehen"
class B:
def machwasanderes():
A.machwas()
Dies geht so in Python, aber erst nach kleinen Anpassungen, wobei man einiges beachtet sollte. Hier erstmal die Ergänzung von Frank Timmermann:
Die class B muss nämlich folgendermaßen angepaßt werden:
class B:
def machwasanderes():
A().machwas() # A() anstatt A, dadurch wird eine Instanz der Klasse
gebildet und schon gehts.
Und es geht wirklich! Allerding gibt es da ein paar kleine Stolpersteine. Hier sind ein paar Nebenvarianten zu finden, denn es geht nicht immer so einfach. Das liegt daran, dass durch die "Zwangsinstanziierung" keine bleibende Instanz gebildet wird, sondern mehr so eine Art Nullobjekt. Dieses reagiert auch, was dazu reicht, um mal schnell eine Methode aufzurufen, die in irgendeiner Klasse steckt. Will man aber damit Variable der Klasse dauerhaft setzen, kommt schnell mal eine Fehlerfunktion. Seht selbst:
Wer mehr dazu braucht, findet dazu Hinweise im Buch "Python 2" von ADISSON-WESLEY, S. 126 sowie im PythonKochbuch . Am einfachsten würde es gehen, wenn aus B die Methode für eine Instanz der Klasse A aufgerufen würde.
class A:
def machwas(self):
print "nun ist es geschehen"
bspA = A()
class B:
def machwasanderes(self):
bspA.machwas()
bspB = B()
bspB.machwasanderes()
nun ist es geschehen
>>>
erscheint auf dem ersten Blick überflüssig, aber man gewöhnt sich schnell daran, kleine Funktionen derart einfach aufzuschreiben, zumal sich gegenüber der Definition einer Funktion mit def Schreibarbeit einsparen lässt. Diese lassen sich auch in Vergleichsoperatoren zu verwenden. Allerdings sollte man darauf achten, dass die Parameter nicht in Klammern geschrieben werden, was ja sonst bei Funktionen erforderlich ist:
lambda Parameterliste: Ausdruck
Beispiel:
>>> n = [1, 2, 3, 6]
>>> f = reduce(lambda x, y: x*y, n)
>>> print f
>>> 36
Die Lambdafunktion erwartet hier die 2 Parameter x und y. Der Ausdruck lautet x * y, es ist also eine Multiplikationsanweisung. Die Funktion reduce(funktion, sequence) erhält hier die Lambdafunktion als Funktion und die Liste n als Sequence. Nun wird fleißig paarweise multipliziert. Erst 1 * 2 = 2, Weiter das Ergebnis der letzten Multiplikation mit dem nächsten Wert in der Liste, also 2 * 3 = 6 und zuletzt 6 * 6 = 36. Stimmt!
Aber das ist noch nicht alles. Man will ja die Lambdafunktion eventuell mehrmal aufrufen, was ja bei einer Funktion mit def auch gegangen wäre. Nichts einfacher als das, wir weisen ihr einfach einen Variablöennamen zu.
>>> p = lambda x, y=12: x*y
In diesem beispiel ist auch gleich mal dem einen Parameter ein Standardwert zugewiesen, wie es bei den klassischen Funktionen ja auch möglich ist. Nun geht es so weiter:
>>> p(5)
60
>>> p(3, 4)
12
Man sieht aber auch, dass sich Quelltexte mit solch kompakten Schreibweisen manchmal schlechter lesen lassen. Also immer vorher sorgfältig abwägen, welcher Schreibweise man den Vorzug gibt.
Trotzdem ist es eine zusätzliche Möglichkeit, Sachen in der pythontypischen Eleganz aufzuschreiben!
Datentyp, ähnlich einem Array in Pascal, dessen einzelnen Elemente mit dem Variablennamen plus Index einzeln angesprochen werden können. Schreibweise:
L = ['Name', 'Vorname', 324, 'Wohnort', 33.25]
Wie man sieht, müssen die Elemente nicht vom gleichen Typ sein. Als Element sind auch weitere Listen zulässig, so dass man diese damit praktisch verschachteln kann. So entsteht etwas, was ähnlich einem zweidimensionalen Array ist.
L = ['Name', Vorname, [324, 33.25, 1000]]
Bei Beachtung, dass das erste Element immer den Index Null hat, erfolgt der Zugriff dann so:
a = [2][1]
print a
>>> 33.25