Python'da Fonksiyonlar & Modüller // PALA

PALA

Özel Üye
26 Mar 2018
12,753
33
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.

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ı.
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ı ?

Kod:
print("Bilgiler kontrol ediliyor...")

sleep(1)

print("İşlem başarıyla tamamlandı.")

-Bilgiler kontrol ediliyor...
-İşlem başarıyla tamamlandı.
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



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:

KARA ALP

Uzman üye
15 Eyl 2018
1,071
68
İSTİHBARAT
Emeğine sağlık güzel olmuş geniş çaplı araştırma yapılabilir öğrenmek isteyenler için geniş çaplı bir konu
 

PALA

Özel Üye
26 Mar 2018
12,753
33
Elinize Emeğinize Sağlık Hocam

Emeğine sağlık güzel olmuş geniş çaplı araştırma yapılabilir öğrenmek isteyenler için geniş çaplı bir konu

Anlatıma hayran kaldım hocam teşekkürler . :)

Elinize sağlık.

Elinize Sağlık Komutanım Yine Döktürmüşsünn.

Eline sağlık pala video eklesen daha güzel olur

Teşekkür ederim arkadaşlar, bir diğer konumda videolu anlatım yapacağım.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.