Heim  >  Artikel  >  Backend-Entwicklung  >  Verstehen Sie *args und **kwargs von s-Variablenparametern in Python

Verstehen Sie *args und **kwargs von s-Variablenparametern in Python

高洛峰
高洛峰Original
2016-11-22 17:41:441556Durchsuche

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


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Aufzählungstypen in PythonNächster Artikel:Aufzählungstypen in Python