Arrêtez de surutiliser * args et ** kwargs en Python

Photo de Matthew Henry sur Unsplash
Photo de Matthew Henry sur Unsplash

Qu'il y ait holivar! Utiliser args / kwargs ou ne pas utiliser, est-ce un indicateur de professionnalisme ou de connaissances de base, sans lequel il faudrait avoir honte? Souvent, en parcourant le github de divers projets, vous rencontrez la présence de ces arguments dans les fonctions simplement parce que. Et cet article m'a incité à parler de ce sujet. En général, j'essaie de ne pas utiliser d'argumentation incontrôlée dans la pratique, mais quelle est la fréquence de cette méthode de programmation? Partagez dans les commentaires. Et bonne lecture.






, *args



**kwargs



Python. , , . , .





!





. , , , .





?






Python :





  • , .





  • , .





def foo(start, end):
    print(start, end)
      
      



, foo ('Hi', end = 'Bye!')



"Hi"



"Bye!"



, end



foo



. ; , , . .





*args



. *



- . .





def foo(*args):
    print(type(args))
    for arg in args:
        print(arg)
        
foo(1, 2, 'end')

# <class 'tuple'>
# 1
# 2
# end
      
      



, **kwargs



. , .





def foo2(**kwargs):
    print(type(kwargs))
    for keyword, value in kwargs.items():
        print(f'{keyword}={value}')
        
foo2(a=1, b=2, z='end')

# <class 'dict'>
# a=1
# b=2
# z=end
      
      



Photo de Susan Holt Simpson sur Unsplash
Photo by Susan Holt Simpson on Unsplash

*args



**kwargs



. , ?





, , , .





, . - Python






- ?

: , . , , . , , , , , ..





, *args



/ **kwargs



, , , .





, . , , .





, Python , , , .





Photo par Alexander Schimmeck sur Unsplash
Photo by Alexander Schimmeck on Unsplash

Dans l'exemple suivant, nous en créons



un qui renvoie le nom de la fonction en cours d'exécution en tant que vérification de l'état. Le décorateur est appliqué à la fonction en utilisant @trace



au-dessus de la fonction comme indiqué ci-dessous. Puisque nous voulons appliquer ce décorateur à n'importe quelle fonction avec n'importe quel nombre d'arguments, nous devons utiliser *args



et **kwargs



.





def trace(func):
    def print_in(*args, **kwargs):
        print('Executing function', func.__name__)
        return func(*args, **kwargs)
    return print_in
  
@trace
def calc(a,b):
    print(f'a+b is {a+b}, a-b is {a-b}.')  

calc(1,2)
# Executing function calc
# a+b is 3, a-b is -1.

@trace
def add_all(*args):
    print(reduce(lambda a,b:a+b, args))

a = add_all(1,2,3,4,5)
# Executing function add_all
# 15
      
      




conclusions

Évitez-les si possible.





Notez que args



et kwargs



sont ainsi appelés simplement par accord. Vous pouvez les appeler comme vous voulez. Ce sont les étoiles *



qui **



donnent aux fonctions ce pouvoir même.








All Articles