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