Heim > Artikel > Backend-Entwicklung > Verstehen Sie *args und **kwargs von s-Variablenparametern in Python
Variable Parameter mit Standardparametern
Python unterstützt variable Parameter, zum Beispiel:
def test_defargs(one, two = 2): print 'Required argument: ', one print 'Optional argument: ', two test_defargs(1) # result: # Required argument: 1 # Optional argument: 2 test_defargs(1, 3) # result: # Required argument: 1 # Optional argument: 3
Verwenden Sie beim Definieren einer Funktion *args und **. kwargs
Natürlich geht es in diesem Artikel hauptsächlich um eine Methode zum Erreichen variabler Parameter (variables Argument): Verwendung der Syntax *args und **kwargs. Unter diesen ist *args eine Liste variabler Positionsargumente und **kwargs eine Liste variabler Schlüsselwortargumente. Außerdem müssen *args vor **kwargs stehen, da Positionsargumente vor Schlüsselwortargumenten stehen müssen.
Stellen Sie zunächst die grundlegende Verwendung der beiden vor.
Das folgende Beispiel verwendet *args und enthält einen erforderlichen Parameter:
def test_args(first, *args): print 'Required argument: ', first for v in args: print 'Optional argument: ', v test_args(1, 2, 3, 4) # result: # Required argument: 1 # Optional argument: 2 # Optional argument: 3 # Optional argument: 4
Das folgende Beispiel verwendet *kwargs und enthält einen erforderlichen Parameter und eine *args-Liste:
def test_kwargs(first, *args, **kwargs): print 'Required argument: ', first for v in args: print 'Optional argument (*args): ', v for k, v in kwargs.items(): print 'Optional argument %s (*kwargs): %s' % (k, v) test_kwargs(1, 2, 3, 4, k1=5, k2=6) # results: # Required argument: 1 # Optional argument (*args): 2 # Optional argument (*args): 3 # Optional argument (*args): 4 # Optional argument k2 (*kwargs): 6 # Optional argument k1 (*kwargs): 5
Verwenden Sie beim Aufrufen einer Funktion *args und **kwargs
Die Syntax *args und **kwargs kann nicht nur in Funktionsdefinitionen, sondern auch beim Aufrufen von Funktionen verwendet werden. Der Unterschied besteht darin, dass, wenn die Verwendung von *args und **kwargs an der Stelle, an der die Funktion definiert ist, ein Prozess zum Packen von Parametern ist, es sich beim Aufruf der Funktion um einen Prozess zum Entpacken von Parametern handelt. Lassen Sie uns ein Beispiel verwenden, um unser Verständnis zu vertiefen:
def test_args(first, second, third, fourth, fifth): print 'First argument: ', first print 'Second argument: ', second print 'Third argument: ', third print 'Fourth argument: ', fourth print 'Fifth argument: ', fifth # Use *args args = [1, 2, 3, 4, 5] test_args(*args) # results: # First argument: 1 # Second argument: 2 # Third argument: 3 # Fourth argument: 4 # Fifth argument: 5 # Use **kwargs kwargs = { 'first': 1, 'second': 2, 'third': 3, 'fourth': 4, 'fifth': 5 } test_args(**kwargs) # results: # First argument: 1 # Second argument: 2 # Third argument: 3 # Fourth argument: 4 # Fifth argument: 5
Die Verwendung von *args und **kwargs kann sehr praktisch sein, um Funktionen zu definieren, und kann auch die Skalierbarkeit für die zukünftige Codepflege verbessern.
Beispiel
def foo(*args, **kwargs): print('args = ', args) print('kwargs = ', kwargs) print('---------------------------------------') if __name__ == '__main__': foo(1,2,3,4) foo(a=1,b=2,c=3) foo(1,2,3,4, a=1,b=2,c=3) foo('a', 1, None, a=1, b='2', c=3)
Hinweis
Hinweis: Beim Definieren oder Aufrufen dieser Art von Funktion müssen die folgenden Regeln befolgt werden:
Variablenparameter müssen innerhalb der liegen unveränderliche Parameter Danach ist
*args eine Liste variabler Positionsargumente und **kwargs eine Liste variabler Schlüsselwortargumente. Und *args müssen vor **kwargs stehen, da Positionsargumente vor Schlüsselwortargumenten stehen müssen