*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): ...
  1. Yalnızca konumsal parametreler (/ öncesi, Python 3.8+)
  2. Normal parametreler ve varsayılanlıları
  3. *args
  4. Yalnızca isimli (keyword-only) parametreler: *args ya da tek başına * sonrası
  5. **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)
  1. list ve tuple arasındaki fark nedir?KolayPythonBackend
  2. Varsayılan argüman olarak liste vermek neden tehlikelidir?OrtaPythonBackend
  3. Decorator nedir? Basit bir zamanlama decorator'ı yazın.OrtaPythonBackend
  4. Generator nedir, yield ne yapar?OrtaPythonBackend
  5. GIL nedir ve çoklu iş parçacığını nasıl etkiler?ZorPythonBackend
  6. async/await ve asyncio nasıl çalışır? Ne zaman thread veya process yerine tercih edilir?ZorPythonBackend

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle