Kennwortargumente in Python
»int«
Das Aufrufbare »int« (d.h., „das aufrufbare Objekt »int«“) kann mit zwei Argumenten aufgerufen, falls das erste Argument eine Zeichenfolge ist. Dann wird das zweite Argument als Basis interpretiert.
- Auswertung
int( "20", 16 )
32
Im Zahlensystem zur Basis 16 hat die zweite Stelle von rechts den Stellenwert 16, daher bedeutet »20« dort 32.
Zur Verdeutlichung der Bedeutung kann das zweite Argument mit »base« etikettiert werden. (»base=16« ist an dieser Stelle keine Bindungsanweisung.)
- Auswertung
int( "20", base=16 )
32
Solch eine Etikettierung sollte ohne Leerzeichen um das Gleichheitszeichen geschrieben werden.
- Konsolenprotokoll (vereinfacht)
help( int )
int(x, base=10)
Solch eine Etikettierung ist nicht bei allen Aufrufbaren (d.h., „aufrufbaren Objekten“) möglich. Insbesondere bei in C geschriebenen Aufrufbaren ist sie oft nicht möglich.
Solch ein Argument, das mit einem Parameternamen etikettiert ist, nennen wir auch Kennwortargument .
›leapdays‹ – die Etikettierung von Positionsargumenten
Argumente, die normalerweise nicht durch ihre Etikettierung, sondern durch ihre Position angegeben werden (wie bisher im Kurs), bezeichnet man auch als Positionsargumente.
Positionsargumente können bei manchen Funktionen mit dem entsprechenden Parameternamen etikettiert werden. Nicht möglich ist dies bei Funktionen, die nicht in Python geschrieben wurden.
- Auswertung (überarbeitet und übersetzt)
from calendar import leapdays
help( leapdays )
Kurzbeschreibung der Funktion "leapdays" des Moduls "calendar":
leapdays( y1, y2 )
Ergibt die Anzahl der Schaltjahre im Bereich zwischen y1,
einschließlich, und y2, außschließlich.Hierbei ist y1 kleiner als oder gleich y2.
- Auswertung
leapdays( y1=1900, y2=2000 )
24
leapdays( y2=2000, y1=1900 )
24
leapdays( 1900, 2000 )
24
leapdays( 2000, 1900 )
-24
Stilregel Es ist üblich, bei der Angabe gekennzeichneter Argumente keine Leerzeichen um das Gleichheitszeichen »=« zu setzen.
Wenn in der Dokumentation „eingebaut“ (»built-in«) fehlt, wurde die Funktion in Python programmiert. Dann können Kennwortargumente für alle Argumente verwendet werden.
Die Verwendung von Kennwortargumeten erhöht die Lesbarkeit (Verständlichkeit) des Quelltextes. Deswegen sollte diese Schreibweise besonders bei Aufrufen mit mehreren Argumenten bevorzugt verwendet werden.
Der Schrägstrich »/«
Die Funktion ›sin‹ ist „eingebaut“ (»built-in«); sie wurde also in C programmiert. Bei solchen Funktionen findet man oft reine Positionsparameter, die nicht mit einem Etikett versehen werden können.
Ein Positionsargument ist ein Argument ohne vorangestelltes Kennwort. Die Bedeutung von Positionsargumenten wird nur durch ihre die Position in der Argumentliste gegeben.
Ein Positionsparameter ist ein Parameter, dessen Wert durch ein Positionsargument festgelegt werden kann.
Ein reiner Positionsparameter ist ein Parameter, dessen Wert nur durch ein Positionsargument festgelegt werden kann, aber nicht durch ein Kennwortargument.
Parameter, die in der Erklärung vor einem Schrägstrich »/« stehen, können nicht zur Kennzeichnung von Argumenten verwendet werden. Sie sind reine Positionsparameter.
- Protokoll
from math import sin
help( sin )
Help on built-in function sin in module math:
sin(x, /)
Return the sine of x (measured in radians).
sin( x=2 )
TypeError: sin() takes no keyword arguments
In einem Aufruf, in dem sowohl Positionsargumente als auch Kennwortargumente angegeben werden sollen, sind zuerst alle Positionsargumente anzugeben und danach alle Kennwortargumente. (Unbeschadet der Möglichkeit, daß gewisse Argumente entfallen können.)
Die Kennzeichnung der Art von Parametern mit einem Schrägstrich »/« wird seit Python 3.5 in die Dokumentation einiger Python -Versionen eingebaut. Sie ist jedoch nicht bei allen Python -Implementationen zu finden und auch nicht für alle Teile der Dokumentation umgesetzt. Wenn man also eine Funktionsdokumentation ohne einen Schrägstrich sieht, so sagt dieses Fehlen des Schrägstriches also nichts darüber aus, welche Parameter der Funktion Positionsparameter und welche Kennwortparameter sind.
Der Schrägstrich »/« trennt die vor ihm stehenden reinen Positionsparameter von den ihm folgenden Kennwortparametern.
Reine Kennwortparameter (Optionen)
Es gibt auch reine Kennwortargumente, die mit einem Kennwort angegeben werden müssen. Sie finden sich in der Dokumentation hinter solche Parametern, zu denen keine bestimmte Zahl von Argumenten gehört, die für alle Aufrufe gleich ist – also beispielsweise hinter Parametern, zu denen die Argumente auch entfallen oder wiederholt werden können. (Die reinen Kennwortparameter sind nicht die mit einem Stern gekennzeichneten Parameter selber, sondern die dahinterstehenden !)
Beim aufrufbaren Objekt »(print)« sind beispielsweise ›sep‹ und ›end‹ reine Kennwortparameter, da sie auf »…« folgen. Das heißt, Werte für diese Parameter können nur mit der Kennwortschreibweise angegeben werden.
- Protokoll
help( print )
Help on built-in function print in module builtins:
print(...)
print(value, ..., sep=' ', file=sys.stdout, flush=False)
Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file: a file-like object (stream); defaults to the current sys.stdout.
sep: string inserted between values, default a space.
flush: whether to forcibly flush the stream.
»sep=« – Trennung von Ausgaben einzelner Argumente
Das sep-Argument gibt an, wie die einzelnen Ausgaben mehrerer Positionsargumenten getrennt werden sollen. Voreingestellt ist dafür ein Leerzeichen » «.
- Protokoll
print( 'a', 1, True, None, -56 )
a 1 True None -56
- Protokoll
print( 'a', 1, True, None, -56, sep=', ' )
a, 1, True, None, -56
- Protokoll
print( 'a', 1, True, None, -56, sep='\n' )
a
1
True
None
-56
Der Fehlwert von »sep« ist «' '» (Leerzeichen).
- Protokoll
print( 2, 2 )
2 2
Übungsfragen ⃖
Bei der Beantwortung der folgenden Übungsfragen soll in der Antwort jedes ausgegebene Zeichen einzeln genannt werden.
? Übungsfrage ⃖
Welche Ausgabe erzeugt die Ausführung der folgenden Anweisung?
- Anweisung
print()
? Übungsfrage ⃖
Welche Ausgabe erzeugt die Ausführung der folgenden Anweisung?
- Anweisung
print( ' ' )
? Übungsfrage ⃖
Welche Ausgabe erzeugt die Ausführung der folgenden Anweisung?
- Anweisung
print( sep=',' )
? Übungsfrage ⃖
Welche Ausgabe erzeugt die Ausführung der folgenden Anweisung?
- Anweisung
print( ' ', sep=',' )
? Übungsfrage ⃖
Welche Ausgabe erzeugt die Ausführung der folgenden Anweisung?
- Anweisung
print( ',',',', sep=',' )