ve , bir fonksiyonun argüman kabul etmesini sağlar. ekstra argümanları bir tuple'a toplar; ekstra argümanlarını bir dict'e toplar. (İsimler kural — ve sembolü önemli olan şeydir.)
ve , bir fonksiyonun argüman kabul etmesini sağlar. ekstra argümanları bir tuple'a toplar; ekstra argümanlarını bir dict'e toplar. (İsimler kural — ve sembolü önemli olan şeydir.)
*args**kwargs*args**kwargs***def total(*args): # collects all positional args into a tuple
print(args) # e.g. (1, 2, 3)
return sum(args)
total(1, 2, 3) # 6
total(1, 2, 3, 4, 5) # 15 — any number of args
def configure(**kwargs): # collects keyword args into a dict
print(kwargs) # e.g. {"host": "localhost", "port": 8080}
for key, value in kwargs.items():
print(f"{key} = {value}")
configure(host="localhost", port=8080, debug=True)
def func(a, b, *args, **kwargs):
# a, b → required positional
# args → extra positional (tuple)
# kwargs → extra keyword (dict)
...
func(1, 2, 3, 4, x=5, y=6)
# a=1, b=2, args=(3, 4), kwargs={"x": 5, "y": 6}
Gerekli sıra şu şekildedir: normal parametreler, sonra *args, sonra **kwargs.
# `*` and `**` also UNPACK collections INTO arguments at the call site
numbers = [1, 2, 3]
total(*numbers) # same as total(1, 2, 3)
settings = {"host": "x", "port": 80}
configure(**settings) # same as configure(host="x", port=80)
Aynı söz dizimi, bir listeyi/dict'i konumsal/anahtar sözcük argümanlarına açar — argümanları iletmek için pratiktir.
def wrapper(*args, **kwargs):
# accept ANY arguments and pass them through unchanged
return original_func(*args, **kwargs)
Bu geçişli (pass-through) desen, dekoratörlerin ve sarmalayıcı fonksiyonların bilinmeyen imzalara sahip fonksiyonları *args, **kwargs aracılığıyla nasıl sarmaladığını gösterir.
*args/**kwargs, herhangi sayıda argüman kabul eden esnek fonksiyon imzalarını etkinleştirir — genel amaçlı yardımcı programlar, sarmalayıcılar ve özellikle dekoratörler yazarken gereklidir (dekoratörler bilinmeyen imzalara sahip fonksiyonları *args, **kwargs aracılığıyla sarmalayabilmelidir).
Paketi açma yönü (*list, **dict) argümanları iletmek veya yaymak için eşit derecede yararlıdır.
Hem toplamayı hem de paketi açmayı anlamak, yeniden kullanılabilir, genel Python kodu yazmak ve bu özelliklere dayanan birçok kütüphane API'si ile dekoratörü okumak için anahtardır.