Në Python, listat (vargjet), tuplet dhe fjalorët mund të zgjerohen (zhpaketohen) dhe elementët e tyre përkatës mund të kalojnë së bashku si argumente funksioni.
Kur thërrisni një funksion, specifikoni argumentin me * për listat dhe tuplet dhe ** për fjalorët. Vini re numrin e yjeve *.
Detajet e mëposhtme përshkruhen këtu.
- Zgjeroni (zhpaketoni) një listë ose dyfishoni me * (një yll)
- Për funksionet me argumente të paracaktuar
- Për funksionet me argumente me gjatësi të ndryshueshme
- Zgjero (zhpaketo) fjalorin me ** (dy yje)
- Për funksionet me argumente të paracaktuar
- Për funksionet me argumente me gjatësi të ndryshueshme
Shihni artikullin e mëposhtëm për përdorimin bazë të funksioneve të Python, argumentet e paracaktuar dhe argumentet me gjatësi të ndryshueshme me *,** kur përcaktohen funksionet.
- LIDHUR:Si të përdorni dhe shënoni argumentet e paracaktuar në funksionet e Python
- LIDHUR:Si të përdorni argumentet me gjatësi të ndryshueshme në Python(
*args
,**kwargs
)
Zgjeroni (zhpaketoni) një listë ose dyfishoni me * (një yll)
Kur një listë ose tuple specifikohet si argument me *, ajo zgjerohet dhe secili element kalohet si argument i veçantë.
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
Shpjegimi i mëposhtëm është për një listë, por e njëjta gjë vlen edhe për një tuple.
Nëse numri i elementeve nuk përputhet me numrin e argumenteve, ndodh një gabim 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
Për funksionet me argumente të paracaktuar
Nëse vendoset një argument i paracaktuar, përdoret argumenti i paracaktuar nëse numri i elementeve është i pamjaftueshëm. Nëse numri i elementeve është shumë i madh, ndodh një gabim 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
Për funksionet me argumente me gjatësi të ndryshueshme
Nëse vendoset një argument me gjatësi të ndryshueshme, të gjithë elementët pas elementit për argumentin pozicional i kalohen argumentit me gjatësi të ndryshueshme.
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')
Zgjero (zhpaketo) fjalorin me ** (dy yje)
Kur një diktim fjalori specifikohet si një argument me **, çelësat e elementeve zgjerohen si emra argumentesh dhe vlera si vlera argumentesh, dhe secila kalohet si një argument i veçantë.
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
Nëse nuk ka asnjë çelës që përputhet me emrin e argumentit ose ka një çelës që nuk përputhet, do të rezultojë një gabim 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'
Për funksionet me argumente të paracaktuar
Imazhi në të cilin përditësohen vetëm vlerat e emrave të argumenteve që përputhen me çelësat në fjalor.
Një çelës që nuk përputhet me emrin e argumentit do të rezultojë në një gabim 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'
Për funksionet me argumente me gjatësi të ndryshueshme
Nëse vendosen argumente me gjatësi të ndryshueshme, çdo element me një çelës të ndryshëm nga emri i argumentit të specifikuar si argument i kalohet argumentit me gjatësi të ndryshueshme.
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'}