Es ist ein Memo-Schreiben des Buches effektive Python von O'Reilly Japan. https://www.oreilly.co.jp/books/9784873117560/ P44~47
Positionsargumente für Python-Funktionen können sowohl über Schlüsselwörter als auch durch direkte Zuweisung von Werten übergeben werden. Sie können auch Schlüsselwortargumente verwenden, um Werte in beliebiger Reihenfolge an die Funktion zu übergeben.
def remainder(number, divisor):
return number % divisor
print(remainder(20, 7) #Normaler Übergabewert
print(remainder(20, divisor=7)) #Weisen Sie dem zweiten Argument zu
print(remainder(number=20, divisor=7)) #Weisen Sie beiden Argumenten zu
print(remainder(divisor=7, number=20)) #Ersetzen Sie durch Austausch von Argumenten
>>>
6
6
6
6
Das Positionsargument muss jedoch vor dem Schlüsselwortargument stehen
print(remainder(number=20, 7))
>>>
File "<ipython-input-15-fb0a3eb0541d>", line 1
print(remainder(number=20, 7))
^
SyntaxError: non-keyword arg after keyword arg
Außerdem kann jedes Argument nur einmal verwendet werden.
print(remainder(20, number=7))
>>>
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-16-aa02190f8263> in <module>()
----> 1 print(remainder(20, number=7))
TypeError: remainder() got multiple values for argument 'number'
** Keyword-Argumente haben drei Vorteile **
** Betrachten Sie ein Programm zur Berechnung des Durchflusses von Flüssigkeit ** Berechnen Sie die pro Stunde fließende Menge
# 2.Sie können Standardwerte in der Funktionsdefinition festlegen
def flow_rate(weight_diff, time_diff, period=1): #Legen Sie den Standardwert für den Zeitraum fest
return(weight_diff / time_diff) * period
weight_diff = 0.5
time_diff = 3
flow_per_second = flow_rate(weight_diff, time_diff) #Standardwert für Periode
flow_per_hour = flow_rate(weight_diff, time_diff, period=3600) #Ändern Sie den Wert der Periode
print('%.3f kg per secound' % flow_per_second) #Fließende Menge pro Sekunde
print('%.3f kg per hour' % flow_per_hour) #Fließende Menge pro Stunde
>>>
0.167 kg per secound
600.000 kg per hour
#3.Funktionen können erweitert werden, während die Abwärtskompatibilität erhalten bleibt
def flow_rate2(weight_diff, time_diff,
period=1, units_per_kg=1):
return ((weight_diff * units_per_kg) / time_diff) * period
pounds_per_hour = flow_rate2(weight_diff, time_diff,
period=3600, units_per_kg=2.2)
print('%.3f pounds per secound' % pounds_per_hour)
>>>
1320.000 pounds per secound
flow_rate2 ist eine Erweiterung von flow_rate, aber abwärtskompatibel mit flow_rate. Wenn jedoch beim Ersetzen durch ein Positionsargument die Reihenfolge von Periode und Einheiten_per_kg falsch ist, ist die Berechnung falsch. In diesem Fall ist es wichtig, möglichst viele Schlüsselwortargumente anstelle von Positionsargumenten zu verwenden.
Recommended Posts