Merhaba arkadaşlar. Bu yazımda en temelden ileri seviyeye Python programlama dili hakkında bilgi vererek hızlı bir Python turuna çıkacağız. Kemerleri bağlayın uçuşa geçiyoruz.
Python Nedir?
Python bir programlama dilidir. Üstelik pek çok dile kıyasla öğrenmesi kolay bir programlama dilidir. Bu yüzden, eğer daha önce hiç programlama deneyiminiz olmamışsa, programlama maceranıza Python’la başlamayı tercih etmeniz doğru olacaktır. Geliştirilmeye 1990 yılında Guido van Rossum tarafından Amsterdam’da başlanmıştır.
İsmini birçok kişi yılandan aldığını sansada Guido van Rossum’un sevdiği, Monty Python adlı altı kişilik bir İngiliz komedi grubunun Monty Python’s Flying Circus adlı gösterisinden almıştır.
- 1994 yılında Python 1.0 kullanıma sunuldu.
- 2000 yılında Python 2.0 sürümü kullanıma sunuldu.
- 2008 yılında Python 3.0 sürümü kullanıma sunuldu.
Python Yazmak İçin Kullanılan IDE’ler
Python yazarken bir çok farklı IDE kullanılmaktadır. Eğer sunum şeklinde hem notlarınızı tutmak ya da bir yerde sunum yapacaksanız Jupyter Notebook ya da Google Colab kullanabilirsiniz. Google Colab ile Jupyter Notebook arasındaki fark Google Colab tamamen online çalışarak tüm çalışmalarınızı Google Drive’da yedeklemektedir ama Jupyter Notebook’u bilgisayara kurmak gerekir.
Google Colab ve Jupyter Notebook haricinde PyCharm, Visual Studio Code gibi IDE’ler de kullanmak mümkündür.
Pythonu aşağıdaki linkten bilgisayarınıza indirebilirsiniz:
Neden Python Öğrenmeliyiz?
- Genel amaçlı, yüksek seviyeli ve yorumlanabilir bir dildir.
- Açık kaynak kodludur.
- Dinamik tip tanımlamalı bir dildir.
- Birçok platformda çalışma imkanı sunar: Grafik , veritabanı , oyun yapay zeka vb
- Nesne yönelimlidir.
- Öğrenmesi kolaydır.
Değişkenler
Değişkenler bir verininin değerini saklamayı sağlarlar.
Değişkenler verilerin sonradan değiştirilmesine olan sağladığı için çok kullanışlıdır. Mesela bir bankada çalışıyoruz ve faiz oranını mesela 1.3'ten 1.1'e düşürmek isteniyor ve elimizde 1000 satırlık veri var bu oranı bir değişkene atarsak tek seferde bir yerde 1.1 yapmamız yeterli olacaktır. Diğer durumda 1000 satırlık kodu tek tek incelememiz gerekir.
Değişken Adlandırma Kuralları
- Değişken adlarında sayılar, harfler ya da alt çizgi kullanılabilir. Ama değişken isimlendirmeleri alt çizgi ya da harfle başlar.
1berkcan = 5 Hatalı bir adlanırma kuralıberkcan1 = 5 Doğru bir adlandırma_berkcan = 5 Doğru bir adlandırma
- Değişken adlandırırken Türkçe karakter kullanmamaya özen göstermeliyiz.
ağırlık = 5 hatalı kullanımagirlik = 5 doğru kullanım
- Değişken isimlendirirken boşluk kullanılmaz. Genellikle camelCase adlandırma yaparız.
isim soyisim = “Berkcan Gümüşışık” Hatalı kullanımisimSoyisim = “Berkcan Gümüşışık” Doğru kullanımisim_soyisim = “Berkcan Gümüşışık” Doğru kullanım
- Python anahtar kelimeleri kullanılamaz.
- Büyük küçük harf duyarlıdır.
A = "Python"a = "Berkcan"print(A) # Pythonprint(a) # Berkcan
- Değişken adları ne çok kısa, ne de çok uzun olmalıdır. Aynı zamanda kodu okuyan kişi değişkeninin ne için kullanıldığını anlaması gerekir.
print() Fonkisyonu
Ekrana bir çıktı vermeyi sağlayarak ekrana yazdırmayı sağlar. Bir yazılımcının olmazsa olmazı ekrana “Merhaba, Dünya” çıktısı verdirelim.
print("Merhaba Dünya") #Merhaba Dünya
print() Parametreleri
1.sep
sep ifadesi, İngilizcede separator (ayırıcı, ayraç) kelimesinin kısaltmasıdır. Dolayısıyla print() fonksiyonundaki bu sep parametresi, ekrana basılacak öğeler arasına hangi karakterin yerleştirileceğini gösterir. Kullanılmasının veya kullanılmamasının pek bir önemi yoktur. Çünkü görünmese bile hep oradadır.
print("http://", "www.", "google.", "com", sep="")print("Adana", "Mersin", sep="-") # Adana-Mersin
2.end
Tıpkı sep parametresi gibi, end parametresi de print() fonksiyonunda görünmese bile her zaman oradadır. end parametresi ise bu parametrelerin sonuna neyin geleceğini belirler.
print("Bugün günlerden Salı", end=".") # Bugün günlerden Salı.
Yorum Satırları
Python programlama dilinde tek satır halinde açıklama satırı eklemek için # işareti, çoklu yorum satırı için 3 tane tek tırnak kullanılır.
Satırın başı ve sonu arasındaki herhangi bir metin ve kodun Python programlama dili tarafından yok sayılır ve çalıştırılmaz.
# Tekli Yorum Satırı'''Çokluyorumsatırı'''
Kaçış Dizileri
1.Ters Taksim( \ )
Bir karakter dizisi içinde çift tırnak işareti geçiyorsa, o karakter dizisini tek tırnakla; eğer tek tırnak geçiyorsa da o karakter dizisini çift tırnakla tanımlayarak bu sorunun üstesinden gelebiliyorduk. Ama çift tırnak geçen karakter dizilerini yine çift tırnakla tanımlayabiliriz.
print("\"laptop\" kelimesi Türkçede \"dizüstü bilgisayar\" anlamına gelir.") # "laptop" kelimesi Türkçede "dizüstü bilgisayar" anlamına gelir.
2.\n
Yeni satır eklemeyi sağlar.
3. \t
Burada \t adlı kaçış dizisi, sanki Tab (sekme) tuşuna basılmış gibi bir etki oluşturarak boşluk bırakır.
print("abc\tdef") # abc def
type() Methodu
Bir değişkenin integer, float, string ya da boolean olup olmadığını verir. Yani veri tipini verir.
Sayısal Veri Türleri
1.integer
Tam sayıları ifade eder. Mesela 10 20 0 -35
myVariable = 10myVariable2 = 20print(myVariable + myVariable2) # 30print(type(myVariable)) # <class 'int'>
2.float
Ondalıklı sayıları ifade eder. Mesela 10.0 20.5 0.0 -35.8
Python 2 rakamı birbirine böldüğü zaman gerçek sonuca ulaşmak için float değer döndürür.
pi = 3.14print(type(pi)) # <class 'float'>
Aritmetik Operatörler
- +: Toplama
- -: çıkarma
- *: Çarpma
- /: Bölme
- **: Üs alma
- %: Mod alma
- //:Tam Bölme
String Veri Türleri
Metinsel ifadelerdir. Metinsel ifadeler “ “, ‘ ‘, “”” “”” arasına yazılması gerekir. Metinsel ifadelerde eğer tek tırnak ile başlandıysa tek tırnak ile devam edilmesi gerekmektedir.
Metinsel ifadelerin index ile ulaşma imkanı sağlar. Yazılımda index 0'dan başlar. Mesela “Merhaba Dünya” metninin 2. indexinde r vardır. String indexleme işlemi aşağıdaki gibidir.
String Metotları
len() metodu bir metnin kaç karakterden oluştuğunu verir.
x = "Merhaba"print(len(x)) # 7
upper() metodu, metinsel ifade içinde kullandığımız her bir karakteri büyük harfe çevirir.
mesaj = "python öğreniyorum"print(mesaj.upper()) #PYTHON ÖĞRENİYORUM
lower() metodu, metinsel ifade içinde kullandığımız her bir karakteri küçük harfe çevirir.
print(mesaj.lower()) #python öğreniyorum.
capitalize() metodu, bir metinsel ifadenin ilk harfini büyük harfe çevirir.
isim = "berke mert öztürk"print(isim.capitalize()) #Berke Mert Öztürk
swapcase() metodu, metin içindeki küçük karaterleri büyüğe; büyük karakterleri küçüğe çevirir.
isim = "Berkcan"print(isim.swapcase()) # bERKE
replace() metodu, karakter dizisi (string) veri tipindeki bir değişkeni güncellemek için kullanılır.
mesaj = "python öğreniyorum"print(mesaj.replace("ö","o") # python oğreniyorum
split() metodu, karakter dizisi (string) veri tipindeki değişkeni belirtilen karaktere ya da bir ifadeye göre parçalar.
bilgi1 = "Berke Mert Öztürk 23 Ankara"print(bilgi1.split(" ")) #['Berke', 'Mert', 'Öztürk', '22', 'Ankara']
strip() metodu, metinsel ifadenin başından ve sonundan siler. Metod içindeki silinecek karakterler kısmının boş bırakılması durumunda strip metodu boşluk karakterini siler.
metin = " Hello World "print(metin.strip()) # Hello World
startswith metodu, bir metinsel ifadenin bir şeyle başlayıp başlamadığının kontrolünü sağlar true ya da false değer döndürür.
endswith metodu, bir metinsel ifadenin bir şeyle bitip bitmediğinin kontrolünü sağlar true ya da false değer döndürür.
metin = "Hello World"print(metin.startswith("Hel"))#Trueprint(metin.endswith("lo"))#False
find() metodu, ifadenin string içinde kaçıncı indexten itibaren başladığını verir. Bulamadıysa -1 döndürür.
print(metin.find("lo") # 3
isAlpha() metodu, bir ifadenin alfabetik olup olmadığını söyler. True ya da false değer döndürür.
isDigit() metodu, bir ifadenin rakamlarının sıralı olup olmadığını söyler.True ya da false değer döndürür.
String Formatlama
adim = "Berkcan"print("Benim adım {}".format(adim)) #Benim adım Berkeprint(f"Benim adım {adim}")#Benim adım Berkeprint("Benim adım " + adim) #Benim adım Berke
input()
Kullanıcıdan veri girişi almamızı sağlar. input ile veri alırken string gibi davranır bu yüzden input alırken sayı alacaksan int ya da float kullan.
name = input("Adınız nedir: ")print("Merhaba " + name)"""Adınız nedir: BerkeMerhaba Berke"""
Listeler
[ ] içerisinde tutulurlar. Indexleme, veri güncelleme, silme, veri ekleme gibi işlemler yapılabilir. İç içe listeleme işlemi yapılabilir. İçerisinde her veri türünden elema eklenebilir.
ogrenciler = ["Berke","Engin","Derin","Salih"]print(ogrenciler) # ["Berke","Engin","Derin","Salih"]print(ogrenciler[0]) # Berkeogrenciler[3] = "Ahmet"print(ogrenciler) # ["Berke","Engin","Derin","Ahmet"]nestedList = [1,5,"berke",4,[6,"z"]]print(nestedList[0]) #1print(nestedList[1]) #5print(nestedList[4]) #[6,"z"]print(nestedList[4][0]) #6print(nestedList[4][1]) #z
Liste Metotları
append() metodu , listeye yeni eleman eklemeyi sağlar.
ogrenciler = ["Berke","Şevval","Nurana","Mete"]ogrenciler.append("Kaan")print(ogrenciler) #['Berke', 'Şevval', 'Nurana', 'Mete', 'Kaan']
remove() metodu, listeden eleman çıkarmayı sağlar.
ogrenciler = ["Berke","Şevval","Nurana","Mete"]ogrenciler.remove("Kaan")print(ogrenciler) #['Berke', 'Şevval', 'Nurana', 'Mete']
**Olmayan indexe veri eklemek mümkün değildir.**
len() metodu, dizinin kaç elemandan oluştuğunu verir.
sehirler = list(("Ankara","İstanbul"))print(len(sehirler)) #2
clear() metodu, listenin tamamını boşaltır.
sehirler = list(("Ankara","İstanbul"))sehirler.clear()print(sehirler) # []
count() metodu, girilen değerin liste içinde kaç tane bulunduğunu gösterir.
ogrenciler = ["Berkcan","Şevval","Nurana","Mete"]print("Listedeki Berkcan sayısı = " + str(ogrenciler.count("Berkcan"))) # Listedeki Berkcan Sayısı = 1
index() metodu, listedeki elemanın indexini verir. Aranan veriyi ilk bulduğunda durur. Diğer verilerde aynı veri varsa getirmez. Eğer veri bulunamazsa ValueError hatası verir.
ogrenciler = ["Berkcan","Şevval","Nurana","Mete"]print("Berkcan'ın İndexi = " + str(ogrenciler.index("Berkcan")))# Berkcan'ın İndeksi : 0
pop() metodu, listede indexe göre silme işlemini gerçekleştirir.
ogrenciler = ["Berkcan","Şevval","Nurana","Mete"]ogrenciler.pop(3)print(ogrenciler) # ['Berkcan', 'Şevval', 'Nurana']
insert() metodu, listeye indexe göre eleman ekler.
sehirler = []sehirler.insert(0,"İstanbul")sehirler.insert(1,"Ankara")sehirler.insert(2,"Ankara")print(sehirler) #["İstanbul","Ankara","Ankara"]
reverse() metodu, listeyi tersine çevirir.
sehirler = ['Ankara', 'Ankara', 'İstanbul']sehirler.reverse()print(sehirler) # ['Ankara', 'Ankara', 'İstanbul']
sort() metodu, listeyi büyükten küçüğe, alfabetik olarak sıralar.
ogrenciler = ["Berkcan","Şevval","Nurana"]ogrenciler.sort()print(ogrenciler) #['Berkcan', 'Nurana', 'Şevval']
Liste Toplama
liste1 = ["Atıl","Ahmet","Zeynep"]liste2 = ["Mehmet","Mahmut","Atlas"]liste3 = liste1 + liste2print(liste3) #['Atıl', 'Ahmet', 'Zeynep', 'Mehmet', 'Mahmut', 'Atlas']
tuple(Demet)
- Tuple listelere benzerdir.
- Tuple ile liste arasındaki en önemli fark tuple elemanlarının değiştirilemez, liste elemanlarınının değiştirilebilir olmasıdır.
- Performanslı bir data sağlar.
- () içerisinde tanımlanabilir.
- İç içe tuple oluşturulabilir.
- Liste içerisinde tuple, tuple içersinide liste tanımlamak mümkündür.
- Bir kere tanımlandıktan sonra değiştirilemezler yalnızca okunurlar.
- Tek elemansa tuple olduğunu belirtmek için bir virgül koyulmalıdır.
tupleListe = (2,4,6,"Ankara",(2,3,4),[])tupleListe[0] = 6print(tupleListe) # TypeError: 'tuple' object does not support item assignment
Set
- Listelere benzer.
- En önemli özelliği indexsiz ve sırasız elemanlardan oluşmasıdır.
- Veri tekrarı söz konusu değildir. Tüm elemanlar eşsizdir.
- {} içerisinde tanımlanır.
- Çok hızlı bir veri tipidir.
students = {"Engin","Derin","Salih","Berke"}print(students) #{'Salih', 'Berke', 'Engin', 'Derin'} print(type(students)) # <class 'set'>print("Berkcan" in students) #Listede var mı diye sorgulatma True
add() metodu , sete veri eklemeyi sağlar.
update() metodu, sete çoklu veri eklemeyi sağlar.
remove() metodu, çoklu eleman eklemeyi sağlar.
pop() metodu, setin son elemanını siler.
clear() metodu, setin içini boşaltır.
Dictionary(Sözlük)
- Sırasız veri tutar.
- Günlük hayattaki sözlükler gibi düşünebiliriz.
- {} arasına yazılır.
- key- value esasına göre çalışır. {“anahtar kelime” : deger} olarak düşünürsek {key : value} şeklinde değer tutar. {06 : “Ankara”} 06 key Ankara value değeridir.
yemekKaloriSozlugu = {"Elma":100 , "Karpuz":200,"Muz":300}print(yemekKaloriSozlugu)#{'Elma': 100, 'Karpuz': 200, 'Muz': 300} print(type(yemekKaloriSozlugu))# <class 'dict'>
Bir değere ulaşmak istersek key değerini kullanarak erişebiliriz.
yemekKaloriSozlugu = {"Elma":100 , "Karpuz":200,"Muz":300}print(yemekKaloriSozlugu["Elma"]) #100
Sözlüklere integer, float, string ya da tuple veri tipleri kullanılırken listeler ve sözlükler kullanılmaz.
Veri ekleme, silme ve güncelleme işlemleri aşağıdaki gibi yapılmaktadır.
Sözlüklerde Metotlar
.keys() metodu ile sözlükteki tüm key değerlerini verir.
.values() metodu ile sözlükteki tüm value değerlerini getirmeyi sağlar.
. items() metodu ile sözlükteki tüm key value değerleri getirilir.
sozluk = { "table" : "masa", "pencil" : "kalem" }print(sozluk.keys()) #dict_keys(['table', 'pencil'])print(sozluk.values()) # dict_values(['masa', 'kalem'])print(sozluk.items()) # dict_items([('table', 'masa'), ('pencil', 'kalem')])
Boolean
True ya da False değer döndürerek bir şeyin doğru mu yanlış mı olduğunu sağlatan veri türüdür.
dogru = Trueprint(dogru) # Trueyanlis = Falseprint(yanlis) # False
Karşılaştırma Operatörleri
Karşılaştırma operatörleri karar yapılarında çok fazla işimize yararlar.
- = atama operatörüdür. Mesela x = 5 dersek x değerini 5'e atamış oluyoruz.
- == iki değerin birbirine eşit olup olmadığını kontrol eder. Eşitse True eşit değilse False değerini döndürürür.
- != eşit değil mi? Cevap eşit değilse True, eşitse False değerini döndürür.
- > büyüktür.
- < küçüktür.
- >= büyük eşittir.
- <= küçük eştittir.
Mantıksal Operatörler
1. and Operatörü
- True and True = True
- True and False = False
- False and True = False
- False and False= False
Her iki durumda eğer doğruysa True değerini döndürür. Diğer durumlarda hep False değerini döndürür.
hak = 5devam = "e"print((hak > 0) and (devam=="e")) #True
2. or Operatörü
- True orTrue = True
- True or False = True
- False or True = True
- False or False= False
Yalnızca 2 durumun yanlış olduğu zaman False diğer her durumda True değer verir.
x = 5print((x > 0) or (x % 2 == 0)) # True
3. not Operatörü
- True ise False, False ise True yapar.
Karar Yapıları
if kosul1: Kosul1 True olduğunda bu kod bloğu çalışırelif kosul2: Kosul2 True olduğunda bu kod bloğu çalışırelse: Diğer koşullar sağlanmadığı zaman çalışır.
- Eğer if bloğu doğruysa diğer durumlara bakılmaz ve if bloğu altındaki kodlar çalışır.
- Else yapısının kullanılması zorunlu değildir olsa da olur olmasada olur.
- Elif yapısının kullanılması zorunlu değildir olsa da olur olmasada olur.
- Else yapısı if ve varsa elif yapısının false olduğu durumda ikinci nihai durum olarak çalışır .
- elif yapısına birden çok farklı koşullardan doğacak durumların kontrolünü sağlamak için kullanırız .
isim = "Berke Mert Öztürk"if "Öztürk" in isim: # isimde Öztürk varsa print("Varmış")else: print("Yokmuş")
Yukarıdaki kodun çıktısı “Varmış” yazdıracaktır. Bir uygulama örneği yapalım:
Kullanıcıdan vize ve final notu isteyin. Girilen vize notunun %40’ı vegirilen finalnotunun ise %60’ı alınarak yıl sonu not ortalaması hesaplanacaktır.Bu notortalaması eğer 85 ve üzeri ise AA,75 ve 85 arasında ise BA,70 ve 75 arasında ise BB,65 ve 70 arasında ise CB,60 ve 65 arasında ise CC,55 ve 60 arasında ise DC,50 ve 55 arasında ise DD olarak hesaplanacaktır.Bu öğrencinin yıl sonu toplam notu 50’nin altında ise FF ile dersten kalacaktır.Ayrıca öğrencinin final notu 50’nin altında ise direkt FF ile kalacaktır.
in Operatörü
- Belirtilen bir değerin, dizi, metin, liste veya demet gibi bir dizinin öğesi olup olmadığını kontrol eder.
- True ya da False değeri döndürür.
string = "Python"print("p" in string) # Falseprint("y" in string) # Trueliste = [1,2,3,4,5,6]print(1 in liste) # Trueprint(10 in liste) #False
Döngüler
- Döngüler, temel olarak, verilen koşullar karşılanana kadar devam eden tekrar eden bir süreçtir.
- Döngünün koşulu her zaman doğruysa döngü sonsuza kadar devam eder. Hangisine “Sonsuz döngü” denir. Bu tür döngülere genellikle while döngüsünde rastlarız.
- Eğer bir döngünün koşulu baştan yanlışsa, bu nedenle döngünün çalışmasına izin vermez. Sonra buna “sıfır açma döngüsü” denir.
1. for Döngüsü
for Döngüsü , listelerin ,demetlerin, stringlerin ve hatta sözlüklerin üzerinde dolaşmamızı sağlayan bir döngü türüdür. Yapısı şu şekildedir.
for eleman in veriYapisi: Yapılacak İşlemler
Bir liste içerisinde gezinme örneği yapalım:
liste1 = [1,2,3,4,5]for i in liste1: print(i)"""Çıktı:12345"""
Stringler içerisinde for döngüsü ile gezinme yapalım:
string1 = "Python"for i in string1:print(i)"""Python"""
Demetler içerisinde for döngüsü ile gezinme yapalım:
demet = (1,2,3,4)for i in demet:print(i)"""1234"""
Dictionary içerisinde for döngüsü ile gezinme yapalım:
sozluk = {"TL" : "Türkiye","Euro" : "Avrupa", "Dolar":"ABD"}for i in sozluk:print(i)"""TLEuroDolar"""
For döngüsü ile yıldız oluşturan bir uygulama yapalım:
sayi = int(input("Yıldız sayısını giriniz :"))yildiz = ""for x in range(1,sayi+1):yildiz = yildiz +"*"print(yildiz)"""Yıldız Sayısı Giriniz: 5***************"""
2. while Döngüsü
while döngüleri belli bir koşul sağlandığı sürece bloğundaki işlemleri gerçekleştirmeye devam eder. while döngülerinin sona ermesi için koşul durumunun bir süre sonra False olması gereklidir.Yapısı şu şekildedir;
while koşul:Yapılacak İşlemlersum = 0i = 1while i <= 10:sum += ii += 1print("Toplam :", sum) # Toplam : 55
range() Fonksiyonu
range fonksiyonu ile sayıların aralığını belirleyebiliriz. range(başlangıç, bitiş, artış) şeklinde kullanılır.
for x in range(5):print(x)"""01234"""for x in range(1,10,2):print(x)"""13579"""
break ve continue Deyimi
break ifadesi bir döngü içinde çalıştırıldığında, döngüyü durdurur ve ondan dışarı atlar.
i = 0while (i < 10):if(i == 5):breakprint(i)i += 1"""01234"""
continue ifadesi mevcut değeri atlar (geri döndürmez) ve döngüdeki sonraki yinelemeye gider ancak bu döngünün yürütülmesini durdurmaz.
for i in range(7):if(i == 5):continueprint(i)"""012346"""
List Comprehension
Liste işlemlerinde kodu uzun uzadıya yazmak yerine tek bir satırda düzenleme imkanı sunmaktadır.
Normalde list comprehension yapısını kullanmazsak ve bir dizinin elemanları kendisiyle çarpımını yapmak istesek aşağıdaki yapı oluşacaktır.
liste = [1,2,3,4,5,6,7,8,9,10]yeni = []for i in liste: yeni.append(i* i)print(yeni) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
List comprehension yöntemiyle olan çözüm ise daha kısa bir şekilde aşağıdaki gibi bir yapı oluşacaktır:
liste = [1,2,3,4,5,6,7,8,9,10]yeniListe = [i*i for i in liste]print(yeniListe) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
Fonksiyonlar
Bir kodu bir çok yerde kullanmamız gerekiyorsa, her yerde tekrar tekrar yazmayı önler. Programlamanın temeli : DRY(Don’t Repeat Yourself — Kendini tekrar etme)
Fonksiyonların içindeki değişkenler yereldir, yani bir fonksiyonun içinde bir değişken tanımladığınızda, o değişkeni fonksiyonun dışında çağıramayız. Çünkü o değişken o fonksiyona özeldir ve gloabalde kullanılamaz. Ne zaman bir fonksiyon çağırılırsa, fonksiyonu yazdıktan sonra yapmalısınız.
Fonksiyon Yazılması
def fonksiyon_adı(parametre1,parametre2..... (opsiyonel)): # Fonksiyon bloğu Yapılacak işlemler # dönüş değeri - Opsiyonel
Fonksiyon Çağırılması
Tanımlanan bir fonksiyonun kullanılmasına programlama dillerinde Fonksiyon Çağrısı denmektedir. Fonksiyon çağrısı şu şekilde yapılabilmektedir:
fonksiyon_adı(Argüman1,Argüman2....)
Bir fonksiyon örneği yapalım:
def helloWorld(): print("Merhaba")helloWorld() # Merhaba
Argüman
- işlev çağrılırken parantez içindeki işlevlere iletilen değerler (string , number, vb.) (ör. islev_adı (argüman))
- Eğer fonksiyon çağrılırken bir argüman yoksa, bu argümanın değeri None olacaktır. Bu nedenle fonksiyonun içinde ifade edilecek bir değer yoksa, belirlenen değeri kullanılmasını isteyebiliriz. def helloWorld(name = “ziyaretçi”)
- Birden fazla parametre olabilir. Her biri virgülle ayrılır.
def carp(sayi1 = 1 , sayi2 = 1, sayi3 = 1):c = sayi1 * sayi2 * sayi3print(c)carp(2,3) # 6
return
- Kodun tamamında kullanmak için işlevin kodu tamamlandıktan sonra kalan değeri (sonuç değeri) döndürür
- “return” anahtar sözcüğünden sonraki kodlar yürütülmez. Bu, görmezden gelindikleri anlamına gelir.
- return yardımıyla fonksiyonlar değerleri çağrıldığı yere döndürebilir ve biz de bu değerleri istediğimiz yerde kullanabiliriz.
def dikUcgenAlaniHesapla(a,b):return (a * b)/2print(dikUcgenAlaniHesapla(2,3)) # 3
*args
Sınırsız sayıda parametreli fonksiyon oluşturmak için parametremizin önüne tek yıldız (*) koyabiliriz. İsimsiz argümanlardır.
def sayilar(*x): print(x)sayilar(4) # 4sayilar(4,5,6) # 4,5,6
**kwargs
Çift yıldızlı (**) parametrelerin tek yıldızlı (*) parametrelerden en önemli farkı, fonksiyonu çağırırken anahtar değer ilişkisiyle çağırabilmemizdir. İsimli argümanlardır.
Pass Deyimi
Python programlamasında pass ifadesi null değer atama için kullanılır. Python’daki bir açıklama ve geçiş ifadesi arasındaki fark, yorumlayıcı bir yorumu tamamen yok sayırken, geçişin göz ardı edilmemesidir.
Global ve Yerel Değişkenler
- Global değişken fonksiyonlarımızın dışında tanımladığımız değişkenlerdir.
- Yerel değişkenler ise fonksiyon içinde kullandığımız değişkenlerdir.
- Fonksiyonun dışında tanımladığımız fonksiyonların içinde kullanılırken, fonksiyonların içinde tanımladığımız değişkenler fonksiyon dışında kullanılamaz.
def yazdir2(): x = 5 print(x)yazdir2()print(x)
Bir fonksiyon kendi içerisinde çağrılırsa sonsuz döngüye girer.
Lambda Gösterimi
Pythonda isimsiz olarak tanımladığımız fonksiyonlara lambda fonksiyonları denir. Tek satırda yazılırlar. Gösterimi fonksiyonAdi = lambda parametreler : yapılacakIslem
dikUcgeninAlani = lambda a,b : a*b/2dikUcgeninAlani(2,3) #3
Modüller
Bir Python modülünü programımıza dahil ederek bu modüller içinde yazılan fonksiyonlardan ve sınıflardan kullanabilir ve programlarımızı daha efektif bir şekilde yazabiliriz. Eğer modül diye bir kavram olmasaydı, programlarımızdaki herbir fonksiyonu ve sınıfı kendimiz yazmak zorunda kalacaktık. Kütüphaneleri kullanmak için import modulAdi şeklinde dahil edebiliriz.
from modül_adı import * ile kütüphanemizi kullanabiliriz.
math Modülü
Matematiksel ifadelerle ilgili kullandığımız modüldür.
Modüllerle ilgili bir sayı tahmin oyunu yapalım.
Gömülü Fonksiyonlar
1. map Fonksiyonu
Parametre olarak aldığı fonksiyona, parametre olarak aldığı listenin her elemanını sırasıyla parametre olarak gönderir.
map(fonksiyon,iterasyon yapılabilecek veritipi(liste,demet vb),....)
map fonksiyonunu bir örnekle inceleyelim:
numbers = [2, 8, 16, 32, 64]powers = []def power(x): return x ** 2powers = list(map(power, numbers))print(powers) # [4,64,256,1024,4096]
2. filter Fonksiyonu
Filtreleme işlemini yapmayı sağlar.
filter(fonksiyon,iterasyon yapılabilen bir veritipi(liste vb.))
Filter ile ilgili bir örnek yapalım:
def asal_mi(x): i = 2 if (x == 1): return False # Asal değil elif(x == 2): return True # Asal sayı else: while(i < x): if (x % i == 0): return False # Asal Değil i += 1 return Truelist(filter(asal_mi, range(1,100))) # 1 ile 100 arasındaki asal sayılar
3. zip Fonksiyonu
liste1 = [1,2,3,4]liste2 = [5,6,7,8]liste3 = ["Python","Php","Java","Javascript","C"]list(zip(liste1,liste2,liste3)) # [(1, 5, 'Python'), (2, 6, 'Php'), (3, 7, 'Java'), (4, 8, 'Javascript')]
4. enumerate Fonksiyonu
İngilizcede enumerate kelimesi ‘numaralandırmak’ anlamına gelir. enumerate()
fonksiyonunun görevi de kelimenin bu anlamıyla aynıdır. Yani bu fonksiyonu kullanarak nesneleri numaralandırabiliriz.
liste = ["Elma","Armut","Muz","Kiraz"]list(enumerate(liste)) #[(0, 'Elma'), (1, 'Armut'), (2, 'Muz'), (3, 'Kiraz')]
5. all Fonksiyonu
all() fonksiyonu bütün değerler True ise True, en az bir değer False ise False sonuç döndürür.
liste = [True,False,True,False,True]all(liste) # False
6. any Fonksiyonu
any() fonksiyonu bütün değerler False ise False, en az bir değer True ise True sonuç döndürür.
liste = [0,0,0,0,0,0,0]any(liste) # False
Hata Yönetimi
Python programlarında bazen bir değişkenin tanımlanmadan kullanılmaya çalıştırılması , bazen de yapılamayacak bir aritmetik işlemin yapılması Pythonda hatalara yol açar. Ancak bu istisnai durumlarda, hataların türüne göre programlarımızı daha güvenli bir şekilde yazabiliriz.Yani hata çıkarabilecek kodlarımızı öngörerek bu hataları programlarımızda yakalayabiliriz.
try — except Blokları
try: Hata çıkarabilecek kodlar buraya yazılıyor. Eğer hata çıkarsa program uygun olan except bloğuna girecek. Hata oluşursa try bloğunun geri kalanındaki işlemler çalışmayacak.except Hata1: Hata1 oluştuğunda burası çalışacak.except Hata2: Hata2 oluştuğunda burası çalışacak.
Hata türünü verirsek hata türüne göre hata çıktısı verir. Ama hata türü vermezsek her hatada aynı çıktıyı verir.
try - except- else
try bloğunun içinde hata oluşursa except bloğuna girer. try bloğunun içinde hata oluşmazsa else bloğuna girer.
try: hata çıkarabilecek kodlar buraya yazılır.except Hata1: Hata1 oluştuğunda burası çalışacak.else: Hata oluşmazsa burası çalışacak.
Bir örnekle bakalım:
try:a = int(input("Sayı1:"))b = int(input("Sayı2:"))print(a / b)except ValueError:print("Lütfen inputları doğru girin.")except ZeroDivisionError:print("Bir sayı 0'a bölünemez.")else:print("Doğru Çalıştı")
try - except - finally
try: hata çıkarabilecek kodlar buraya yazılır.except Hata1: Hata1 oluştuğunda burası çalışacak.finally: Kesin olarak her zaman çalışacak.
Hata Fırlatma
raise anahtar kelimesiyle yapılır.
raise HataAdı(opsiyonel hata mesajı)
Bir örnekle raise kullanımını öğrenelim:
Dosya İşlemleri
1. Dosya Okuma
Dosya açmak ve oluşturmak için open() kullanılır. Dosyayı kapatmak için close() kullanılır.
open(dosyaIsmi, dosyaModu)
- dosyaModu: Dosyayı hangi modda açacağını belirtir. r: Okuma modunda açmayı sağlar. Belirtilen konumda dosya olması gerekir.
Dosya okumak için bilgiler.txt adında bir dosya oluşturalım ve içerisindeki verileri okuyalım.
file = open("bilgiler.txt","r",encoding= "utf-8") # Dosyayı okuma kipiyle açıyoruz. Türkçe karaktere dikkat.for i in file: # dosyanın her bir satırı üzerinde geziniyoruz. print(i) # Her bir satırı ekrana basıyoruzfile.close()
read() => Eğer içine hiçbir değer vermezsek bütün dosyamızı okuyacaktır.
file = open("bilgiler.txt","r",encoding="utf-8")icerik = file.read()print("Dosya İçeriği:\n",icerik,sep ="")file.close()
read() fonksiyonuyla bir dosyayı okuduğumuzda dosya imlecimiz dosyanın en sonuna gider ve read() fonksiyonu 2. okuma da artık boş string döner.
readline() => Her çalıştığında bir satır okur. Mesela 15 tane satır varsa 15 kere readline() komutunu çağırmak gerekir. Okuyacak herhangi bir şey kalmayınca boş string döner.
readlines() => Dosyanın bütün satırları bir liste şeklinde döner.
2. Dosyaya Yazma
w : Yazma modu. Dosyayı konumda oluşturur. Eğer dosya mevcut ise, dosyayı siler ve yeni bir dosya oluşturur. write fonksiyonu ile dosyaya yazmayı sağlar.
file = open("bilgiler.txt","w",encoding="utf-8")file.write("Berke Mert Öztürk\n")file.close()
Yukarıdaki örnekte bilgiler.txt dosyası olduğu için eski dosyayı silip yeni dosya açınca yalnızca “Berkcan Gümüşışık” yazar.
a: append (ekleme) modudur. Dosya konumda yoksa oluşturur, dosya konumda varsa ekleme işlemi yapar.
r+ : Hem okuma hem yazma modudur. Dosya konumda yoksa hata verir.
3. Dosyaları Otomatik Kapatma
with open(dosya_adı,dosya_kipi) as file: Dosya işlemleri
4. Dosyaları İleri Geri Sarmak
seek() metodunu kullanarak istediğiniz bayt konumuna dönebilirsiniz. Dosyanın hangi bayt konumunda bulunduğunuzu öğrenmek isterseniz de tell() metodunu kullanabilirsiniz
Nesne Yönelimli Programlama (OOP)
İyi bir programcı olmak istiyorsanız, kendiniz hiç kullanmasanız bile, nesne tabanlı programlamayı öğrenmek zorundasınız.
Class
Sınıflar veya Classlar objelerimizi oluştururken objelerin özelliklerini ve metodlarını tanımladığımız bir yapıdır. Bir araba classımızın olduğunu düşünelim ve özelliklerini aşağıdaki gibi girelim.
class Araba(): # Sınıfın özellikleri(attribute) model = "Renault Megane" renk = "Gümüş" beygirGucu = 110 silindir = 4
Obje oluşturma
obje_ismi = Sınıf_İsmi(parametreler(opsiyonel))
Özelliklere Erişme
obje_ismi.özellik_ismi
Obje oluşturma ve özelliklere erişmeyi öğrendikten sonra araba nesnemize erişmeyi aşağıdaki gibi yapabiliriz.
araba1 = Araba() # Araba veri tipinden bir "araba1" isminde bir obje oluşturduk.print(araba1.model) # Araba1'in modeli Reneault Meganeprint(araba1.renk) # Araba1'in rengi Gümüşprint(araba1.beygirGucu) # Araba1'in beygir gücü 110print(araba1.silindir) # Araba1'in silindiri 4
__init__()
Pythonda yapıcı(constructor ) fonksiyon olarak tanımlanmaktadır. Bu metod objelerimiz oluşturulurken otomatik olarak ilk çağrılan fonksiyondur. Bu metodu özel olarak tanımlayarak objelerimizi farklı değerlerle oluşturabiliriz.
self anahtar kelimesi, objeyi oluşturduğumuz zaman o objeyi gösteren bir referanstır ve metodlarımızda en başta bulunması gereken bir parametredir. İstersek init metodunu varsayılan değerlerle de yazabiliriz.
class Araba(): def __init__(self,model,renk,beygir_gücü,silindir): # Parametrelerimizin değerlerini objelerimizi oluştururken göndereceğiz. self.model = model # self.özellik_ismi = parametre değeri şeklinde objemizin model özelliğine değeri atıyoruz. self.renk = renk # self.özellik_ismi = parametre değeri şeklinde objemizin renk özelliğine değeri atıyoruz. self.beygir_gücü = beygir_gücü # self.özellik_ismi = parametre değeri şeklinde objemizin beygir_gücü özelliğine değeri atıyoruz. self.silindir = silindir # self.özellik_ismi = parametre değeri şeklinde objemizin silndir özelliğine değeri atıyoruz.araba1 = Araba("Peugeot 301","Beyaz",90,4)print(araba1.renk)print(araba1.model)
Method Kullanımı
Inheritance(Miras Alma)
Bu konsepti aslında bizim kendi anne babamızdan değişik özellikleri ve davranışları miras almamıza benzetebiliriz. Bir sınıfın özelliklerinin ve metotlarının başka sınıflara aktarılarak işlevinin artırılmasını sağlar. Mesela öğrenci ve öğretmeni düşündüğümüz zaman öğrencinin adı, soyadı, adresi, cinsiyeti ve numarası vardır. Öğretmeninse ad, soyad, adres, cinsiyet ve branşı vardır. Bunun yerine kisi sınıfı oluşturup ad, soyad, adres ve cinsiyet tutulur. Öğrenci ve öğretmen classında ise öğrenciye veya öğretmene özgü özellikler ve metotlar tutulur.
super() en genel anlamıyla miras aldığımız sınıfın metodlarını alt sınıflardan kullanmamızı sağlar. super._init_() metodu çalışırken sınıfın özelliklerini ve metotlarını kullanır.
Base Class ana sınıftır. Sub Class, Base Class’ının özelliklerini ve metotlarını kullanır.
Kısa Bir Kapanış
Bu yazımızda Python programlama dilinin temellerini ve nesne yönelimli programlama konusuna detaylıca inceledik. Yazılıma ilk başlayanlar için detaylı bir dokümantasyon olduğunu düşünüyorum. Yorum ve sorularınızı bize iletebilirsiniz.
Hiç yorum yok:
Yorum Gönder
Görüş ve Düşüncelerinizi Bizimle Paylaşmayı Unutmayın.