args ve kwargs için sözdizimi *
ve **
‘dır; yani *args
ve **kwargs
. Bu değişken isimleri artıtk gelenekselleştiği için bu şekilde kullanılır, ama tabi bu kullanım bir kural değil.
İşlevimizde kaç bağımsız değişken kullanacağımızdan emin değilsek, yani işlevinize rasgele sayıda bağımsız değişken geçireceksek *args
kullanırız:
>>> def print_everything(*args):
for count, thing in enumerate(args):
... print( '{0}. {1}'.format(count, thing))
...
>>> print_everything('apple', 'banana', 'cabbage')
0. apple
1. banana
2. cabbage
**kwargs
‘da benzer şekilde çalışır ancak kwargs, önceden tanımlamadığımız adlandırılmış bağımsız değişkenleri işlememizi sağlar:
>>> def table_things(**kwargs):
... for name, value in kwargs.items():
... print( '{0} = {1}'.format(name, value))
...
>>> table_things(apple = 'fruit', cabbage = 'vegetable')
cabbage = vegetable
apple = fruit
*args
ve *kwargs
‘ı adlandırılmış bağımsız değişkenlerle birlikte de kullanabiliriz. Fonksiyonda önce bağımsız değişkenler değerlerini alır, sonra kalan diğer her şey *args
ve *kwkargs
‘a geçirilir. Adlandırılmış bağımsız değişkenler listede ilk sırada gelir.
def table_things(titlestring, **kwargs)
*args
ve *kwargs
‘ın her ikisini de aynı işlev tanımında kullanabiliriz, ancak *args
‘ın daha önce gelmesi gerekir.
Ayrıca, bir işlevi çağırırken * ve ** sözdizimini de kullanabiliriz. Mesela:
>>> def print_three_things(a, b, c):
... print( 'a = {0}, b = {1}, c = {2}'.format(a,b,c))
...
>>> mylist = ['aardvark', 'baboon', 'cat']
>>> print_three_things(*mylist)
a = aardvark, b = baboon, c = cat
Bu örnekte görebileceğiniz gibi bir liste (veya demet (tuple)) alır ve bunu değişkenlere açar. Böylece, liste öğelerini işlevdeki bağımsız değişkenlerle eşleştirir. Tabii ki, hem işlev tanımında hem de işlev çağrısında *
kullanabiliriz.