A Python, les llistes (matrius), les tuples i els diccionaris es poden expandir (descomprimir) i els seus respectius elements es poden passar junts com a arguments de funció.
Quan crideu una funció, especifiqueu l’argument amb * per a llistes i tuples i ** per als diccionaris. Tingueu en compte el nombre d’asteriscs *.
Els detalls següents es descriuen aquí.
- Amplieu (descomprimiu) una llista o una tupla amb * (un asterisc)
- Per a funcions amb arguments per defecte
- Per a funcions amb arguments de longitud variable
- Amplieu (descomprimiu) el diccionari amb ** (dos asteriscs)
- Per a funcions amb arguments per defecte
- Per a funcions amb arguments de longitud variable
Consulteu l’article següent per a l’ús bàsic de les funcions de Python, els arguments predeterminats i els arguments de longitud variable amb *,** quan es defineixen funcions.
- RELACIONATS:Com utilitzar i anotar els arguments predeterminats a les funcions de Python
- RELACIONATS:Com utilitzar arguments de longitud variable a Python(
*args
,**kwargs
)
Amplieu (descomprimiu) una llista o una tupla amb * (un asterisc)
Quan s’especifica una llista o tupla com a argument amb *, s’amplia i cada element es passa com un argument independent.
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
L’explicació següent és per a una llista, però el mateix s’aplica a una tupla.
Si el nombre d’elements no coincideix amb el nombre d’arguments, es produeix un error 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
Per a funcions amb arguments per defecte
Si s’estableix un argument per defecte, s’utilitza l’argument per defecte si el nombre d’elements és insuficient. Si el nombre d’elements és massa gran, es produeix un error 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
Per a funcions amb arguments de longitud variable
Si s’estableix un argument de longitud variable, tots els elements després de l’element de l’argument posicional es passen a l’argument de longitud 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')
Amplieu (descomprimiu) el diccionari amb ** (dos asteriscs)
Quan s’especifica un diccionari de diccionari com a argument amb **, les claus d’element s’amplien com a noms d’argument i els valors com a valors d’argument, i cadascun es passa com a argument independent.
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
Si no hi ha cap clau que coincideixi amb el nom de l’argument o hi ha una clau que no coincideix, es produirà un error TypeError.
# 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'
Per a funcions amb arguments per defecte
Imatge en què només s’actualitzen els valors dels noms dels arguments que coincideixen amb les claus del diccionari.
Una clau que no coincideix amb el nom de l’argument donarà lloc a un error 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'
Per a funcions amb arguments de longitud variable
Si s’estableixen arguments de longitud variable, qualsevol element amb una clau diferent del nom de l’argument especificat com a argument es passa a l’argument de longitud 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'}