Il s'agit d'un mémo écrit du livre efficace python d'O'Reilly Japon. https://www.oreilly.co.jp/books/9784873117560/ P44~47
Les arguments positionnels aux fonctions python peuvent être passés par mots-clés ainsi qu'en attribuant directement des valeurs. Vous pouvez également utiliser des arguments de mot-clé pour transmettre des valeurs à la fonction dans n'importe quel ordre.
def remainder(number, divisor):
    return number % divisor
print(remainder(20, 7)                   #Passage normal par valeur
print(remainder(20, divisor=7))          #Attribuer au deuxième argument
print(remainder(number=20, divisor=7))   #Attribuer aux deux arguments
print(remainder(divisor=7, number=20))   #Remplacer en échangeant des arguments
>>>
6
6
6
6
Cependant, l'argument positionnel doit précéder l'argument mot-clé
print(remainder(number=20, 7))
>>>
  File "<ipython-input-15-fb0a3eb0541d>", line 1
    print(remainder(number=20, 7))
                              ^
SyntaxError: non-keyword arg after keyword arg
De plus, chaque argument ne peut être utilisé qu'une seule fois.
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'
** Les arguments de mots-clés présentent trois avantages **
** Envisagez un programme pour calculer le débit de liquide ** Calculez le montant qui coule par heure
# 2.Vous pouvez définir des valeurs par défaut dans la définition de fonction
def flow_rate(weight_diff, time_diff, period=1): #Définir la valeur par défaut pour la période
    return(weight_diff / time_diff) * period
weight_diff = 0.5
time_diff = 3
flow_per_second = flow_rate(weight_diff, time_diff)  #Valeur par défaut pour la période
flow_per_hour = flow_rate(weight_diff, time_diff, period=3600)   #Changer la valeur de la période
print('%.3f kg per secound' % flow_per_second) #Quantité qui coule par seconde
print('%.3f kg per hour' % flow_per_hour)           #Montant qui coule par heure
>>>
0.167 kg per secound
600.000 kg per hour
#3.Les fonctions peuvent être étendues tout en conservant la compatibilité descendante
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 est une extension de flow_rate, mais il est rétrocompatible avec flow_rate. Cependant, lors du remplacement par un argument positionnel, si l'ordre de période et units_per_kg est incorrect, le calcul sera incorrect. Dans ce cas, il est important d'utiliser autant que possible des arguments de mot-clé au lieu d'arguments de position.
Recommended Posts