Argumanên fonksiyonê yên jêrîn belkî yên herî gelemperî ne ku gava ku hûn li koda Python dinêrin û dibêjin, “Ev çi ye?
*args
**kwargs
Her jimarek argumanan (argumanên bi dirêjiya guhêrbar) dikare bi pêvekirina stêrkek li argumana di pênasekirina fonksiyonê de wekî jêrîn were destnîşan kirin.
*
**
Navên *args,**kwargs bi gelemperî wekî peyman têne bikar anîn. Lêbelê, navên din têne pejirandin heya ku * û ** di destpêkê de ne. Koda nimûneya jêrîn navên *args,**kwargs bikar tîne.
Agahiyên jêrîn li jêr têne diyar kirin.
*args
:Gelek argûmanan wekî tuple qebûl dike**kwargs
:Gelek argumanên keywordê wekî ferheng qebûl dike
*args:Gelek argûmanan wekî tuple qebûl dike
Hejmara argumanan dikare bi danasîna argumanan bi *, wekî di *args de, were destnîşan kirin.
def my_sum(*args):
return sum(args)
print(my_sum(1, 2, 3, 4))
# 10
print(my_sum(1, 2, 3, 4, 5, 6, 7, 8))
# 36
Gelek argûman di fonksiyonê de wekî pirjimar têne wergirtin. Di nimûneyê de, fonksiyona sum() ji bo jimartina berhevokê bi qasê derbas dibe.
def my_sum2(*args):
print('args: ', args)
print('type: ', type(args))
print('sum : ', sum(args))
my_sum2(1, 2, 3, 4)
# args: (1, 2, 3, 4)
# type: <class 'tuple'>
# sum : 10
Di heman demê de dikare bi argumanek pozîsyonê re were hev kirin.
Nirxa ku piştî (li milê rastê) argumana pozîsyonê hatî destnîşan kirin, ji args re wekî pirjimar tê derbas kirin. Ger tenê argumanek pozîsyonê hebe, ew tîrêjek vala ye.
def func_args(arg1, arg2, *args):
print('arg1: ', arg1)
print('arg2: ', arg2)
print('args: ', args)
func_args(0, 1, 2, 3, 4)
# arg1: 0
# arg2: 1
# args: (2, 3, 4)
func_args(0, 1)
# arg1: 0
# arg2: 1
# args: ()
Argumanên ku bi * hatine nîşankirin dibe ku pêşî bêne diyar kirin. Lêbelê, di vê rewşê de, argumanên ku ji *args dereng hatine diyarkirin divê di forma keywordê de bêne diyar kirin. Bi rasthatinî, forma keyword forma “navê arguman = nirx” e.
Nirxa paşîn bixweber ji argumana pozîsyonê re derbas nabe. Ji ber vê yekê, heke ew wekî argumanek peyva sereke neyê destnîşankirin, dê xeletiyek TypeError derkeve.
def func_args2(arg1, *args, arg2):
print('arg1: ', arg1)
print('arg2: ', arg2)
print('args: ', args)
# func_args2(0, 1, 2, 3, 4)
# TypeError: func_args2() missing 1 required keyword-only argument: 'arg2'
func_args2(0, 1, 2, 3, arg2=4)
# arg1: 0
# arg2: 4
# args: (1, 2, 3)
Ger tenê * argûman bêne diyar kirin, divê argumanên paşerojê her gav wekî argumanên peyva sereke bêne destnîşan kirin.(keyword-only argument
)
def func_args_kw_only(arg1, *, arg2):
print('arg1: ', arg1)
print('arg2: ', arg2)
# func_args_kw_only(100, 200)
# TypeError: func_args_kw_only() takes 1 positional argument but 2 were given
func_args_kw_only(100, arg2=200)
# arg1: 100
# arg2: 200
**kwargs:Gelek argumanên keywordê wekî ferheng qebûl dike
Hejmara argumanên keyfa keyfî bi danasîna argumanan bi ,** re wekî **kwargs dikare were destnîşankirin.
Di fonksîyonê de, navê argûman wekî ferhengek ku mifteya wê kilît û nirxa wê nirx e tê wergirtin.
def func_kwargs(**kwargs):
print('kwargs: ', kwargs)
print('type: ', type(kwargs))
func_kwargs(key1=1, key2=2, key3=3)
# kwargs: {'key1': 1, 'key2': 2, 'key3': 3}
# type: <class 'dict'>
Ew dikare bi argumana pozîsyonê re jî were bikar anîn.
def func_kwargs_positional(arg1, arg2, **kwargs):
print('arg1: ', arg1)
print('arg2: ', arg2)
print('kwargs: ', kwargs)
func_kwargs_positional(0, 1, key1=1)
# arg1: 0
# arg2: 1
# kwargs: {'key1': 1}
Bi diyarkirina objeya ferhengê bi ** re wekî arguman dema gazîkirina fonksiyonê, gengaz e ku meriv wê berfireh bike û wekî argumana têkildar derbas bike.
d = {'key1': 1, 'key2': 2, 'arg1': 100, 'arg2': 200}
func_kwargs_positional(**d)
# arg1: 100
# arg2: 200
# kwargs: {'key1': 1, 'key2': 2}
Argumanên ku bi ** têne nîşankirin tenê di dawiya argumanê de têne diyar kirin. Diyarkirina argumanek din piştî argumana ku bi ** hatî nîşankirin dê bibe sedema xeletiyek SyntaxError.
# def func_kwargs_error(**kwargs, arg):
# print(kwargs)
# SyntaxError: invalid syntax