parameter-passing - if python 3 - ¿Qué hace **(doble estrella/asterisco)y*(estrella/asterisco)para los parámetros?

if else en una línea python / python / syntax / variadic-functions / argument-unpacking

En las siguientes definiciones de métodos, ¿qué hacen * y ** para param2 ?

def foo(param1, *param2):
def bar(param1, **param2):

ShadowRanger



Answer #1
def f(x, y, *myArgs, **myKW):
    print("# x      = {}".format(x))
    print("# y      = {}".format(y))
    print("# myArgs = {}".format(myArgs))
    print("# myKW   = {}".format(myKW))
    print("# ----------------------------------------------------------------------")

# Definir una lista con fines de demostración
myList    = ["Left", "Right", "Up", "Down"]
# Definir un diccionario con fines de demostración
myDict    = {"Wubba": "lubba", "Dub": "dub"}
# Definir un diccionario para alimentar y
myArgDict = {'y': "Why?", 'y0': "Why not?", "q": "Here is a cue!"}

# El primer elemento de myList se alimenta y
f("myEx", *myList, **myDict)
# x      = myEx
# y = Izquierda
# myArgs = ('Derecha', 'Arriba', 'Abajo')
# myKW   = {'Wubba': 'lubba', 'Dub': 'dub'}
# ----------------------------------------------------------------------

# y se empareja y se alimenta primero
# El resto de myArgDict se convierte en argumentos adicionales que alimentan a myKW
f("myEx", **myArgDict)
# x      = myEx
# y = ¿Por qué?
# myArgs = ()
# myKW = {'y0': '¿Por qué no?', 'q': '¡Aquí hay una señal!'}
# ----------------------------------------------------------------------

# El resto de myArgDict se convierte en argumentos adicionales que alimentan a myArgs
f("myEx", *myArgDict)
# x      = myEx
# y      = y
# myArgs = ('y0', 'q')
# myKW   = {}
# ----------------------------------------------------------------------

# Proporcione argumentos adicionales manualmente y agregue aún más de mi lista
f("myEx", 4, 42, 420, *myList, *myDict, **myDict)
# x      = myEx
# y      = 4
# myArgs = (42, 420, 'Izquierda', 'Derecha', 'Arriba', 'Abajo', 'Wubba', 'Dub')
# myKW   = {'Wubba': 'lubba', 'Dub': 'dub'}
# ----------------------------------------------------------------------

# Sin las estrellas, toda la lista y el diccionario proporcionados se convierten en x e y:
f(myList, myDict)
# x = ['Izquierda', 'Derecha', 'Arriba', 'Abajo']
# y      = {'Wubba': 'lubba', 'Dub': 'dub'}
# myArgs = ()
# myKW   = {}
# ----------------------------------------------------------------------