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
*args
**kwargs
. , ?
, , , .
, . - Python
- ?
: , . , , . , , , , , ..
, *args
/ **kwargs
, , , .
, . , , .
, Python , , , .
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.