El propósito de * y ** en Python
- 
          
            La Definición de *en Python
- 
          
            La Definición de **en Python
- 
          
            Los usos de *y**en llamadas a funciones en Python
 
Este artículo explica el propósito de * y ** en Python.
En Python, usamos el asterisco simple (*) y el asterisco doble (**) para significar un número variable de argumentos.
Podemos pasar cualquier número de argumentos en una función de Python de cualquiera de las siguientes formas.
- Argumentos posicionales (*)
- Argumentos de palabras clave (**)
La Definición de * en Python
Utilice el símbolo * en Python para permitir un número variable de argumentos / parámetros posicionales para la función.
Siga el ejemplo a continuación.
def function_singleasterix(*someargs):
    for i in someargs:
        print(i)
Ahora, el código del controlador, ya sea con lista o tuple es el siguiente.
listdata = ["Alex", "Tom", "John", "Alice"]
function_singleasterix(listdata)
Producción :
['Alex', 'Tom', 'John', 'Alice']
Utilice argumentos solo posicionales si no desea que los usuarios conozcan el nombre de los parámetros.
Por ejemplo, es aconsejable utilizar variables solo posicionales en las API; esto evita roturas en caso de cambios en la API si se modifica el nombre del parámetro.
La Definición de ** en Python
Utilice el símbolo ** en Python para permitir un número variable de argumentos / parámetros de palabras clave para la función. Tenga en cuenta que el argumento posterior debe ser un elemento de mapeo (par clave-valor de diccionario), no una tupla o una lista.
Siga el código de ejemplo a continuación.
def function_doubleasterix(**keywordargs):
    print("The keys in the kwargs dicionary are -", keywordargs.keys())
    print("The values in the kwargs dicionary are -", keywordargs.values())
    print("--The key value assignment in the 'keywordargs' dictionary are as follows--")
    for key, value in keywordargs.items():
        print("%s == %s" % (key, value))
En el ejemplo anterior, keywordargs está asociado con un diccionario como en el programa siguiente.
function_doubleasterix(SNo001="Alex", SNo002="Tom")
Producción :
The keys in the 'keywordargs' dicionary are - dict_keys(['SNo001', 'SNo002'])
The values in the 'keywordargs' dicionary are - dict_values(['Alex', 'Tom'])
--The key value assignment in the 'keywordargs' dictionary are as follows--
SNo001 == Alex
SNo002 == Tom
En el ejemplo anterior, **keywordargs proporciona argumentos de palabras clave como pares clave-valor de diccionario.
Los usos de * y ** en llamadas a funciones en Python
Los símbolos * y ** también se utilizan en las llamadas a funciones. Úselos para pasar un número variable de argumentos a una función usando cualquiera de los siguientes.
- una lista - *
- una tupla - *
- un diccionario - **
Aquí hay varios ejemplos que puede seguir.
Llame a la función con una lista de variables como entrada. Utilice * como sigue
varlist = ["Tom", "John", "Alice"]
functiondef(*varlist)
Llame a la función con una variable diccionario como entrada. Utilice ** de la siguiente manera
    
vardict = {"a": "Tom", "b": "John", "c": "Alice"}
functiondef(**vardict)
Llame a la función con una variable tuple como entrada. Utilice * como sigue
vartuple = ("Tom", "John", "Alice")
functiondef(*vartuple)
La salida para todos los casos anteriores es:
SNo1 = Tom
SNo2 = John
SNo3 = Alice