Pythonissa luettelot (matriisit), tuplet ja sanakirjat voidaan laajentaa (purkaa) ja niiden elementit voidaan välittää yhdessä funktion argumentteina.
Kun kutsut funktiota, määritä argumentti *:lla, kun kyseessä ovat listat ja tuplet, ja **:lla, kun kyseessä ovat sanakirjat. Huomaa tähtien määrä *.
Tässä kuvataan seuraavat yksityiskohdat.
- Laajenna (purkaa) lista tai tuple *:lla (yksi tähti).
- Funktioille, joilla on oletusargumentit
- Funktioille, joiden argumentit ovat muuttuvan pituisia
- Laajenna (purkaa) sanakirja **:lla (kaksi tähteä).
- Funktioille, joilla on oletusargumentit
- Funktioille, joiden argumentit ovat muuttuvan pituisia
Katso seuraavasta artikkelista Python-funktioiden peruskäyttö, oletusargumentit ja muuttuvan pituiset argumentit *,**:llä funktioita määriteltäessä.
- RELATED:Kuinka käyttää ja huomioida oletusargumentteja Python-funktioissa?
- RELATED:Kuinka käyttää muuttuvan pituisia argumentteja Pythonissa(
*args
,**kwargs
)
Laajenna (purkaa) lista tai tuple *:lla (yksi tähti).
Kun listaa tai monikkoa määritetään argumenttina *-merkillä, se laajennetaan ja jokainen elementti välitetään erillisenä argumenttina.
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
Seuraava selitys koskee listaa, mutta sama pätee myös tupleen.
Jos elementtien lukumäärä ei vastaa argumenttien lukumäärää, syntyy TypeError-virhe.
# 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
Funktioille, joilla on oletusargumentit
Jos oletusargumentti on asetettu, oletusargumenttia käytetään, jos elementtien määrä ei ole riittävä. Jos elementtien määrä on liian suuri, syntyy TypeError-virhe.
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
Funktioille, joiden argumentit ovat muuttuvan pituisia
Jos asetetaan muuttuvan pituinen argumentti, kaikki sijaintiargumentin elementin jälkeiset elementit siirretään muuttuvan pituiseen argumenttiin.
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')
Laajenna (purkaa) sanakirja **:lla (kaksi tähteä).
Kun sanakirjan dict määritetään argumenttina **:n kanssa, elementtien avaimet laajennetaan argumentin nimiksi ja arvot argumentin arvoiksi, ja kukin niistä välitetään erillisenä argumenttina.
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
Jos argumentin nimeä vastaavaa avainta ei ole tai jos on olemassa avain, joka ei vastaa argumentin nimeä, tuloksena on TypeError-virhe.
# 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'
Funktioille, joilla on oletusargumentit
Kuva, jossa päivitetään vain ne argumenttien nimien arvot, jotka vastaavat sanakirjan avaimia.
Avain, joka ei vastaa argumentin nimeä, aiheuttaa TypeError-virheen.
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'
Funktioille, joiden argumentit ovat muuttuvan pituisia
Jos muuttujapituiset argumentit on asetettu, kaikki elementit, joiden avain on muu kuin argumenttina määritetyn argumentin nimi, siirretään muuttujapituiseen argumenttiin.
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'}