in

Empaquetar y descomprimir argumentos en Python

gfg 200x200 min

Usamos dos operadores * (para tuplas) y ** (para diccionarios).

Fondo
Considere una situación en la que tenemos una función que recibe cuatro argumentos. Queremos hacer una llamada a esta función y tenemos una lista de tamaño 4 con todos los argumentos para la función. Si simplemente pasamos una lista a la función, la llamada no funciona.

Pitón

def fun(a, b, c, d):

    print(a, b, c, d)

my_list = [1, 2, 3, 4]

fun(my_list)

Producción :

TypeError: fun() takes exactly 4 arguments (1 given)

Desembalaje
Nosotros podemos usar * para descomprimir la lista de modo que todos sus elementos puedan pasarse como parámetros diferentes.

Pitón

def fun(a, b, c, d):

    print(a, b, c, d)

my_list = [1, 2, 3, 4]

fun(*my_list)

Producción :

(1, 2, 3, 4)

Debemos tener en cuenta que el no. de argumentos debe ser la misma que la longitud de la lista que estamos desempaquetando para los argumentos.

Python3

args = [0, 1, 4, 9]

def func(a, b, c):

    return a + b + c

func(*args)

Producción:

Traceback (most recent call last):
  File "/home/592a8d2a568a0c12061950aa99d6dec3.py", line 10, in <module>
    func(*args)
TypeError: func() takes 3 positional arguments but 4 were given

Como otro ejemplo, considere la función incorporada range () que espera argumentos separados de inicio y detención. Si no están disponibles por separado, escriba la llamada a la función con el operador * para descomprimir los argumentos de una lista o tupla:

Pitón

>>>

>>> range(3, 6

[3, 4, 5]

>>> args = [3, 6]

>>> range(*args) 

[3, 4, 5]

Embalaje
Cuando no sabemos cuántos argumentos deben pasarse a una función de Python, podemos usar Packing para empaquetar todos los argumentos en una tupla.

Pitón

def mySum(*args):

    return sum(args)

print(mySum(1, 2, 3, 4, 5))

print(mySum(10, 20))

Producción:

15
30

La función anterior mySum () «empaqueta» para empaquetar todos los argumentos que recibe esta llamada al método en una sola variable. Una vez que tenemos esta variable ‘empaquetada’, podemos hacer cosas con ella que haríamos con una tupla normal. argumentos[0] y argumentos[1] le daría el primer y segundo argumento, respectivamente. Dado que nuestras tuplas son inmutables, puede convertir la tupla args en una lista para que también pueda modificar, eliminar y reorganizar elementos en i.

Embalaje y desembalaje
A continuación se muestra un ejemplo que muestra tanto el embalaje como el desembalaje.

Pitón

def fun1(a, b, c):

    print(a, b, c)

def fun2(*args):

    

    args = list(args)

    

    argumentos[0] = 'Geeksforgeeks'

    argumentos[1] = 'awesome'

    

    fun1(*args)

fun2('Hello', 'beautiful', 'world!')

Producción:

(Geeksforgeeks, awesome, world!)

** se usa para diccionarios

Pitón

def fun(a, b, c):

    print(a, b, c)

d = {'a':2, 'b':4, 'c':10}

fun(**d)

Producción:

2 4 10

Aquí ** descomprimió el diccionario utilizado con él y pasó los elementos del diccionario como argumentos de palabras clave a la función. Así que escribir «divertido (1, ** d)» era equivalente a escribir «divertido (1, b = 4, c = 10)».

Pitón

def fun(**kwargs):

    

    print(type(kwargs))

    

    for key in kwargs:

        print("%s = %s" % (key, kwargs[key]))

fun(name="geeks", ID="101", language="Python")

Producción :

<class 'dict'>
language = Python
name = geeks
ID = 101

Aplicaciones y puntos importantes

  1. Se utiliza en la programación de sockets para enviar una gran cantidad de solicitudes a un servidor.
  2. Se usa en el marco de Django para enviar argumentos variables para ver funciones.
  3. Hay funciones contenedoras que requieren que pasemos argumentos variables.
  4. La modificación de argumentos se vuelve fácil, pero al mismo tiempo la validación no es adecuada, por lo que deben usarse con cuidado.

Referencia:
http://hangar.runway7.net/python/packing-unpacking-arguments
Este artículo es una contribución de Shwetanshu Rohatgi. Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando contrib.geeksforgeeks.org o envíe su artículo por correo electrónico a [email protected] Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema discutido anteriormente.

¡Atención geek! Fortalece tus cimientos con el Fundación de programación de Python Curso y aprende los conceptos básicos.

Para empezar, los preparativos de su entrevista Mejore sus conceptos de estructuras de datos con el Python DS Curso. Y para comenzar con su viaje de aprendizaje automático, únase al Aprendizaje automático – Curso de nivel básico

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

apple touch icon@2

typeof en Java 8

Edward Cullen vs Jacob Black – Diferencia y comparación