Python İşlevlerinde *args ve **kwargs Nasıl Kullanılır?

Python'da *args ve **kwargs konusunda uzmanlaşın. Dinamik konumsal ve anahtar kelime bağımsız değişkenleriyle esnek işlevler yazmayı, koleksiyonları açmayı ve sarmalayıcı işlevler oluşturmayı öğrenin.

Bu Çözümü Editör'de deneyin

Genel Bakış

Python'da genellikle değişken sayıda argümanı kabul edebilen işlevler tasarlamanız gerekecektir. Örneğin, herhangi bir sayıda tam sayının toplamını hesaplayan bir işlev veya değişen alanlarla meta verileri günlüğe kaydeden bir işlev. Python, kullanıcıları bir liste veya sözlük iletmeye zorlamak yerine iki özel sembol sağlar: `*args` ve `**kwargs`.

'*args' sözdizimi, bir işlevin herhangi bir sayıda konumsal bağımsız değişkeni kabul etmesine olanak tanır. Tek yıldız işareti '*', paket açma operatörü görevi görür. Bir işlev tanımına yerleştirildiğinde, fazladan konumsal bağımsız değişkenleri "args" adlı bir demet içinde toplar. Bu, giriş değerleri üzerinde yineleme yapmanıza, hesaplamalar yapmanıza veya bunları kolaylıkla başka bir işleve aktarmanıza olanak tanır.

Öte yandan, "**kwargs" sözdizimi, bir fonksiyonun herhangi bir sayıda anahtar kelime (adlandırılmış) argümanını kabul etmesine izin verir. Çift yıldız işareti `**', bu argümanları 'kwargs' adlı bir sözlükte toplar. Bu, isteğe bağlı konfigürasyonların, stil argümanlarının veya veritabanı niteliklerinin iletilmesi için inanılmaz derecede faydalıdır. Unutmayın, 'args' ve 'kwargs' isimleri gelenektir; asıl işlevsellik tek ve çift yıldız işaretleriyle sağlanır.

Kod ve Yürütme Çıkışı

Bu kod, değişken sayılarını toplamak için *args kullanımını, kullanıcı profillerini yazdırmak için **kwargs kullanımını ve her ikisini de tek bir işlevde birleştirmeyi gösterir.

args_kwargs.py
Editör'de deneyin
def sum_all(*args):
    print("args type:", type(args).__name__)
    return sum(args)

print("Sum (1, 2, 3):", sum_all(1, 2, 3))
print("Sum (10, 20):", sum_all(10, 20))

def print_profile(**kwargs):
    print("kwargs type:", type(kwargs).__name__)
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_profile(name="Bob", role="developer", country="US")

def master_function(first, *args, **kwargs):
    print(f"First argument: {first}")
    print(f"Additional positional args: {args}")
    print(f"Keyword args: {kwargs}")

master_function("hello", 1, 2, 3, debug=True, user_id=42)
Terminal Çıkışı
args type: tuple
Sum (1, 2, 3): 6
args type: tuple
Sum (10, 20): 30
kwargs type: dict
name: Bob
role: developer
country: US
First argument: hello
Additional positional args: (1, 2, 3)
Keyword args: {'debug': True, 'user_id': 42}

Adım Adım Uygulama

  • Konumsal bağımsız değişkenleri bir demet içinde toplamak için bir parametreden (ör. *args) önce tek bir yıldız işareti kullanın.
  • Anahtar kelime argümanlarını bir sözlükte toplamak için bir parametreden önce çift yıldız işareti kullanın (ör. **kwargs).
  • Doğru parametre sırasını koruyun: standart parametreler, *args, yalnızca anahtar kelimeden oluşan parametreler, ardından **kwargs.
  • *yinelenebilir veya **dictionary ileterek işlevleri çağırırken paket açma sözdizimini kullanın.

Sıkça Sorulan Sorular

"Args" ve "kwargs" adlarını kullanmak zorunda mıyım?

Hayır, bunlar standart topluluk sözleşmeleridir. Sözdizimsel olarak yalnızca * ve ** önekleri gereklidir. *values ​​ve **options yazabilirsiniz, ancak okunabilirlik açısından *args ve **kwargs'a bağlı kalmanız önemle tavsiye edilir.

Bir işlevi tanımlarken doğru sıralama nedir?

Bir işlev imzasındaki argümanların doğru sırası şu şekildedir: konumsal argümanlar, *args, yalnızca anahtar kelimeden oluşan argümanlar ve son olarak **kwargs.

İlgili Konular

Önerilen Python Kaynakları

İlgili etkileşimli eğitimler, yardımcı sayfalar ve kod karşılaştırmalarıyla bilginizi genişletin.