Python тіліндегі функция аргументтері ретінде тізімдерді, кортеждерді және сөздіктерді кеңейту және беру

Іскерлік

Python тілінде тізімдерді (массивтерді), кортеждерді және сөздіктерді кеңейтуге (орауға) және олардың сәйкес элементтерін функция аргументтері ретінде бірге беруге болады.

Функцияны шақырған кезде тізімдер мен кортеждер үшін * және сөздіктер үшін ** аргументін көрсетіңіз. Жұлдызшалар санына назар аударыңыз *.

Мұнда келесі мәліметтер сипатталған.

  • * (бір жұлдызша) бар тізімді немесе кортежді кеңейтіңіз (орамаңыз)
    • Әдепкі аргументтері бар функциялар үшін
    • Айнымалы ұзындық аргументтері бар функциялар үшін
  • Сөздікті ** (екі жұлдызша) арқылы кеңейтіңіз (орамаңыз)
    • Әдепкі аргументтері бар функциялар үшін
    • Айнымалы ұзындық аргументтері бар функциялар үшін

Python функцияларын, әдепкі аргументтерді және функцияларды анықтау кезінде *,** айнымалы ұзындық аргументтерін негізгі пайдалану үшін келесі мақаланы қараңыз.

* (бір жұлдызша) бар тізімді немесе кортежді кеңейтіңіз (орамаңыз)

Тізім немесе кортеж * арқылы аргумент ретінде көрсетілгенде, ол кеңейтіледі және әрбір элемент жеке аргумент ретінде беріледі.

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

Төмендегі түсініктеме тізімге арналған, бірақ дәл сол кортежге де қатысты.

Егер элементтер саны аргументтер санына сәйкес келмесе, 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

Әдепкі аргументтері бар функциялар үшін

Әдепкі аргумент орнатылса, элементтер саны жеткіліксіз болса, әдепкі аргумент пайдаланылады. Элементтердің саны тым үлкен болса, 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

Айнымалы ұзындық аргументтері бар функциялар үшін

Айнымалы ұзындық аргументі орнатылса, позициялық аргумент элементінен кейінгі барлық элементтер айнымалы ұзындық аргументіне жіберіледі.

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')

Сөздікті ** (екі жұлдызша) арқылы кеңейтіңіз (орамаңыз)

Сөздік дикті ** арқылы аргумент ретінде көрсетілгенде, элемент пернелері аргумент атаулары ретінде және мәндер аргумент мәндері ретінде кеңейтіледі және әрқайсысы жеке аргумент ретінде беріледі.

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

Аргумент атауына сәйкес келетін кілт болмаса немесе сәйкес келмейтін кілт болса, 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'

Әдепкі аргументтері бар функциялар үшін

Сөздіктегі пернелерге сәйкес келетін аргумент атауларының мәндері ғана жаңартылатын кескін.

Аргумент атауына сәйкес келмейтін кілт 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'

Айнымалы ұзындық аргументтері бар функциялар үшін

Айнымалы ұзындық аргументтері орнатылса, аргумент ретінде көрсетілген аргумент атынан басқа кілті бар кез келген элемент айнымалы ұзындық аргументіне жіберіледі.

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