Explicar argumentos de solo palabras clave (VarArgs) en Python

Por favor, consulte el siguiente código: –

#!/usr/bin/python # Filename: total.py def total(initial=5, *numbers, **keywords): count = initial for number in numbers: count += number for key in keywords: count += keywords[key] return count print(total(10, 1, 2, 3, vegetables=50, fruits=100)) 

¿Alguien puede explicar cómo son los * números y ** las palabras clave recogiendo los argumentos? Una explicación simple es muy apreciada Gracias de antemano

En sus numbers código se asigna la tupla (1,2,3). keywords se le asigna un diccionario, que contiene vegetables y fruits .

Una estrella ( * ) define los argumentos posicionales. Esto significa que puede recibir cualquier número de argumentos. Puedes tratar los argumentos pasados ​​como una tupla.

Dos estrellas ( ** ) definen argumentos de palabras clave.

El material de referencia está disponible aquí .

Ejemplos

Python 2.x (antes de los argumentos de palabra clave solamente)

 def foo(x, y, foo=None, *args): print [x, y, foo, args] foo(1, 2, 3, 4) --> [1, 2, 3, (4, )] # foo == 4 foo(1, 2, 3, 4, foo=True) --> TypeError 

Python 3.x (con argumentos de palabra clave solamente)

 def foo(x, y, *args, foo=None): print([x, y, foo, args]) foo(1, 2, 3, 4) --> [1, 2, None, (3, 4)] # foo is None foo(1, 2, 3, 4, foo=True) --> [1, 2, True, (3, 4)] def combo(x=None, *args, y=None): ... # 2.x and 3.x styles in one function 

Aunque un progtwigdor experimentado entiende lo que sucedió en 2.x, es contraintuitivo (un argumento posicional se une a foo= independientemente de los argumentos de palabras clave siempre que haya suficientes argumentos posicionales)

Python 3.x introduce argumentos de palabra clave más intuitivos con PEP-3102 (los argumentos de palabra clave después de varargs solo pueden estar vinculados por nombre)