Aufrufe in Python
Eine bestimmte, sehr universelle, Form eines Ausdrucks ist der Aufruf.
Einleitendes Beispiel
In einer Python -Implementation gibt es vordefinierte Programme zur Festlegung des Wertes von Ausdrücken, wie beispielsweise das Programm ›dir‹.
- Auswertung
dir
<built-in function dir>
Die Textdarstellung des Objekts ›dir‹ lautet »<built-in function dir>« damit wird gesagt:
- Es handelt sich um ein Objekt mit dem internen Namen »dir«.
- Dieses Objekt ist ein Programm (»function«).
- Das Programm wurde in der Programmiersprache C geschrieben (»built-in«)
Bei der Auswertung des Ausdrucks »dir()« wird das Programm ›dir‹ gestartet, um den Wert des Ausdrucks festzulegen. ›dir‹ legt ein Namensverzeichnis »['__annotations__', …« als Wert des Aufrufausdrucks »dir()« fest. Eine Textdarstellung jenes Namensverzeichnisses erscheint dann in der Konsole.
- Auswertung
dir()
- ['__annotations__', …
Nach einem Import zeigt »dir()« beispielsweise zusätzlich auch noch die importierten Namen an:
- Protokoll
from string import digits
dir()
- [ … , 'digits' ]
Syntax
Ein Aufruf ist ein Ausdruck, dem eine runde Klammer auf »(« und dann eine runde Klammer zu »)« folgt.
- Syntax (vereinfacht)
Aufruf
.----------. .-. .-.
--->| Ausdruck |--->( ( )--->( ) )--->
'----------' '-' '-'
Entsprechend nennt man die Klammern »()« auch den Aufrufoperator.
Den Ausdruck, der in einem Aufruf ganz vorne steht, nennen wir auch einen Prälaten (mittelhochdeutsch prēlāt(e) < mittellateinisch praelatus, = der Vorgezogene, weil jener Ausdruck im Aufruf ganz vorne steht. English: prelate /ˈprɛlɪt/).)
- Syntax (vereinfacht)
Aufruf
.----------. .-. .-.
--->| Ausdruck |--->( ( )--->( ) )--->
'----------' '-' '-'
Praelat
Korrekte Syntax
Wie ein Atom kann ein Aufruf überall eingesetzt werden, ohne eingeklammert werden zu müssen. Solche Ausdrück werden als Primärausdrücke bezeichnet. Die Priorität der nachgestellten Klammern ist höher als die aller anderen Operatoren. Wir korrigieren die eingangs vorgestellte vereinfachte Syntax nun dahingehend, daß eine Aufruf mit einem Primärausdruck beginnt.
- Syntax
Primaerausdruck
.--------.
---.--->| Atom |---.--->
| '--------' |
| .--------. |
'--->| Aufruf |---'
'--------'Aufruf
.-----------------. .-. .-.
--->| Primaerausdruck |--->( ( )--->( ) )--->
'-----------------' '-' '-'Potenz
.-------------------------------------.
| |
.-----------------. | .--. .------------------. v
--->| Primaerausdruck |---'--->( ** )--->| unaerer Ausdruck |---'--->
'-----------------' '--' '------------------'
Die häufigste grammatische Kategorie eines Prälaten ist wahrscheinlich „Name“, da oft ein Name als Prälat verwendet wird, wie etwa in »dir()«.
Aussprache
Eine mögliche Aussprache von »dir()« ist „dir-Aufruf “.
Anforderungen
Der Ausdruck, der sich in einem Aufruf vor den Klammern befindet, muß ein Objekt als Wert haben, das speziell für die Verwendung in einem solchen Aufruf vorgesehen ist. Solch ein Objekt wird aufrufbares Objekt genannt. Der Aufruf wird auch als „Aufruf des aufrufbaren Objekts“ bezeichnet.
Ein aufrufbares Objekt bezeichnete man in den 90er Jahren in der Programmiersprache C++ auch kurz als einen Funktor. Im weiteren Verlaufe des Kurses wird in diesem Kurs die Formulierung „aufrufbares Objekt“ jedoch gegenüber „Funktor“ bevorzugt werden. Wir werden „Funktor“ jedoch verwenden, wenn eine Bezeichnung aufrufbarer Objekte durch ein einzelnes Wort vorteilhaft ist. Falls keine Mißverständnisse möglich sind, wird ein aufrufbares Objekte manchmal auch nur kurz als „Objekt“ bezeichnet, wenn aus dem Zusammenhang schon hervorgeht, daß es sich um ein aufrufbares Objekt handelt.
Semantik
Ein aufrufbares Objekt repräsentiert ein Programm.
Bei der Auswertung eines Aufrufs eines aufrufbaren Objekts, wird das zu jenem Objekt gehörende Programm gestartet und kann dann den Wert des Aufrufes festlegen.
Die Auswertung eines Aufrufausdrucks bezeichnet man auch als Aufrufvorgang und sagt, daß dabei das aufrufbare Objekt aufgerufen werde. Der Aufrufvorgang wird auch kurz als „Aufruf“ bezeichnet, wenn dabei keine Verwechslungen mit dem Aufruf im Sinne des Aufrufausdrucks möglich sind oder diese Unterscheidung im Einzelfall nicht nötig ist.
Den Wert des Aufrufs eines Objektes nennen wir auch das Ergebnis des Aufrufs. Man sagt auch, daß der Wert des Aufrufs vom Aufruf geliefert werde.
Erkennung aufrufbarer Objeke
Wenn ein Aufruf ausgewertet wird, dessen Ausdruck kein aufrufbares Objekt als Wert hat, erscheint eine Fehlermeldung wie »object is not callable« („Objekt ist nicht aufrufbar“). Erscheint keine solche Fehlermeldung, ist das Objekt also aufrufbar.
- Protokoll (frei übersetzt)
"a"()
Typefehler: Ein str-Objekt ist grundsaetzlich nicht aufrufbar!
Aber auch bestimmte Namen stehen für nicht -aufrufbare Objekte.
- Eingabe eines Ausdrucks und Ausgabe einer Textdarstellung seines Wertes
__name__
'__main__'
- Protokoll (gekürzt, frei übersetzt und verändert)
__name__()
Typefehler: Ein str-Objekt ist grundsaetzlich nicht aufrufbar!
Arten aufrufbarer Objekte
Es gibt verschiedene Arten aufrufbarer Objekte. Die Unterscheidung zwischen diesen verschiedenen Arten aufrufbarer Objekte ist für uns derzeit aber noch nicht wichtig. Trotzdem werden einige Beispiele vorgestellt, damit man die zugehörigen Begriffe kennenlernt.
Funktionen
Das aufrufbare Objekt par excellence ist die Funktion, da Funktionen Objekte sind, die speziell dafür gemacht sind, aufgerufen zu werden.
»dir« ist der Name einer Funktion.
- Eingabe eines Ausdrucks und Ausgabe einer Textdarstellung seines Wertes (übersetzt)
dir
<eingebaute Funktion dir>
(„Eingebaut“ bedeutet hier, daß die Funktion in C geschrieben wurde.)
- Eingabe eines Ausdrucks und Ausgabe einer Textdarstellung seines Wertes
dir()
- ['__annotations__', …
Funktionen sind aufrufbare Objekte.
Neben den Funktionen gibt es noch andere aufrufbare Objekte.
Klassen
›str‹ ist ebenfalls aufrufbar, aber eine Klasse (und keine Funktion).
- Eingabe eines Ausdrucks und Ausgabe einer Textdarstellung seines Wertes
str()
''
- Eingabe eines Ausdrucks und Ausgabe einer Textdarstellung seines Wertes
str
<class 'str'>
Nicht alle Klassen sind aufrufbar.
Abkürzungen
An Stelle komplizierter Formulierungen wie „Die Auswertung eines Aufrufs des aufrufbaren Objektes ›dir‹ ergibt ein Namensverzeichnis.“ verwendet man oft Kurzformulierungen wie „Ein Aufruf von ›dir‹ ergibt ein Namensverzeichnis.“ oder gar „›dir‹ ergibt ein Namensverzeichnis.“, wenn dadurch keine Mißverständnisse ausgelöst werden können.
Standardobjekte
Wir hatten Namen, die von Anfang an vordefiniert sind, als Standardnamen bezeichnet.
Entsprechenden nennen wir von Anfang an vorhandene Objekte oder Funktionen, Standardobjekte und Standardfunktionen.
Dies sind Objekte oder Funktionen, die von der Standardbibliothek definiert werden.
Übungsfragen
? Aussprache
Wie würden Sie die beiden folgenden Ausdrücke jeweils aussprechen?
- Ausdruck
dir
- Ausdruck
dir()
? Übungsfrage
Welcher der folgenden Ausdrücke ist ein Aufruf?
- »( dir() )« (Anton)
- »( dir )« (Berta)
- »dir ()« (Cäsar)
- »( dir ) ()« (Dora)
- »dir()« (Emil)
- »dir ( )« (Friedrich)
- Syntax eines Aufrufs (vereinfacht)
Aufruf
.----------. .-. .-.
--->| Ausdruck |--->( ( )--->( ) )--->
'----------' '-' '-'
Übungsaufgaben
/ Übungsaufgabe
Schreiben Sie einen Aufruf des Objekts »help«.
(Das Verlassen des help-Modus ist durch Eingabe einer Leerzeile oder durch Eingabe von »quit« möglich.)
/ Übungsaufgabe
Schreiben Sie einen Aufruf des Objekts »int«.
Syntax ⃗
- Syntax
Atom
.--------------------------.
---.------------>| Literal |------------.--->
| '--------------------------' |
| .--------------------------. |
'------------>| Name |------------'
| '--------------------------' |
| .-. .--------------------------. .-. |
'--->( ( )--->| Ausdruck |--->( ) )---'
'-' '--------------------------' '-'Aufruf
.-----------------. .-. .-.
--->| Primaerausdruck |--->( ( )--->( ) )--->
'-----------------' '-' '-'Primaerausdruck
.--------.
---.--->| Atom |---.--->
| '--------' |
| .--------. |
'--->| Aufruf |---'
'--------'Potenz
.-------------------------------------.
| |
.-----------------. | .--. .------------------. v
--->| Primaerausdruck |---'--->( ** )--->| unaerer Ausdruck |---'--->
'-----------------' '--' '------------------'unaerer Ausdruck
.------------------.
--->.------------>| Potenz |----.---->
| '------------------' ^
| .-. .------------------. |
'--->( - )--->| unaerer Ausdruck |----'
| '-' '------------------' |
| .-. .------------------. |
'--->( + )--->| unaerer Ausdruck |----'
'-' '------------------'multiplikativer Ausdruck
.--------------------------.
--->.--->| unaerer Ausdruck |-------------------------------------.---->
| '--------------------------' ^
| .--------------------------. .-. .------------------. |
'--->| multiplikativer Ausdruck |--->( * )--->| unaerer Ausdruck |----'
| '--------------------------' '-' '------------------' |
| .--------------------------. .-. .------------------. |
'--->| multiplikativer Ausdruck |--->( / )--->| unaerer Ausdruck |----'
'--------------------------' '-' '------------------'additiver Ausdruck
.--------------------------.
--->.--->| multiplikativer Ausdruck |---------------------------------------------.---->
| '--------------------------' ^
| .--------------------------. .-. .--------------------------. |
'--->| additiver Ausdruck |--->( + )--->| multiplikativer Ausdruck |----'
'--------------------------' '-' '--------------------------'Ausdruck
.--------------------.
--->| additiver Ausdruck |--->
'--------------------'- Quelle zur Syntax von Aufrufen
The Python Language Reference, Release 3.7.0a1 6.3.4