Merhaba değerli THT üyeleri, bugün sizlere fonksiyonlar ve modül kavramları hakkında bilgi vereceğim. Peki bunlar nedir, ne işe yarar diye soracak olursanız hepsi hakkında kısa kısa bilgi vereyim.
Aslında şu zamana kadar birçok fonksiyon öğrendik. Mesela, print(), len(), type() gibi. Yani fonksiyonlar belli işlevi olan ve sürekli kullandığımız yapılardır.
Peki modüller nedir ? Bunu bir örnek vererek tanımlayacağım. Şimdi bir sayının faktöriyelini bulmamız gerekti, bunun için 10 satır kod yazmak yerine math modülü bize yardımcı oluyor. Yani bazı işlerimizi ciddi derecede kolaylaştırmaya yarıyor.
Evet, bu kısa tanımlardan sonra artık başlayabiliriz.
Python'da fonksiyonlar def olarak ifade ediliyor. Fonksiyonları bir kez daha tanımlayacak olursak bazı karmaşık işlerimizi kolaylaştırmaya yarayan ve sıklıkla kullandığımız yapılardır.
İsterseniz "ikiyeböl" isimli bir fonksiyon tanımlayalım.
Peki ben bu fonksiyonu nasıl çalıştırırım ?
Gördüğünüz gibi 3 çıktısını aldım.
Fonksiyonlarda return
Evet, artık fonksiyonlarda return kavramını öğreneceğiz. return kısaca değer döndürmeye yarayan bir ifadedir. Bunu örnek yaparak anlayacağız.
toplam'ın türüne bakalım neymiş.
Gördüğünüz gibi nonetype yani herhangi bir türü yok.
Lambda Fonksiyonları
Lambda ifadeleri aslında fonksiyon yazarken genel o fonksiyonu tek satırda yazmamızı sağlıyor. Yani gayet kullanışlı diyebiliriz.
Bunu örneklerle pekiştirelim isterseniz.
Çıktısını aldık. Böyle bir fonksiyon tanımladık, peki bunu tek satırda nasıl tanımlarız, bakalım
Ve gördüğünüz gibi yine aynı çıktıyı aldık.
Aslında bu lambda ifadesi gömülü fonksiyonlar olan map(),filter(),reduce() Fonksiyonları ile daha etkin bir şekilde kullanılır. Onu da başka bir konuda ele alırız. Şuanlık öğrenmemiz gereken kısım buydu
Artık modüllere geçebiliriz.
Şimdi modüller nedir, ne işe yarar diye soracak olursak cevabı aslında çok basit.
İçinde birçok fonksiyonu ve nesneyi barındıran ve program yazarken işimizi cidden kolaylaştıran araçlardır ve program yazarken modülleri programımıza dahil etmemiz gerekiyor. Bakalım nasıl kullanılıyorlar.
Mesela time modülünü programımızda kullanmak istiyorsak bunun için "import time" diyerek içeri aktarabiliriz.
time modülünün içinde bulundurduğu fonksiyon ve nitelikleri dir(modül_adı) fonksiyonunu kullanıyoruz.
Mesela time modülünün içerisindekileri dir fonksiyonu ile ekrana çıktı olarak bastırdım. Genel "sleep" çok kullanılır.
Peki bu fonksiyonların neye yaradıklarını nasıl öğreneceğiz diye soracak olursanız help fonksiyonu yardımımıza koşuyor.
help(modül_adı) dediğimizde ekran çıktı basacaktır.
Peki ben modülün içindeki tüm fonksiyonların ne işe yaradığını değil de, sadece bir fonksiyonun ne işe yaradığını öğrenmek istersem ne yapacağım ?
help(modül_adı.fonksiyon)
Burada mesela time modülünün barındırdığı sleep fonksiyonun ne işe yaradığına bakalım;
Çıktısını aldık. Burada bize, verilen saniye sayısına göre erteleme yapacağını belirtiyor.
Peki bu fonksiyonları nasıl kullanacağız ?
Ufak bir demo yapalım.
Şimdi böyle bir kod yazdık ve burada can alıcı nokta şu. İlk print ekrana basıldıktan sonra program 1 saniye bekletiliyor ve sonra diğer print çalışıyor ve ekrana çıktı bastırıyor. Aslında mantık tamamen bu.
Peki ben time modülünün ismini değiştirip kullanamam mı, kullanırım. Peki nasıl ?
Mesela ben time.sleep olarak yazmak istemiyorum da sadece fonksiyon ismini yazıp çalıştırmak istiyorum, peki bunu nasıl yaparım ?
from time import *
Böyle bir şey yazdım. Bu şekilde de içe aktarabiliriz. Bunun + yanı şu: artık modül ismini yazmamıza gerek yok. Nasıl mı ?
Bu sefer modül ismini yazmadım ve sorunsuz bir şekilde program çalıştı.
Son olarak modülün barındırdığı tüm fonksiyonları içe aktarmak yerine bazılarını nasıl aktarırız ?
from time import sleep
Komutuyla aktarabiliriz. Fonksiyon eklenmesi durumunda "," ile ayırarak yazınız.
Şimdi ufak bir demo yaparak bunları pekiştirelim.
Bu demoda nesne tabanlı programlama konusu olan class mevcuttur. Anlatımımda ondan bahsetmedim lakin şu konuya bakabilirsiniz;
https://www.turkhackteam.org/python...nli-programlamaya-giris-tht-ar-ge-kulubu.html
Aslında şu zamana kadar birçok fonksiyon öğrendik. Mesela, print(), len(), type() gibi. Yani fonksiyonlar belli işlevi olan ve sürekli kullandığımız yapılardır.
Peki modüller nedir ? Bunu bir örnek vererek tanımlayacağım. Şimdi bir sayının faktöriyelini bulmamız gerekti, bunun için 10 satır kod yazmak yerine math modülü bize yardımcı oluyor. Yani bazı işlerimizi ciddi derecede kolaylaştırmaya yarıyor.
Evet, bu kısa tanımlardan sonra artık başlayabiliriz.
Python'da fonksiyonlar def olarak ifade ediliyor. Fonksiyonları bir kez daha tanımlayacak olursak bazı karmaşık işlerimizi kolaylaştırmaya yarayan ve sıklıkla kullandığımız yapılardır.
İsterseniz "ikiyeböl" isimli bir fonksiyon tanımlayalım.
Kod:
def ikiyeböl(a,b):
print("Bölümleri:",a/b)
Peki tanımlandı mı diye bakalım.
type(ikiyeböl)
-function
Evet, gördüğünüz gibi fonksiyon olarak tanımlanmış.
Peki ben bu fonksiyonu nasıl çalıştırırım ?
Kod:
ikiyeböl(12,4)
-Bölümleri: 3.0
Gördüğünüz gibi 3 çıktısını aldım.
Fonksiyonlarda return
Evet, artık fonksiyonlarda return kavramını öğreneceğiz. return kısaca değer döndürmeye yarayan bir ifadedir. Bunu örnek yaparak anlayacağız.
Kod:
Şimdi iki tane fonksiyon tanımlayacağım.
def ikiyleçarp(a):
print("Çarpımı:",a*2)
def topla(a,b):
print("Toplamları:",a+b
toplam = topla(1,2)
print(ikiyleçarp(toplam))
-Toplamları: 3
Çıktısını aldım lakin sayıyı 2 ile çarpamadı çünkü topla fonksiyonundan değer döndüremedik.
toplam'ın türüne bakalım neymiş.
Kod:
type(toplam)
-NoneType
Gördüğünüz gibi nonetype yani herhangi bir türü yok.
Kod:
def ikiyleçarp(a):
return a* 2
def topla(a,b):
return a+b
toplam = topla(1,2)
print(ikiyleçarp(toplam))
-6
Ve 6 çıktısı aldık. İşte return ifadesinin mantığı tam da bu şekilde. Sonucu tekrar tekrar yollamaya yarıyor.
Lambda Fonksiyonları
Lambda ifadeleri aslında fonksiyon yazarken genel o fonksiyonu tek satırda yazmamızı sağlıyor. Yani gayet kullanışlı diyebiliriz.
Bunu örneklerle pekiştirelim isterseniz.
Kod:
def çıkarma(a,b):
print("Farkları:",a-b)
çıkarma(12,4)
-Farkları: 8
Çıktısını aldık. Böyle bir fonksiyon tanımladık, peki bunu tek satırda nasıl tanımlarız, bakalım
Kod:
çıkarma = lambda a,b: a-b
çıkarma(12,4)
-8
Ve gördüğünüz gibi yine aynı çıktıyı aldık.
Aslında bu lambda ifadesi gömülü fonksiyonlar olan map(),filter(),reduce() Fonksiyonları ile daha etkin bir şekilde kullanılır. Onu da başka bir konuda ele alırız. Şuanlık öğrenmemiz gereken kısım buydu
Artık modüllere geçebiliriz.
Şimdi modüller nedir, ne işe yarar diye soracak olursak cevabı aslında çok basit.
İçinde birçok fonksiyonu ve nesneyi barındıran ve program yazarken işimizi cidden kolaylaştıran araçlardır ve program yazarken modülleri programımıza dahil etmemiz gerekiyor. Bakalım nasıl kullanılıyorlar.
Mesela time modülünü programımızda kullanmak istiyorsak bunun için "import time" diyerek içeri aktarabiliriz.
time modülünün içinde bulundurduğu fonksiyon ve nitelikleri dir(modül_adı) fonksiyonunu kullanıyoruz.
Mesela time modülünün içerisindekileri dir fonksiyonu ile ekrana çıktı olarak bastırdım. Genel "sleep" çok kullanılır.
Kod:
['_STRUCT_TM_ITEMS',
'__doc__',
'__loader__',
'__name__',
'__package__',
'__spec__',
'altzone',
'asctime',
'clock',
'ctime',
'daylight',
'get_clock_info',
'gmtime',
'localtime',
'mktime',
'monotonic',
'perf_counter',
'process_time',
'sleep',
'strftime',
'strptime',
'struct_time',
'time',
'timezone',
'tzname']
Peki bu fonksiyonların neye yaradıklarını nasıl öğreneceğiz diye soracak olursanız help fonksiyonu yardımımıza koşuyor.
help(modül_adı) dediğimizde ekran çıktı basacaktır.
Peki ben modülün içindeki tüm fonksiyonların ne işe yaradığını değil de, sadece bir fonksiyonun ne işe yaradığını öğrenmek istersem ne yapacağım ?
help(modül_adı.fonksiyon)
Burada mesela time modülünün barındırdığı sleep fonksiyonun ne işe yaradığına bakalım;
Kod:
"Help on built-in function sleep in module time:
sleep(...)
sleep(seconds)
Delay execution for a given number of seconds. The argument may be
a floating point number for subsecond precision"
Çıktısını aldık. Burada bize, verilen saniye sayısına göre erteleme yapacağını belirtiyor.
Peki bu fonksiyonları nasıl kullanacağız ?
Ufak bir demo yapalım.
Kod:
print("Bilgiler kontrol ediliyor...")
time.sleep(1)
print("İşlem başarıyla tamamlandı.")
-Bilgiler kontrol ediliyor...
-İşlem başarıyla tamamlandı.
Şimdi böyle bir kod yazdık ve burada can alıcı nokta şu. İlk print ekrana basıldıktan sonra program 1 saniye bekletiliyor ve sonra diğer print çalışıyor ve ekrana çıktı bastırıyor. Aslında mantık tamamen bu.
Peki ben time modülünün ismini değiştirip kullanamam mı, kullanırım. Peki nasıl ?
Kod:
import time as zaman
Dedim ve bakalım az önceki kod satırımızda çalışacak mı ?
print("Bilgiler kontrol ediliyor...")
zaman.sleep(1)
print("İşlem başarıyla tamamlandı.")
time yerine zaman yazdım ve program başarıyla çalıştı.
-Bilgiler kontrol ediliyor...
-İşlem başarıyla tamamlandı.
from time import *
Böyle bir şey yazdım. Bu şekilde de içe aktarabiliriz. Bunun + yanı şu: artık modül ismini yazmamıza gerek yok. Nasıl mı ?
Kod:
print("Bilgiler kontrol ediliyor...")
sleep(1)
print("İşlem başarıyla tamamlandı.")
-Bilgiler kontrol ediliyor...
-İşlem başarıyla tamamlandı.
Son olarak modülün barındırdığı tüm fonksiyonları içe aktarmak yerine bazılarını nasıl aktarırız ?
from time import sleep
Komutuyla aktarabiliriz. Fonksiyon eklenmesi durumunda "," ile ayırarak yazınız.
Şimdi ufak bir demo yaparak bunları pekiştirelim.
Bu demoda nesne tabanlı programlama konusu olan class mevcuttur. Anlatımımda ondan bahsetmedim lakin şu konuya bakabilirsiniz;
https://www.turkhackteam.org/python...nli-programlamaya-giris-tht-ar-ge-kulubu.html
Kod:
import time
#Bir öğretmenin sorumlu olabileceği öğrenci sayısı en fazla 40'tır.
class Öğretmen():
def __init__(self,ad = "Ahmet",soyad = "Kuşçu",maaş = 2500,okul = "İBAL",sorumlu_olduğu_öğrenci_sayısı = 40,ders = ["Matematik"]):
self.ad = ad
self.soyad = soyad
self.maaş = maaş
self.okul = okul
self.sorumlu_olduğu_öğrenci_sayısı = sorumlu_olduğu_öğrenci_sayısı
self.ders = ders
def bilgileri_goster(self):
print("""
Personel Bilgileri(Öğretmen)
Ad : {}
Soyad : {}
Maaş : {}
Okul : {}
Sorumlu Olduğu Öğrenci Sayısı : {}
Öğretmenin girdiği ders : {}
""".format(self.ad,self.soyad,self.maaş,self.okul,self.sorumlu_olduğu_öğrenci_sayısı,self.ders))
def okul_değiştir(self,yeni_okul):
print("Okul değiştiriliyor..")
time.sleep(1)
self.okul = yeni_okul
def personel_adını_değiştir(self,yeni_ad,yeni_soyad):
print("Ad değiştiriliyor..")
time.sleep(1)
self.ad = yeni_ad
self.soyad = yeni_soyad
def öğrenci_sayısını_değiştir(self):
while True:
yanıt = input("Öğrenci sayısını arttırmak için 'x', azaltmak için 'z' tuşlayınız. Çıkış yapmak için de 'q' tuşlayınız.")
if(yanıt == "x"):
if (self.sorumlu_olduğu_öğrenci_sayısı < 40):
self.sorumlu_olduğu_öğrenci_sayısı += 1
print("Öğrenci sayısı:", self.sorumlu_olduğu_öğrenci_sayısı)
elif(yanıt == "z" ):
if (self.sorumlu_olduğu_öğrenci_sayısı > 0):
self.sorumlu_olduğu_öğrenci_sayısı -= 1
print("Öğrenci sayısı:", self.sorumlu_olduğu_öğrenci_sayısı)
elif(yanıt == "q"):
print("Çıkış yapılıyor..")
time.sleep(1)
break
else:
print("Güncel öğrenci sayısı :",self.sorumlu_olduğu_öğrenci_sayısı)
def ders_değiştir(self,değiştirilecek_ders):
print("Ders değiştiriliyor..")
time.sleep(1)
self.ders = değiştirilecek_ders
def ek_hesap(self,ek_hesap_miktarı):
print("Zam yapılıyor..")
self.maaş += ek_hesap_miktarı
öğretmen = Öğretmen()
print("""
***********************************************************
Öğretmen Bilgi Paneli
İşlemler;
1.Personel bilgilerini göster
2.Personel'in okulunu değiştir
3.Personel'in adını değiştir
4.Personel'in sorumlu olduğu öğrenci sayısını değiştir
5.Personel'in girdiği dersi değiştir
6.Personel'in ek hesabını yatır
***********************************************************
""")
while True:
işlem = input("İşlem seçiniz :")
if (işlem == "çıkış"):
print("Programdan çıkılıyor..")
time.sleep(1)
elif (işlem == "1"):
öğretmen.bilgileri_goster()
elif (işlem == "2"):
okul = yeni_okul = input("Yeni bir okul giriniz:")
öğretmen.okul_değiştir(yeni_okul)
elif (işlem == "3"):
ad = yeni_ad = input("Yeni personel adını giriniz.")
soyaad = yeni_soyad = input("Yeni personel soyadını giriniz.")
öğretmen.personel_adını_değiştir(yeni_ad,yeni_soyad)
elif(işlem == "4"):
öğretmen.öğrenci_sayısını_değiştir()
elif(işlem == "5"):
ders = değiştirilecek_ders = input("Yeni dersi giriniz:")
öğretmen.ders_değiştir(değiştirilecek_ders)
elif(işlem == "6"):
öğretmen.ek_hesap(ek_hesap_miktarı=int(input("Miktarı Giriniz:")))
Son düzenleme: