Effektives Python-Memo-Element 19 Geben Sie Schlüsselwortargumenten optionales Verhalten

Es ist ein Memo-Schreiben des Buches effektive Python von O'Reilly Japan. https://www.oreilly.co.jp/books/9784873117560/ P44~47

Sie können schönen Code schreiben, indem Sie das Verhalten von Positionsargumenten und Schlüsselwortargumenten verstehen.

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 **

  1. Klären Sie die Übergabe von Argumenten an Funktionen für Erstleser
  2. Sie können den Standardwert in der Funktionsdefinition festlegen
  3. Funktionen können erweitert werden, während die Abwärtskompatibilität erhalten bleibt

** 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

Effektives Python-Memo-Element 19 Geben Sie Schlüsselwortargumenten optionales Verhalten
Effektives Python-Memo Punkt 3
Effektives Python-Memo-Element 18 Verwenden Sie Positionsargumente variabler Länge, um das Erscheinungsbild sauberer zu gestalten
Effektives Python-Memo Element 11 Verwenden Sie zip, um Iteratoren parallel zu verarbeiten
Effektives Python-Memo Punkt 10 Aufzählung aus der Reichweite
EP19 Optionales Verhalten mit Schlüsselwortargumenten bereitstellen
Ich möchte mich mit Schlüsselwortargumenten von Python merken
[Einführung in Udemy Python3 + Application] 53. Wörterbuch der Schlüsselwortargumente
[Einführung in Udemy Python3 + Application] 50. Positionsargumente, Schlüsselwortargumente und Standardargumente
Schlüsselwortargumente für Python-Funktionen
Effektiver Python-Hinweis Punkt 17 Respektieren Sie die Sicherheit, wenn Sie Iteratoren für Argumente verwenden
Effektiver Python-Hinweis Punkt 15 Wissen, wie sich Schließungen auf den Funktionsumfang beziehen
[Nanonets] Wie poste ich Memo [Python]
Effektives Python-Memo Element 7 Verwenden Sie die Listeneinschlussnotation anstelle von Karte und Filter
Effektives Python-Memo-Element 8 Vermeiden Sie drei oder mehr Ausdrücke in der Listeneinschlussnotation
Konvertieren Sie Memos sofort mit Python 2to3
[Python / Tkinter] Übergeben von Argumenten an den Befehl