Élément de mémo Python efficace 19 Donner un comportement facultatif aux arguments de mot-clé

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

Vous pouvez écrire un beau code en comprenant le comportement des arguments de position et des arguments de mots-clés.

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

  1. Clarifier le passage des arguments aux fonctions pour les lecteurs de source débutants
  2. Vous pouvez définir la valeur par défaut dans la définition de fonction
  3. Les fonctions peuvent être étendues tout en maintenant la compatibilité descendante

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

Élément de mémo Python efficace 19 Donner un comportement facultatif aux arguments de mot-clé
Élément de mémo Python efficace 3
Élément de mémo Python efficace 18 Utilisez des arguments de position de longueur variable pour rendre l'apparence plus propre
Élément de mémo Python efficace 11 Utilisez zip pour traiter les itérateurs en parallèle
Mémo Python efficace Élément 10 Énumérer à partir de la plage
EP19 Fournir un comportement facultatif avec des arguments de mot-clé
Je veux mémoriser, y compris les arguments de mots clés de Python
[Introduction à Udemy Python3 + Application] 53. Dictionnaire des arguments de mots-clés
[Introduction à Udemy Python3 + Application] 50. Arguments de position, arguments de mots-clés et arguments par défaut
Arguments de mots-clés pour les fonctions Python
Point 17 de la note Python efficace Respect de la certitude lors de l'utilisation d'itérateurs pour les arguments
Note Python efficace Item 15 Savoir comment les fermetures sont liées à la portée de la fonction
[Nanonets] Comment publier un mémo [Python]
Élément de mémoire Python efficace 7 Utilisez la notation d'inclusion de liste au lieu de la carte et du filtre
Élément de mémo Python efficace 8 Évitez trois expressions ou plus dans la notation d'inclusion de liste
Convertir un mémo à la fois avec Python 2to3
[Python / Tkinter] Comment passer des arguments à la commande