Argumente in Python (Argumente in Python), Lektion, Seite 723904
https://www.purl.org/stefan_ram/pub/argumente_python (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Python-Kurs

Argumente in Python 

Einführendes Beispiel

Wir hatten schon den Vorzeichenoperator »-« behandelt.

Auswertung
-9
-9

Wie wir wissen, kann der Operand auch eingeklammert werden.

Auswertung
-( 9 )
-9

An Stelle des Vorzeichenoperators »-« kann auch das Wort »neg« geschrieben werden.

Protokoll

from operator import neg

neg( 9 )

-9

Auch auf diese Weise wird ein Vorzeichenwechsel vollzogen. Dabei steht an der Stelle des Operators »-« nun das Wort »neg«. Während »-9« eine Anwendung des Operators »-« auf den Operanden »9« ist, wird »neg( 9 )« als Aufruf der Funktion »neg« mit dem Argumentausdruck »9« bezeichnet.

Die Information über den Wert des Argumentausdrucks wird an die aufgerufene Funktion weitergegeben, damit sie diese verwenden kann, um eine Aufgabe zu erledigen.

Der Aufruf entspricht dem Genitiv »neg( 9 )« = „das Negative der Zahl 9“ oder einer „von“-Konstruktion „das Negative von 9“.

Argumente

Beim Aufruf mancher Objekte kann oder muß in den für den Aufruf verwendeten Klammern ein Ausdruck geschrieben werden, der Argumentausdruck  genannt wird. Im Aufruf »neg( 9 )« ist »9« der Argumentausdruck.

Der Wert des Argumentausdrucks wird Argumentwert  genannt (oben: »9«).

Wenn wir von einem Argument  sprechen, meinen wir damit den Argumentausdruck.

Aufruf mit Argument
neg( 9 )
Aussprache
ausführlich: Aufruf der Funktion „neg“ mit dem Argument „Neun“
kurz: „neg“ von  Neun
hier auch möglich (aber weniger eindeutig): das Negative von Neun

Man beachte den Gebrauch des Wortes „von“ zur Kennzeichnung des Arguments eines Aufrufs bei der mündlichen Aussprache: »neg( 9 )« wird oft als „‚neg‘ von  Neun“ gesprochen.

Sprechweisen

Aufruf mit Argument
neg( 9 )
Sprechweisen
(die Funktion) »neg« wird mit  Neun aufgerufen
(die Funktion) »neg« wird auf  Neun angewendet
(die Funktion) »neg« wird auf  Neun aufgerufen
(der Funktion) »neg« wird das Argument Neun übergeben
(die Funktion) »neg« akzeptiert Neun (als Argument)
»neg« (von) Neun
(hier) „das Negative von Neun“
(hier) „der Wert der Funktion »neg« an der Stelle Neun“

Parameter

Man stellt sich vor, daß es innerhalb der Funktion »neg« eine Speicherstelle gibt, in die bei einem Aufruf der Wert des Arguments geschrieben wird. Diese Speicherstelle wird als Parameter  bezeichnet.

Die Funktion »neg« mit Parameter (Sinnbild)
.---------.
| neg |
| .-----. |
| | | |
| '-----' |
'---------'

Inkarnationen

Ein aufrufbares Objekt, in deren Parameter ein Argumentwert geschrieben wurde, wird als eine Inkarnation  (des aufrufbaren Objektes) bezeichnet.

Eine Inkarnation der Funktion »neg« (Sinnbild)
.---------.
| neg |
| .-----. |
| | 9 | |
| '-----' |
'---------'

Eine Inkarnation kann wie ein Programm gestartet werden.

Bei der Auswertung des Aufrufs »neg( 9 )« wird die Funktion ›neg‹ mit dem Argumentwert «9» inkarniert und die erhaltene Inkarnation wird dann gestartet.

Da manchmal mehrere Inkarnationen desselben aufrufbaren Objektes gleichzeitig benötigt werden, wird bei der Herstellung einer Inkarnation praktisch jedesmal ein neues Objekt  angelegt, das aus einem Verweis auf das aufrufbare Objekt und dem Objekt, das die Auswertung des Argumentausdrucks ergab, besteht.

Kurz gesagt Eine Inkarnation  ist eine Verbindung eines aufrufbaren Objekts mit einem Argumentobjekt.

Syntax

In der Syntax erscheint das Argument als ein Ausdruck, der in den Klammern vorkommen darf.

Syntax
Aufruf
.-----------------. .-. .----------. .-.
--->| Primaerausdruck |--->( ( )---.--->| Ausdruck |---.--->( ) )--->
'-----------------' '-' | '----------' ^ '-'
'-------------------'
Praelat Argumentausdruck

Anforderungen

Der Wert des Primärausdrucks  muß ein aufrufbares Objekt  sein, das einen Aufruf mit einem Argumentausdruck gestatten muß, falls ein Argumentausdruck angegeben wurde, oder einen Aufruf ohne ein Argument gestatten muß, falls kein Argumentausdruck angegeben wurde.

(Ob ein aufrufbares Objekt einen Aufruf mit einem Argumentausdruck oder ohne ein Argumentausdruck gestattet, kann man in der Dokumentation nachlesen.)

Semantik

Die Semantik eines Aufrufs ohne Argumentausdruck wurde schon behandelt.

Bei der Auswertung eines Aufrufs mit einem Argumentausdruck wird zuerst der Primärausdruck  und dann der Ausdruck  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 des Ausdrucks ergibt ein Objekt. Alsdann wird eine Inkarnation  (Verbindung) des aufrufbaren Objekts mit dem Objekt hergestellt und gestartet. Diese legt dann den Wert des Aufrufes  fest.

Typerwartungen

Wenn ein Argument vom Typ ›int‹ erwartet wird, so kann auch ein Argument vom Typ ›bool‹ angegeben werden («True» steht dann für «1» und «False» für «0»).

Ansonsten hängt es von der jeweiligen Funktion ab, wie Argumente behandelt werden, deren Typ anders als erwartet ist. Man kann davon ausgehen, daß ein Argument vom Typ ›int‹, das nicht zu groß ist, in der Regel akzeptiert und umgewandelt wird, wenn ein Argument vom Typ ›float‹ erwartet wird.

Anmerkungen

Komplexe Argumentausdrücke

Argumentausdrücke können beliebige  Ausdrücke sein (wenn nicht in Einzelfällen zusätzliche Anforderungen, etwa an den Typ des Argumentwertes, dagegenstehen).

So kann ein Argumentausdruck wie in dem folgenden Beispiel, eine Summe  sein.

Auswertung
neg( 4 + 3 )
-7

Durch einen Operatorausdruck als Argumentausdruck können wir den Unterschied zwischen einem Argumentausdruck  und seinem Wert  (dem Argumentwert) verdeutlichen: Der Argumentausdruck  in »neg( 4 + 3 )« ist »4 + 3«, der Argumentwert  ist «7».

Da „Argument“ alleine „Argumentausdruck“ bedeutet, ist das Argument in »neg( 4 + 3 )« also »4 + 3« (und nicht «7»).

Die Bezeichnung „Argumentausdruck“ gehört zur Syntax, die Bezeichnung „Argumentwert“ zur Semantik.

Formatierung

In diesem Kurs werden Leerzeichen nach einer öffnenden »(« und vor einer schließenden Klammer »)« verwendet, obwohl dies so nicht  allgemein üblich ist und nicht  von der Stilfibel PEP 8  empfohlen wird. Das folgende Beispiel zeigt die Schreibweise ohne  jene Leerzeichen. Es könnte der Eindruck entstehen, daß die »4« eher zu »neg(« gehört als zu »+«. Um solch einen Eindruck zu vermeiden, werden in diesem Kurs zusätzliche Leerzeichen auf der Innenseite von Klammern verwendet.

Quelltext ohne Leerzeichen auf der Innenseite von Klammern (PEP 8 )
neg(4 + 3)
Quelltext ohne Leerzeichen auf der Innenseite von Klammern (PEP 8 ) (übertrieben dargestellt)
neg(4       +       3)
Quelltext mit Leerzeichen auf der Innenseite von Klammern (oft in diesem Kurs zu finden)
neg( 4 + 3 )

Übungsfragen

Wir setzen bei den folgenden Übungen geeignete Importe  voraus.

Importe

from math import floor

from random import random

from operator import neg

?   Übungsfrage

Die Funktion »abs« aus dem Modul »builtins« ergibt den Betrag ihres Argumentwertes. Der Betrag einer Zahl ist ihr Abstand von «0».

Wie spricht man den Ausdruck »abs( 2 )« aus und welchen Wert hat er?

?   Übungsfrage

Die Funktion »neg« aus dem Modul »operator« ergibt das Negative ihres Argumentwertes.

Wie spricht man den Ausdruck »neg( 2 )« aus und welchen Wert hat er?

?   Ausdrücke lesen

Aussprachehinweis
floor ˈflɔɚ

Was ist der Argumentausdruck  in dem Aufrufausdruck »floor( 2 + 3.2 )«?

Was ist der Argumentwert  in dem Aufrufausdruck »floor( 2 + 3.2 )«?

?   Ausdrücke lesen (1)

Was ist der Argumentausdruck in dem Aufrufausdruck »floor( random() * 4 )«?

Welche Werte kann dieser Argumentausdruck haben?

Die Boden-Funktion »floor« (»from math import floor«) ergibt die Abrundung  des Wertes ihres Argumentausdrucks zur nächsten darunterliegenden ganzen Zahl (genauergesagt: zur größten ganzen Zahl, die nicht größer als der Argumentwert ist, die sogenannte „untere Gaußklammer “). Beispielsweise sind »floor( 5.0 )« und »floor( 5.7 )« beide gleich «5» (vom Typ ›int‹), während »floor( 4.99 )« gleich «4» ist.

Welche Werte kann der Aufrufausdruck »floor( random() * 4 )« haben?

?   Ermittlung von Operanden ⃗

Kann es eine Funktion »f« geben, die wie in den folgenden Beispielen gezeigt, den linken Operanden  ihres Argumentausdrucks ergibt?

Auswertung
f( 1 + 3 )
1
Auswertung
f( 2 + 2 )
2
Auswertung
f( 3 + 1 )
3

Übungsaufgaben

Ab jetzt dürfen bei allen Übungsaufgaben auch passende Funktionen aus der Dokumentation herausgesucht  und verwendet werden, selbst wenn sie noch nicht im Kurs vorgestellt wurden. Ausgenommen davon sind lediglich Übungsaufgaben, bei denen ausdrücklich Gegenteiliges gesagt wird. Jedoch gibt es im Kurs nur relativ wenige Aufgaben, bei denen es unbedingt nötig ist, etwas selber herauszusuchen. Dies kann immer dann in Erwägung gezogen werden, wenn man mit den bisher vorgestellten Mitteln keinen Weg zur Lösung einer Aufgabe sieht.

/   Übungsaufgabe

Schreiben Sie einen Aufruf der Boden-Funktion »floor« mit dem Argumentausdruck »1.1 + 7.0«. Die Formatierung (Verwendung von Leerzeichen) können Sie dabei selber festlegen.

/   Übungsaufgabe

Zur Lösung dieser Aufgabe soll die Funktion »random« aus dem Modul »random« verwendet werden. Andere Funktionen dürfen bei der Lösung dieser Aufgabe nicht  verwendet werden.

Schreiben Sie einen Ausdruck, der bei jeder Auswertung eine ganze Zahl, die entweder 0 oder 1 ist, ergibt. Die Wahrscheinlichkeit für jeden der beiden Werte soll näherungsweise gleich groß sein.

(In der Lösung dieser Aufgabe darf auch »floor« verwendet werden.)

/   Übungsaufgabe ⃗

Schreiben Sie einen Ausdruck, der bei jeder Auswertung eine ganze Zahl zwischen 1 (einschließlich) und 6 (einschließlich) ergibt. Die Wahrscheinlichkeit für jeden der 6 Werte soll näherungsweise gleich groß sein.

(In der Lösung dieser Aufgabe darf auch »floor« verwendet werden.)

 

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram723904 stefan_ram:723904 Argumente in Python Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723904, slrprddef723904, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/argumente_python