Python İşlev Tanımlarında *args ve **kwargs'ı Anlamak

Python İşlev Tanımlarında *args ve **kwargs'ı Anlamak
Python İşlev Tanımlarında *args ve **kwargs'ı Anlamak

Python'un İşlev Parametrelerini Keşfetmek

Python'da *args ve **kwargs'ın kullanımını anlamak, esnek ve dinamik işlevler yazmak için çok önemlidir. Bu özel sözdizimi öğeleri, geliştiricilerin bir işleve değişken sayıda argüman aktarmasına olanak tanıyarak kodu daha yeniden kullanılabilir ve verimli hale getirir.

Bu yazımızda * (tek yıldız) ve ** (çift yıldız) sembollerinin fonksiyon parametrelerinde kullanıldığında ne anlama geldiğini araştıracağız. Ayrıca kodunuzdaki çeşitli senaryoları ele almak için *args ve **kwargs'ın nasıl kullanılacağına ilişkin pratik örneklere de bakacağız.

Emretmek Tanım
*args Bir fonksiyonun değişken sayıda konumsal bağımsız değişkeni kabul etmesine izin verir. Argümanlar bir demet olarak iletilir.
**kwargs Bir fonksiyonun değişken sayıda anahtar kelime bağımsız değişkenini kabul etmesine izin verir. Argümanlar bir sözlük olarak iletilir.
print() Belirtilen mesajı konsola veya diğer standart çıkış cihazına gönderir.
get() Sözlükten belirtilen anahtarla ilişkili değeri alır. Anahtar bulunamazsa varsayılan değeri döndürür.
join() Yinelenebilir bir öğenin (ör. liste veya tanımlama grubu) öğelerini belirtilen bir ayırıcıyla tek bir dizede birleştirir.
f-string Küme parantezleri içindeki ifadelerin çalışma zamanında değerlendirilmesine olanak tanıyan biçimlendirilmiş bir dize değişmez değeri.

Python'da *args ve **kwargs konularına derinlemesine bakış

Sağlanan komut dosyaları nasıl kullanılacağını gösterir *args Ve **kwargs Python işlev tanımlarında. İlk komut dosyası bir işlevi tanımlar foo bu iki gerekli argümanı alır, x Ve y, ardından aşağıdakilerle temsil edilen herhangi bir sayıda ek konumsal argüman gelir: *args. Ararken foo ekstra argümanlarla bunlar bir demet olarak yakalanır ve yazdırılır. Bu, işlevin değişen sayıda bağımsız değişkeni düzgün bir şekilde işlemesine olanak tanır. İkinci fonksiyon, bar, iki gerekli argümanı ve herhangi bir sayıda anahtar kelime argümanını kabul eder. **kwargs. Bu anahtar kelime bağımsız değişkenleri bir sözlükte toplanarak işlevin esnek adlandırılmış girişleri işlemesine olanak tanır.

İkinci örnek komut dosyası şunları tanıtır: example_function Ve greet kullanımını daha iyi göstermek için işlevler *args Ve **kwargs. example_function hem konumsal hem de anahtar kelime argümanlarını yazdırarak koleksiyonlarını sırasıyla tuple'lar ve sözlükler halinde sergiler. greet işlevi pratik bir kullanım durumunu vurgular; **kwargs özelleştirilebilir bir karşılama mesajı gibi isteğe bağlı anahtar kelime bağımsız değişkenlerine izin verir. Kaldıraç gücüyle get() üzerinde kwargs Sözlükte, işlev, tebrik anahtar sözcüğü sağlanmadığında varsayılan bir değer sağlayabilir ve bu, bu yapıların gerçek dünya senaryolarında kullanılmasının esnekliğini ve gücünü gösterir.

Python İşlevlerinde *args ve **kwargs kullanımı

Python

def foo(x, y, *args):
    print("Required arguments:", x, y)
    print("Additional arguments:", args)

def bar(x, y, **kwargs):
    print("Required arguments:", x, y)
    print("Keyword arguments:", kwargs)

foo(1, 2, 3, 4, 5)
# Output:
# Required arguments: 1 2
# Additional arguments: (3, 4, 5)

bar(1, 2, a=3, b=4, c=5)
# Output:
# Required arguments: 1 2
# Keyword arguments: {'a': 3, 'b': 4, 'c': 5}

*args ve **kwargs Kullanımını Anlamak

Python

def example_function(*args, **kwargs):
    print("Positional arguments:", args)
    print("Keyword arguments:", kwargs)

example_function(1, 2, 3, a="apple", b="banana")
# Output:
# Positional arguments: (1, 2, 3)
# Keyword arguments: {'a': 'apple', 'b': 'banana'}

def greet(name, *args, **kwargs):
    greeting = kwargs.get('greeting', 'Hello')
    print(f"{greeting}, {name}!")
    if args:
        print("Additional names:", ', '.join(args))

greet("Alice")
# Output: Hello, Alice!

greet("Alice", "Bob", "Charlie", greeting="Hi")
# Output:
# Hi, Alice!
# Additional names: Bob, Charlie

*args ve **kwargs'ın İleri Düzeyde Kullanımı

Temel örneklerin ötesinde, *args Ve **kwargs ileri Python programlamada inanılmaz derecede güçlü araçlar olabilir. Gelişmiş kullanım durumlarından biri fonksiyon dekoratörleridir. Dekoratörler, gerçek kodlarını değiştirmeden işlevleri veya yöntemleri değiştirmenin veya geliştirmenin bir yoludur. Kullanarak *args Ve **kwargsDekoratörler herhangi bir sayıda argümanla çalışacak şekilde yazılabilir, bu da onları son derece esnek ve yeniden kullanılabilir hale getirir. Örneğin, bir günlük dekoratörü herhangi bir işlevi kabul edebilir, bağımsız değişkenlerini ve dönüş değerini günlüğe kaydedebilir ve ardından bu bağımsız değişkenleri kullanarak orijinal işleve iletebilir. *args Ve **kwargs. Bu, dekoratörün herhangi bir değişiklik yapmadan değişen imzalara sahip işlevlerle kullanılmasına olanak tanır.

Bir diğer gelişmiş uygulama ise sınıf yöntemleri ve kalıtım bağlamındadır. Kullanan bir temel sınıf yöntemini tanımlarken *args Ve **kwargstüretilmiş sınıflar bu yöntemi geçersiz kılabilir ve yine de ek bağımsız değişkenleri açıkça listelemeden kabul edebilir. Temel sınıfın olası tüm argümanları önceden bilmesine gerek olmadığından bu, kod bakımını basitleştirebilir ve esnekliği artırabilir. Üstelik, *args Ve **kwargs argümanları ana sınıf yöntemlerine iletmek için kullanılabilir, böylece temel sınıfın davranışını genişletirken veya değiştirirken tam işlevselliğinin korunmasını sağlar.

*args ve **kwargs hakkında Sıkça Sorulan Sorular

  1. Nedir? *args?
  2. Değişken sayıda konumsal argümanı bir işleve iletmek için kullanılırlar.
  3. Nedir? **kwargs?
  4. Bir işleve değişken sayıda anahtar kelime bağımsız değişkeni aktarmanıza olanak tanır.
  5. Kullanabilirmiyim *args Ve **kwargs birlikte?
  6. Evet, konumsal ve anahtar kelime bağımsız değişkenlerinin herhangi bir kombinasyonunu işlemek için her ikisini de aynı işlevde kullanabilirsiniz.
  7. Aktarılan argümanlara nasıl erişebilirim? *args?
  8. Fonksiyon içerisinde bir tuple olarak erişilebilirler.
  9. Aktarılan argümanlara nasıl erişebilirim? **kwargs?
  10. İşlev içinde sözlük olarak erişilebilirler.
  11. Neden kullanayım? *args?
  12. Bir fonksiyonun herhangi bir sayıda konumsal argümanı kabul etmesine izin vererek esnekliğini arttırmak.
  13. Neden kullanayım? **kwargs?
  14. İşlevi daha çok yönlü hale getirebilecek herhangi bir sayıda anahtar kelime bağımsız değişkenini kabul etmek.
  15. Olabilmek *args Ve **kwargs farklı isimlendirilebilir mi?
  16. Evet, isimler geleneklerdir, ancak onlara istediğiniz herhangi bir ismi verebilirsiniz.
  17. Kullanmanın pratik bir örneği nedir? *args?
  18. Birden fazla değeri, bunları toplayan bir fonksiyona aktarmak.
  19. Kullanmanın pratik bir örneği nedir? **kwargs?
  20. Anahtar kelime bağımsız değişkenlerinden sözlük oluşturan bir işlev oluşturma.

*args ve **kwargs ile sonlandırma

Anlamak ve kullanmak *args Ve **kwargs Python'daki işlevler programlama becerilerinizi önemli ölçüde geliştirebilir. Bu araçlar, işlev tanımlarında yüksek derecede esneklik sunarak daha dinamik ve yeniden kullanılabilir kod yazmanıza olanak tanır. Bu kavramlara hakim olarak, işlevlerinizdeki çok çeşitli argümanları ele alabilir, kodunuzu daha uyarlanabilir ve bakımı daha kolay hale getirebilirsiniz.

İster dekoratörler yazıyor olun, ister sınıflarda kalıtımı ele alın, ister sadece bilinmeyen sayıda argüman iletmek isteyin, *args Ve **kwargs gerekli işlevselliği sağlar. Tüm potansiyellerini ortaya çıkarmak ve daha verimli ve güçlü Python programlama için bunları kodlama uygulamalarınıza entegre etmek için bu özellikleri denemeye devam edin.