Aufrufe mit mehreren Argumenten in Python
Einführende Beispiele
Wir haben schon binäre Operatoren kennengelernt.
- Auswertung
12 + 7
19
Eine Anwendung eines binären Operators hat zwei Operanden.
Auch Aufrufe können mehrere Argumente (hier: zwei Argumente) haben.
- Protokoll
from operator import add
add( 12, 7 )
19
Syntax
Mehrere Argumente werden innerhalb eines Aufrufs jeweils durch ein Komma »,« voneinander getrennt.
- Syntax
Aufruf .---------------------------.
.-----------------. .-. | .----------. v .-.
--->| Primaerausdruck |--->( ( )---'---.--->| Ausdruck |---.---'--->( ) )--->
'-----------------' '-' ^ '----------' | '-'
| .-. |
'--------( , )------'
'-'
Anforderungen
Der Wert des Primärausdrucks muß ein aufrufbares Objekt sein, das den Aufruf mit der verwendeten Anzahl von Ausdrücken in den Klammern gestattet.
Semantik
Bei der Auswertung eines Aufrufs werden der Primärausdruck und die Ausdrücke des Aufrufes in der Reihenfolge vom Anfang des Ausdrucks bis zu seinem Ende ausgewertet (die Reihenfolge, in der dies geschieht, wird von The Python Language Reference, Release 3.7.0a1, 6.15 festgelegt). Die Auswertung des Primärausdrucks ergibt ein aufrufbares Objekt, und die Auswertung der Ausdrücke ergibt Objekte. Alsdann wird eine Inkarnation (Verbindung) des aufrufbaren Objekts mit den Objekten hergestellt und gestartet. Diese legt dann den Wert des Aufrufes fest.
Anmerkungen
Dokumentation
Die Dokumentation vermittelt eine Information über mehrere Argumente durch entsprechend viele Parameter.
- Protokoll (Python 3.7.0 Vorversion)
from operator import add
help( add )
Help on built-in function add in module _operator:
add(...)
add(a, b) -- Same as a + b.
- Protokoll (Python 3.7.0)
from operator import add
help( add )
Help on built-in function add in module _operator:
add(a, b, /)
Same as a + b.
»signature« ⃗
Das Ergebnis von »signature« läßt die Anzahl der Argumente ebenfalls erkennen.
- Protokoll
from operator import add
from inspect import signature
signature( add )
<Signature (a, b, /)>
Das Wort „Prälat“ ⃗
Das Wort „Prälat“ (mittelhochdeutsch prēlāt(e) < mittellateinisch praelatus, = der Vorgezogene), welches in diesem Kurs für den Ausdruck ganz am Anfang eines Aufrufs verwendet wird, kommt daher, daß der Operator bei der Schreibweise mit einem Prälaten sozusagen ganz „nach vorne gezogen“ wird.
- Nachvorneziehen des Prälaten
12 + 7
|
.-----'
|
vadd( 12 , 7 )
Begriffe ⃗
Ein einstelliges aufrufbares Objekt ist ein aufrufbares Objekt, das mit einem Argument aufgerufen werden kann; ein zweistelliges (binäres ) aufrufbares Objekt ist ein aufrufbares Objekts, das mit zwei Argument aufgerufen werden kann; und so weiter.
Beispiel Ermittlung des Minimums
Das folgende Beispielprogramm ermittelt das Minimum zweier eingegebener Zahlen.
- Auswertung
min( int( input() ), int( input() ))
2
-2
-2
Mehrere print-Argumente
Ein print-Aufruf kann mehr als ein Argument haben. Mehrere Argumente werden durch ein Leerzeichen » « getrennt ausgegeben.
- Protokoll
print( 'abc', 'def' )
abc def
- Protokoll
print( 'a', 1, True, None, -56 )
a 1 True None -56
Ellipsen »...« in der Dokumentation
- Protokoll (überarbeitet, vereinfacht, gekürzt)
help( print )
print( value, ... )
In der Dokumentation deuten drei Punkt »...« an, daß für den voranstehenden Parameter mehrere Argumente angegeben werden können.
Die Dokumentation der Funktion »print« enthält beispielsweise »value, ...«. Das bedeutet, daß an dieser Stelle wiederholt ein Wert (»value«) angegeben werden kann.
Im Aufruf »print( 'abc', 'def' )« sind »'abc'« und »'def'« also jeweils Argumente für den Parameter »value«.
Weitere Beispiele ⃗
›mul‹ ⃗
Das Objekt ›mul‹ entspricht dem Multiplikationsoperator »*«.
- Protokoll
from operator import mul
mul( '2', 4 )
'2222'
mul( 2, 4 )
8
mul( 2.0, 4.0 )
8.0
›isinstance‹ ⃗
Das Objekt ›isinstance‹ ergibt bei einem Aufruf, ob der Wert des ersten Arguments verwendet werden darf, wenn ein Objekt mit dem Typ erwartet wird, der durch das zweite Argument repräsentiert wird.
Ein Objekt ist ein Exemplar eines anderen Objektes, wenn das andere Objekt der Typ des ersten Objekts ist.
- Protokoll
isinstance( True, bool )
True
Ein Objekt ist aber auch ein Exemplar eines anderen Objektes, wenn das andere Objekt ein Obertyp des Typs des ersten Objekts ist.
- Protokoll
isinstance( True, int )
True
Die Antwort bestätigt noch einmal, daß bool-Objekte auch als int-Objekte verwendet werden können, also daß der Typ »bool« ein Untertyp des Typs »int« ist.
Gleichheitszeichen und eckige Klammern in der Dokumentation
Ein Fehlwert eines Parameters ist ein Wert, der als Argumentwert angenommen wird, wenn für jenen Parameter kein Argumentausdruck angegeben wird.
Optionale Argumente werden in der Dokumentation durch Angaben eines Fehlwertes, der mit einem Gleichheitszeichen »=« hinter dem Parameternamen angegeben wird, oder durch Einschließen des zugehörigen Parameters in eckige Klammern »[« »]« oder durch beides gekennzeichnet.
Im Falle der Dokumentation der Funktion »log« aus dem Modul »math« wird dem Parameter »base« beispielsweise der Fehlwert »math.e« zugeordnet. Daran kann man erkennen, daß das Argument für jenen Parameter optional ist.
- Dokumentation der Funktion »log« aus dem Modul »math« (Stand 2018)
log(x, [base=math.e])
(»signature« liefert für die in C geschriebene Funktion »log« keine Ausgabe).
Im Falle des Beispiels der Funktion »log« aus dem Modul »math« ist der Fehlwert der Wert des Namens »e« aus dem Modul »math«, welcher in der Dokumentation als »math.e« geschrieben wird.
- Protokoll
from math import log
from math import e
log( e * e, e )
2.0
log( e * e )
2.0
log( 3 * 3 * 3 * 3, 3 )
4.0
Übungsfragen ⃖
? Übungsfrage ⃖
Welche Ausgabe erzeugt die letzte Zeile der folgende Konsoleneingabe?
- Konsoleneingabe
x = 2
print( 'x =', x )
? Übungsfrage ⃖
Welche Ausgabe erzeugt die letzte Zeile der folgende Konsoleneingabe?
- Konsoleneingabe
x = 2
print( 'x =', 'x' )
? Übungsfrage ⃖
Welche Ausgabe erzeugt die folgende Konsoleneingabe?
- Konsoleneingabe
x = int( 5 )
? Übungsfrage ⃖
Welche Ausgabe erzeugt die folgende Konsoleneingabe?
- Konsoleneingabe
x = print( 5 )
? Übungsfrage ⃖
Welche Ausgabe erzeugt die zweite Anweisung der folgenden Konsoleneingabe?
- Konsoleneingabe
x = int( 5 )
print( 'x =', x )
? Übungsfrage ⃖
Welche Ausgabe erzeugt die zweite Anweisung der folgenden Konsoleneingabe?
- Konsoleneingabe
x = print( 5 )
print( 'x =', x )
Übungsaufgaben
Zur Lösung von Übungsaufgaben dürfen ab jetzt immer alle vordefinierten Namen verwendet werden, wenn dies in der Aufgabenstellung nicht anders gesagt wird.
Hinweis für den Dozenten ► winsound folgt
/ Übungsaufgabe
Schreiben Sie einen from-Import und Aufruf derjenigen Funktion aus dem Modul »math«, deren Dokumentation im folgenden wiedergegeben ist.
- Dokumentation (frei übersetzt und überarbeitet)
pow( x, y, / )
- Ergibt die Potenz „x hoch y“.
Diese Aufgabe gilt als richtig gelöst, wenn der geschriebene Aufruf der Funktion von einer Python -Implementation ohne Fehlermeldung ausgewertet werden kann.
/ Übungsaufgabe
Schreiben Sie einen from-Import und Aufruf derjenigen Funktion aus dem Modul »operator«, deren Dokumentation im folgenden wiedergegeben ist.
- Dokumentation (frei übersetzt und überarbeitet)
mul( x, y, / )
- Ergibt das Produkt »x * y«.
Diese Aufgabe gilt als richtig gelöst, wenn der geschriebene Aufruf der Funktion von einer Python -Implementation ohne Fehlermeldung ausgewertet werden kann.
/ Übungsaufgabe
Schreiben Sie einen from-Import und Aufruf derjenigen Funktion aus dem Modul »math«, deren Dokumentation im folgenden wiedergegeben ist. Verwenden Sie möglichst Argumentwerte, bei denen Sie das Ergebnis im Kopf überprüfen können.
- Dokumentation (frei übersetzt und überarbeitet)
hypot( x, y, / )
- Ergibt die Euklidsche Norm √(x²+y²); dies ist die Länge der Strecke vom Ursprung zum Punkt (x, y).
Diese Aufgabe gilt als richtig gelöst, wenn der geschriebene Aufruf der Funktion von einer Python -Implementation ohne Fehlermeldung ausgewertet werden kann.
/ Übungsaufgabe ⃖
Versuchen Sie, mit dem Modul »winsound« einen Ton auszugeben (falls Sie unter Windows arbeiten).
Klangausgabe unter Macintosh ⃗
Verschiedene Module, wie beispielsweise »PyGame« erlauben Klangausgabe auf dem Macintosh. Sie müssen allerdings extra installiert werden.
Die Funktion ›prmonth‹ ⃗
Die Funktion ›prmonth‹ ist ein weiteres Beispiel eines reinen Wirkfunktors.
- Ein „reiner Wirkfunktor“ ist ein aufrufbares Objekt, dessen Aufruf keinen Wert hat, sondern nur eine Änderung bewirkt hat.
- Protokoll
from calendar import prmonth
prmonth( 2038, 1 )
January 2038
Mo Tu We Th Fr Sa Su
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31x = prmonth( 2038, 1 )
January 2038
Mo Tu We Th Fr Sa Su
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31print( x )
None
Hingegen ist ›month‹ ein reiner Wertfunktor.
- Protokoll
from calendar import month
x = month( 2038, 1 )
print( x )
January 2038
Mo Tu We Th Fr Sa Su
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31