У Python спісы (масівы), картэжы і слоўнікі могуць быць пашыраны (распакаваны), а іх адпаведныя элементы могуць быць перададзены разам у якасці аргументаў функцыі.
Пры выкліку функцыі задайце аргумент з * для спісаў і картэжоў і ** для слоўнікаў. Звярніце ўвагу на колькасць зорачак *.
Наступныя падрабязнасці апісаны тут.
- Разгарнуць (распакаваць) спіс або картэж з * (адна зорачка)
- Для функцый з аргументамі па змаўчанні
- Для функцый з аргументамі зменнай даўжыні
- Разгарнуць (распакаваць) слоўнік ** (дзве зорачкі)
- Для функцый з аргументамі па змаўчанні
- Для функцый з аргументамі зменнай даўжыні
Глядзіце наступны артыкул для асноўнага выкарыстання функцый Python, аргументаў па змаўчанні і аргументаў зменнай даўжыні з *,** пры вызначэнні функцый.
- па тэме:Як выкарыстоўваць і адзначыць аргументы па змаўчанні ў функцыях Python
- па тэме:Як выкарыстоўваць аргументы зменнай даўжыні ў Python(
*args
,**kwargs
)
Разгарнуць (распакаваць) спіс або картэж з * (адна зорачка)
Калі спіс або картэж зададзены ў якасці аргумента з *, ён разгортваецца, і кожны элемент перадаецца як асобны аргумент.
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')
Разгарнуць (распакаваць) слоўнік ** (дзве зорачкі)
Калі ў якасці аргументу з ** паказаны слоўнікавы dict, ключы элементаў разгортваюцца як імёны аргументаў, а значэнні – як значэнні аргументаў, і кожны з іх перадаецца як асобны аргумент.
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'}