Zgjerimi dhe kalimi i listave, tuples dhe fjalorëve si argumente funksioni në Python

biznes

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.

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'}
Copied title and URL