Hören Sie auf, * args und ** kwargs in Python zu überbeanspruchen

Foto von Matthew Henry auf Unsplash
Foto von Matthew Henry auf Unsplash

Lass es holivar geben! Args / kwargs zu verwenden oder nicht zu verwenden, ist es ein Indikator für Professionalität oder Grundkenntnisse, ohne die Sie sich schämen sollten? Wenn Sie häufig durch den Github verschiedener Projekte blättern, stoßen Sie auf das Vorhandensein dieser Argumente in Funktionen, einfach weil. Und dieser Artikel veranlasste mich, über dieses Thema zu sprechen. Im Allgemeinen versuche ich, in der Praxis keine unkontrollierte Argumentation zu verwenden, aber wie häufig ist diese Programmiermethode? Teilen Sie in den Kommentaren. Und viel Spaß beim Lesen.






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



Foto von Susan Holt Simpson auf Unsplash
Photo by Susan Holt Simpson on Unsplash

*args



**kwargs



. , ?





, , , .





, . - Python






- ?

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





, *args



/ **kwargs



, , , .





, . , , .





, Python , , , .





Foto von Alexander Schimmeck auf Unsplash
Photo by Alexander Schimmeck on Unsplash

Im folgenden Beispiel erstellen wir



eine, die den Namen der Funktion ausgibt, die als Integritätsprüfung ausgeführt wird. Der Dekorator wird wie @trace



oben gezeigt über der Funktion auf die Funktion angewendet . Da wir diesen Dekorator auf jede Funktion mit einer beliebigen Anzahl von Argumenten anwenden möchten, müssen wir *args



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




Schlussfolgerungen

Vermeiden Sie sie wenn möglich.





Beachten Sie das args



und kwargs



werden einfach nach Vereinbarung so genannt. Sie können sie anrufen, wie Sie wollen. Es sind die Sterne *



, **



die den Funktionen diese Kraft verleihen.








All Articles