#!/usr/bin/env python # coding: utf-8 # # İç içe Fonksiyonlar ve Fonksiyon Parametreleri # # Bu bölümle birlikte decorator fonksiyonların mantığını anlamaya çalışacağız. Decoratorları daha iyi anlamak için fonksiyonlara biraz daha derinlemesine bakmaya çalışalım. # # ### \*args ve **kwargs # # Fonksiyonlara argüman göndermenin esnek bir şekilde yapıldığını biliyoruz. İsterseniz ilk olarak yıldızlı argümanları hatırlamaya çalışalım. # In[4]: def fonksiyon(*args): # İstediğimiz sayıda argüman gönderebiliyoruz. print(args) for i in args: print(i) # In[5]: fonksiyon(1,2,3) # In[6]: fonksiyon(1,2,3,4,5) # In[58]: def fonksiyon(isim,*args): print("İsim:",isim) for i in args: print(i) # In[59]: fonksiyon("Murat",1,2,3,4,5,6,7,8) # Şimdi de yeni öğreneceğimiz keyword argümanlara bakalım. # In[10]: def fonksiyon(**kwargs): print(kwargs) # In[11]: fonksiyon(isim = "Murat", soyisim = "Coşkun", numara = 12345) # Dikkat ederseniz 2 yıldız koyarak keyword argümanlar ile (anahtar kelimeli argümanlar) fonksiyonumuzu tanımladık ve argümanlara isim vererek fonksiyonumuzu çağırdığımızda isimleri anahtar kelime , argüman değerlerini değer olarak alarak fonksiyonumuz sözlük oluşturdu. İşte keyword argümanlar bu şekilde kullanılabiliyor. # In[13]: def fonksiyon(**kwargs): for i,j in kwargs.items(): print("Argüman İsmi:",i,"Argüman Değeri:",j) # In[14]: fonksiyon(isim = "Murat", soyisim = "Coşkun", numara = 12345) # Şimdi de \*args ve \**kwargs argümanlarını beraber kullanalım. # In[17]: def fonksiyon(*args,**kwargs): for i in args: print("Argümanlar:",i) print("------------------------------") for i ,j in kwargs.items(): print("Argüman İsmi:",i,"Argüman Değeri:",j) # In[18]: fonksiyon(1,2,3,4,5,6,7,isim = "Murat",soyisim = "Coşkun", numara = 12345) # ### İç içe fonksiyonlar # # # Pythonda fonksiyonlar da birer obje oldukları için hem bir tane değişkene atanabilirler, hem de başka bir fonksiyonun içinde tanımlanabilirler. Şimdi bunlara bakmaya başlayalım. # In[29]: def selamla(isim): print("Selam",isim) # In[30]: selamla("Ayşe") # In[31]: # Bir tane değişkene atıyoruz. merhaba = selamla # In[32]: merhaba # Obje tipi fonksiyon oldu. # In[33]: selamla # Obje tipi fonksiyon # In[34]: merhaba("Ayşe") # Fonksiyon olduğu için artık bu isimle de kullanabilirim. # In[35]: del selamla # Selamla fonksiyonunu siliyorum. # In[36]: selamla # In[37]: merhaba("Kemal") # selamla objesi silinmesine rağmen merhaba objesi silinmedi. # Şimdi de isterseniz iç içe fonksiyon tanımlamayı öğrenelim. # In[42]: def fonksiyon(): def fonksiyon2(): print("Küçük fonksiyondan Merhaba") print("Büyük fonksiyondan Merhaba") fonksiyon2() # Tanımladığım fonksiyonu kullanabilirim. # In[43]: fonksiyon() # In[45]: fonksiyon2() # Lokal bir değişken olduğu için fonksiyon() çağrısından sonra yok oldu. # In[56]: def fonksiyon(*args): # args : (1,2,3,4,5,6) def topla(args): # (1,2,3,4,5,6) toplam = 0 for i in args: toplam += i return toplam print(topla(args)) # In[57]: fonksiyon(1,2,3,4,5,6) # İşte bu kadar ! Bir sonraki dersimizde fonksiyonlara devam edeceğiz. # In[ ]: