*args ve **kwargs ne işe yarar? Fonksiyon parametre sıralaması nasıl olmalıdır?
Cevap
*args: fazladan verilen konumsal argümanları bir tuple içinde toplar.**kwargs: fazladan verilen isimli argümanları bir dict içinde toplar.
İsimler gelenekseldir; önemli olan * ve ** işaretleridir.
def logla(seviye, *args, **kwargs):
print(seviye, args, kwargs)
logla("INFO", 1, 2, kullanici="ali", id=7)
# INFO (1, 2) {'kullanici': 'ali', 'id': 7}Açma (unpacking)
Çağrı tarafında aynı işaretler tersini yapar:
sayilar = [1, 2, 3]
ayarlar = {"sep": "-", "end": "!\n"}
print(*sayilar, **ayarlar) # 1-2-3!Parametre sıralaması
def f(a, b, /, c, d=10, *args, e, f=5, **kwargs): ...- Yalnızca konumsal parametreler (
/öncesi, Python 3.8+) - Normal parametreler ve varsayılanlıları
*args- Yalnızca isimli (keyword-only) parametreler:
*argsya da tek başına*sonrası **kwargs
Pratik kullanım
Decorator'larda sarılan fonksiyonun imzasını bilmeden argümanları iletmek için kullanılır:
def wrapper(*args, **kwargs):
return func(*args, **kwargs)İlgili Python soruları
- list ve tuple arasındaki fark nedir?
- Varsayılan argüman olarak liste vermek neden tehlikelidir?
- Decorator nedir? Basit bir zamanlama decorator'ı yazın.
- Generator nedir, yield ne yapar?
- GIL nedir ve çoklu iş parçacığını nasıl etkiler?
- async/await ve asyncio nasıl çalışır? Ne zaman thread veya process yerine tercih edilir?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.