Expandir e pasar listas, tuplas e dicionarios como argumentos de función en Python

Negocios

En Python, as listas (matrices), as tuplas e os dicionarios pódense expandir (descomprimir) e os seus respectivos elementos pódense pasar xuntos como argumentos de función.

Ao chamar a unha función, especifique o argumento con * para listas e tuplas e ** para dicionarios. Teña en conta o número de asteriscos *.

Aquí descríbense os seguintes detalles.

  • Expande (descomprime) unha lista ou tupla con * (un asterisco)
    • Para funcións con argumentos predeterminados
    • Para funcións con argumentos de lonxitude variable
  • Ampliar (descomprimir) o dicionario con ** (dous asteriscos)
    • Para funcións con argumentos predeterminados
    • Para funcións con argumentos de lonxitude variable

Consulte o seguinte artigo para coñecer o uso básico das funcións de Python, os argumentos predeterminados e os argumentos de lonxitude variable con *,** ao definir funcións.

Expande (descomprime) unha lista ou tupla con * (un asterisco)

Cando se especifica unha lista ou tupla como argumento con *, expándese e cada elemento pásase como un argumento separado.

def func(arg1, arg2, arg3):
    print('arg1 =', arg1)
    print('arg2 =', arg2)
    print('arg3 =', arg3)

l = ['one', 'two', 'three']

func(*l)
# arg1 = one
# arg2 = two
# arg3 = three

func(*['one', 'two', 'three'])
# arg1 = one
# arg2 = two
# arg3 = three

t = ('one', 'two', 'three')

func(*t)
# arg1 = one
# arg2 = two
# arg3 = three

func(*('one', 'two', 'three'))
# arg1 = one
# arg2 = two
# arg3 = three

A seguinte explicación é para unha lista, pero o mesmo aplícase a unha tupla.

Se o número de elementos non coincide co número de argumentos, prodúcese un erro TypeError.

# func(*['one', 'two'])
# TypeError: func() missing 1 required positional argument: 'arg3'

# func(*['one', 'two', 'three', 'four'])
# TypeError: func() takes 3 positional arguments but 4 were given

Para funcións con argumentos predeterminados

Se se establece un argumento predeterminado, utilízase se o número de elementos é insuficiente. Se o número de elementos é demasiado grande, prodúcese un erro TypeError.

def func_default(arg1=1, arg2=2, arg3=3):
    print('arg1 =', arg1)
    print('arg2 =', arg2)
    print('arg3 =', arg3)

func_default(*['one', 'two'])
# arg1 = one
# arg2 = two
# arg3 = 3

func_default(*['one'])
# arg1 = one
# arg2 = 2
# arg3 = 3

# func_default(*['one', 'two', 'three', 'four'])
# TypeError: func_default() takes from 0 to 3 positional arguments but 4 were given

Para funcións con argumentos de lonxitude variable

Se se establece un argumento de lonxitude variable, todos os elementos despois do elemento para o argumento posicional pasan ao argumento de lonxitude variable.

def func_args(arg1, *args):
    print('arg1 =', arg1)
    print('args =', args)

func_args(*['one', 'two'])
# arg1 = one
# args = ('two',)

func_args(*['one', 'two', 'three'])
# arg1 = one
# args = ('two', 'three')

func_args(*['one', 'two', 'three', 'four'])
# arg1 = one
# args = ('two', 'three', 'four')

Ampliar (descomprimir) o dicionario con ** (dous asteriscos)

Cando se especifica un dito de dicionario como argumento con **, as claves de elementos expándense como nomes de argumento e os valores como valores de argumento, e cada un pásase como un argumento separado.

def func(arg1, arg2, arg3):
    print('arg1 =', arg1)
    print('arg2 =', arg2)
    print('arg3 =', arg3)

d = {'arg1': 'one', 'arg2': 'two', 'arg3': 'three'}

func(**d)
# arg1 = one
# arg2 = two
# arg3 = three

func(**{'arg1': 'one', 'arg2': 'two', 'arg3': 'three'})
# arg1 = one
# arg2 = two
# arg3 = three

Se non hai ningunha chave que coincida co nome do argumento ou hai unha clave que non coincide, producirase un erro de tipo Error.

# func(**{'arg1': 'one', 'arg2': 'two'})
# TypeError: func() missing 1 required positional argument: 'arg3'

# func(**{'arg1': 'one', 'arg2': 'two', 'arg3': 'three', 'arg4': 'four'})
# TypeError: func() got an unexpected keyword argument 'arg4'

Para funcións con argumentos predeterminados

Imaxe na que só se actualizan os valores dos nomes dos argumentos que coinciden coas claves do dicionario.

Unha chave que non coincide co nome do argumento producirá un erro TypeError.

def func_default(arg1=1, arg2=2, arg3=3):
    print('arg1 =', arg1)
    print('arg2 =', arg2)
    print('arg3 =', arg3)

func_default(**{'arg1': 'one'})
# arg1 = one
# arg2 = 2
# arg3 = 3

func_default(**{'arg2': 'two', 'arg3': 'three'})
# arg1 = 1
# arg2 = two
# arg3 = three

# func_default(**{'arg1': 'one', 'arg4': 'four'})
# TypeError: func_default() got an unexpected keyword argument 'arg4'

Para funcións con argumentos de lonxitude variable

Se se establecen argumentos de lonxitude variable, calquera elemento cunha chave que non sexa o nome do argumento especificado como argumento pásase ao argumento de lonxitude variable.

def func_kwargs(arg1, **kwargs):
    print('arg1 =', arg1)
    print('kwargs =', kwargs)

func_kwargs(**{'arg1': 'one', 'arg2': 'two', 'arg3': 'three'})
# arg1 = one
# kwargs = {'arg2': 'two', 'arg3': 'three'}

func_kwargs(**{'arg1': 'one', 'arg2': 'two', 'arg3': 'three', 'arg4': 'four'})
# arg1 = one
# kwargs = {'arg2': 'two', 'arg3': 'three', 'arg4': 'four'}

func_kwargs(**{'arg1': 'one', 'arg3': 'three'})
# arg1 = one
# kwargs = {'arg3': 'three'}
Copied title and URL