Guest User

Untitled

a guest
Jun 21st, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.95 KB | None | 0 0
  1. 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.
  2.  
  3. *args Kullanımı
  4.  
  5. *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:
  6.  
  7. .. code:: python
  8.  
  9. def test_var_args(f_arg, *argv):
  10. print("first normal arg:", f_arg)
  11. for arg in argv:
  12. print("another arg through *argv:", arg)
  13.  
  14. test_var_args('yasoob', 'python', 'eggs', 'test')
  15.  
  16. Bu fonksiyon aşağıdaki sonucu verir:
  17.  
  18. first normal arg: yasoob
  19. another arg through *argv: python
  20. another arg through *argv: eggs
  21. another arg through *argv: test
  22.  
  23. Umarım bu açıklama tüm karışıklıkları gidermiştir. Şimdi **kwargs hakkında konuşalım.
  24.  
  25. **kwargs Kullanımı
  26.  
  27. **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:
  28.  
  29. .. code:: python
  30.  
  31. def greet_me(**kwargs):
  32. for key, value in kwargs.items():
  33. print("{0} = {1}".format(key, value))
  34.  
  35. >>> greet_me(name="yasoob")
  36. name = yasoob
  37.  
  38.  
  39. 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.
  40.  
  41.  
  42. *args ve **kwargs Kullanarak Fonksiyon Çağırma
  43.  
  44. Şimdi burada *args ve **kwargs kullanarak nasıl fonksiyon çağrılır göreceğiz. Küçük bir fonksiyonumuz olduğunu düşünelim:
  45.  
  46. .. code:: python
  47.  
  48. def test_args_kwargs(arg1, arg2, arg3):
  49. print("arg1:", arg1)
  50. print("arg2:", arg2)
  51. print("arg3:", arg3)
  52.  
  53. Şimdi bu küçük fonksiyona *args veya **kwargs argumanlarını(değerlerini) geçirmek için kullanabilirsiniz. İşte nasıl yapılacağına örnek:
  54.  
  55. .. code:: python
  56.  
  57. # first with *args
  58. >>> args = ("two", 3, 5)
  59. >>> test_args_kwargs(*args)
  60. arg1: two
  61. arg2: 3
  62. arg3: 5
  63.  
  64. # now with **kwargs:
  65. >>> kwargs = {"arg3": 3, "arg2": "two", "arg1": 5}
  66. >>> test_args_kwargs(**kwargs)
  67. arg1: 5
  68. arg2: two
  69. arg3: 3
  70.  
  71.  
  72. *args, **kwargs ve resmi args kullanım sırası ---->Küçük başlık
  73.  
  74. Eğer bu üç değeri fonksiyon içerisinde kullanmak istiyorsanız o zaman sıralama şu şekildedir
  75.  
  76. .. code:: python
  77.  
  78. some_func(fargs, *args, **kwargs)
  79.  
  80.  
  81. Ne zaman kullanmalıyız bu değerleri?
  82.  
  83. 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:
  84.  
  85. import someclass
  86.  
  87. def get_info(self, *args):
  88. return "Test data"
  89.  
  90. someclass.get_info = get_info
  91.  
  92.  
  93. Eminim ki sizde birkaç kullanım durumları düşünebilirsiniz.
Add Comment
Please, Sign In to add comment