Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Birçok yeni python geliştiricilerinin sihirli *args ve **kwargs değişkenlerini anlamakta zorluk çektiklerini gördüm. Peki bunlar nedir? İlk olarak şunu söyleyeyim, *args veya **kwargs olarak yazmak zorunda değilsiniz. Sadece * (yıldız işareti) yazmak zorundasınız. Ayrıca *var ve **vars olarak da yazabilirsiniz. *args ve **kwargs olarak yazamamızın sebebi, sadece süregelen bir söylemdir (halihazırda böyle kullanılmaktadır). Pekala ilk olarak *args değişkenine bakalım.
- *args Kullanımı
- *args ve **kwargs değişkenleri genellikle fonksiyon tanımlamada kullanılır. *args ve **kwargs fonksiyona birden fazla değişken vermene izin verir. Burada değişkenden kasıtımız, kullanıcının senin fonksiyonuna kaç farklı değişken verilebileceğini önceden bilmemenizdir, bu yüzden bunun gibi durumlarda bu iki değişkeni kullanırsınız. *args tipsiz(anahtar kelimesiz) bir argüman listesi göndermek için kullanılır. İşte size daha iyi anlamanıza yardımcı olacak bir örnek:
- .. code:: python
- def test_var_args(f_arg, *argv):
- print("first normal arg:", f_arg)
- for arg in argv:
- print("another arg through *argv:", arg)
- test_var_args('yasoob', 'python', 'eggs', 'test')
- Bu fonksiyon aşağıdaki sonucu verir:
- first normal arg: yasoob
- another arg through *argv: python
- another arg through *argv: eggs
- another arg through *argv: test
- Umarım bu açıklama tüm karışıklıkları gidermiştir. Şimdi **kwargs hakkında konuşalım.
- **kwargs Kullanımı
- **kwargs fonksiyona değişkenin uzunluğu kadar anahtar kelime (değer) vermene izin verir. **kwargs (named arguments) (isimlendirilmiş değer) durumları yönetilmek isteniyorsa kullanılmalı. İşte size konuyla ilgili bir örnek:
- .. code:: python
- def greet_me(**kwargs):
- for key, value in kwargs.items():
- print("{0} = {1}".format(key, value))
- >>> greet_me(name="yasoob")
- name = yasoob
- Yukarıda verilen örnek ile keyworded argument listelemeyi fonksiyonda nasıl kullandığımızı görebilirsiniz. Bu sadece **kwargs hakkında temel bilgilerdir ve ne kadar kullanışlı olduklarını görebilirsiniz. Şimdi, *args ve **kwargs değerlerini kullanarak nasıl liste veya dictionary değerleri verilerek fonksiyon çağrılır onu konuşalım.
- *args ve **kwargs Kullanarak Fonksiyon Çağırma
- Şimdi burada *args ve **kwargs kullanarak nasıl fonksiyon çağrılır göreceğiz. Küçük bir fonksiyonumuz olduğunu düşünelim:
- .. code:: python
- def test_args_kwargs(arg1, arg2, arg3):
- print("arg1:", arg1)
- print("arg2:", arg2)
- print("arg3:", arg3)
- Şimdi bu küçük fonksiyona *args veya **kwargs argumanlarını(değerlerini) geçirmek için kullanabilirsiniz. İşte nasıl yapılacağına örnek:
- .. code:: python
- # first with *args
- >>> args = ("two", 3, 5)
- >>> test_args_kwargs(*args)
- arg1: two
- arg2: 3
- arg3: 5
- # now with **kwargs:
- >>> kwargs = {"arg3": 3, "arg2": "two", "arg1": 5}
- >>> test_args_kwargs(**kwargs)
- arg1: 5
- arg2: two
- arg3: 3
- *args, **kwargs ve resmi args kullanım sırası ---->Küçük başlık
- Eğer bu üç değeri fonksiyon içerisinde kullanmak istiyorsanız o zaman sıralama şu şekildedir
- .. code:: python
- some_func(fargs, *args, **kwargs)
- Ne zaman kullanmalıyız bu değerleri?
- Kullanımı sizin gereksinimlerinize bağlıdır. En çok kullanım durumu, fonksyion dekorasyonu(emin olamadım) (başka bölümde tartışıldı) yaparken ki durumdur. Ayrıca maymun yamalarında da (monkey patching) kullanılabilir. Maymun yaması açıklarsak, kod çalışıyor durumdayken (runtime) kodda değişiklik yapmaktır. get_info adında bir fonksiyonun olduğunu, bu fonksiyonunda API çağırdığını ve cevap olarak veri döndüğünü düşünelim. Eğer bu fonksiyonu test etmek istersek, çağrılan API ile istenilen test verisinin yeri değiştirilebilir. Mesela:
- import someclass
- def get_info(self, *args):
- return "Test data"
- someclass.get_info = get_info
- Eminim ki sizde birkaç kullanım durumları düşünebilirsiniz.
Add Comment
Please, Sign In to add comment