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.
- RELACIONADO:Como usar e anotar os argumentos predeterminados nas funcións de Python
- RELACIONADO:Como usar argumentos de lonxitude variable en Python(
*args
,**kwargs
)
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'}