SlideShare a Scribd company logo
1 of 41
PYTHON
GİRİŞ
Python ilk olarak 1990’ların başında Guido van Rossum
tarafından ABC adlı bir dilin devamı olarak geliştirilmeye
başlanmıştır. İlk olarak CWI bünyesinde geliştirilen
Python daha sonra sırasıyla CNRI ve BeOpen Labs.
bünyesinde geliştirilmiştir. Günümüzde ise
geliştirilmesine Python Software Foundation tarafından
devam edilmektedir. 1.6.1 sürümünden beri GPL uyumlu
bir lisans olan Python Lisansı altında dağıtılmaktadır
NEDEN PYTHON?
Pyhton'un Genel Özellikleri:
1- Nesneye Yönelik Bir Dildir

   Python'da herşey bir nesnedir Fonksiyonlar, Değişkenler, Sabitler,
   Sınıflar ve Modüller birer nesnedir. En basit bir karakter sabiti bile
   nesnedir
2- Özgürdür

  Python kaynak kodu açık, özgür bir dildir Kaynağı C ile yazılmıştır Eğer
  C biliyorsanız kendinize has bir python yorumlayıcısı yazabilir ve bu
  yeni yorumlayıcıyı dağıtabilirsiniz
3- Yorumlamalı / Derlemeli
Python'da yazdığınız kodlar yorumlayıcı tarafından önce ara koda
(byte-code) çevrilir Daha sonra yine yorumlayıcı tarafından
yorumlanarak çalıştırılır Ara Koda çevirme işi oldukça hızlıdır Ve eğer
kodda bir değişiklik yapılmadıysa tekrar ara koda çevirmek yerine
doğrudan daha önceki ara koddan yorumlanır Böylece ara koda
çevirme işlemi atlanarak çalıştırma işlemine hızla geçilir Hatta
programınızı bir başka yerde çalıştırmak için kaynak kod yerine direkt
olarak ara kodu götürebilirsiniz Ancak şunu da belirtmek gerekir Ara
kodu çalıştırmak için yine de python yorumlayıcısının kurulu olması
gerekir
Net platformuna özgü Python derleyicileri mevcut Bu derleyiciler
sayesinde Python yorumlayıcısı olmadan derlenen programlar net
ortamında çalıştırılabilmektedir Bu da taşınabilirlik olarak önemlidir
4- Taşınabilirlik

Pythonda yazılmış bir programı Windows, Unix ve Türevleri, MacOs gibi pek
çok işletim sisteminde çalıştırabilirsiniz Python programlarının işletim sistemi
ve donanım bağımlılığı olmadığından taşınabilirliği oldukça yüksektir Ancak
yine de belli bir işletim sistemine özel modül kullandığınızda bu taşınabilirlik
özelliğini ortadan kaldırabilir Eğer belli bir platforma özel bir program
yazmıyorsanız o platforma özgü modülleri kullanmamalısınız
5- Güçlüdür

Pythonda aradığınız hemen hemen her şeyi bulabilir, her türlü
uygulamayı geliştirebilirsiniz Unix tabanında C/C++
kütüphanelerini kullanabilir, güçlü COM desteği sayesinde
windowsta Visual C++'ın gücünü kullanabilirsiniz COM desteği ile
windows uygulamalarına erişip her istediğinizi yaptırabilirsiniz

6- Hızlıdır

Python bir alt benzeri olan Java'ya oranla oldukça hızlıdır
Pythonda modüller bağımsız olduklarından istemediğiniz Hiçbir
modül hafızaya yüklenmez Böylelikle hem bellek kullanımı düşer,
hemde uygulamanıza daha hakim olursunuz Ayrıca tanımlı
nesnelerle işiniz bittiğinde hafızadan silinecek ve hafıza gereksiz
yere meşgul edilmeyecektir
7- Yazımı Kolaydır

  Kullanımı ve yazımı oldukça kolay bir dildir Kod yazım kuralları çok
  sıkı olduğundan sizi düzenli kod yazmaya itecektir Bu da bugün
  yazdığınız bir kodu 5 yıl sonra bile rahatça anlayabilmenize olanak
  tanır Ayrıca pek çok dile göre aynı işi daha az kod yazarak
  yapabilirsiniz
8- Kullanım Alanı

Pythonu Veritabanı programcılığı ve Internet programcılığında
kullanabilirsiniz Yani Pythonla hem ticari uygulamalar geliştirebilir hem de
dinamik internet sayfaları hazırlayabilirsiniz
Python programlama dili son dönemlerde oldukça popülerlik kazandı
Örneğin Pardus Linux işletim sisteminin çok büyük bir desteği mevcut Pek
çok uygulama Pythonda yazılmış durumda Yine aynı şekilde RedHat'ın
kurulum arabirimi ve diğer pek çok program pythonla yazılmış durumda
Google, Nasa, Yahoo gibi pek çok firma python kullanıyor
Yanlış anlama
Python kelimesi aslında çoğu kişinin zannettiği gibi "Piton Yılanı" anlamına
gelmiyor. "Python“ ismi Guido Van Rossum'un çok sevdiği, "Monty
Python" adlı altı kişilik bir İngiliz komedi grubunun "Monty Python's Flying
Circus" adlı gösterisinden geliyor. Guido Van Rossum Python'u
geliştirmeye 1990 yılında başlamış... Yani aslında Python için nispeten yeni
bir dil deneb
GENEL ÖZELLİKLER
Python her ne kadar bir script dili olsa da diğer scripting dillerinde olan bazı
özellikleri içermez.

Python’da küçük-büyük harf ayrımı mevcuttur. Bu nedenle foobar, fooBar ve
FooBar birbirinden farklı nesnelerdir.

Python’da değişkenler kullanılmadan önce mutlaka ilklendirilmelidir
(initialization). Python yorumlayıcısı değişkenlere kullanıldığı yere göre otomatik
bir değer atamayacaktır.

İlklendirilmemiş bir değeri kullanmaya kalktığınızda bir NameError ile
karşılaşırsınız. Ancak buna rağmen değişkenlerin tiplerinin herhangi bir özel yerde
tanımlanması gerekmez, örneğin kirkiki=42 yazdığımızda kirkiki adlı değişken
otomatik olarak integer veri tipine sahip olacaktır.

Son olarak Python’da herşey bir nesnedir. Bu nedenle mesela bir değişkene
atamadan doğrudan kullanacağımız bir string de bir string değişkenle aynı
özelliklere sahiptir.
KOD YAZMAK İÇİN
    Python kodlarını yazmak için iki seçeneğimiz var. Birincisi kodlarımızı
    doğrudan Python
    komut satırına yazabiliyoruz. Python komut satırını açmak için ALT+F2
    tuşlarına basıp
    çıkan ekrana "konsole" yazmamız, ardından da konsolda "python"
    komutunu vermemiz
    gerekiyor. Bu ekranda komutlarımızı ">>>" işaretinden hemen sonra
    yazacağız.
     İkinci seçeneğimiz ise bir metin düzenleyici kullanmaktır. Bazı ufak
    kodları denemek için
    komut satırı yeterli olsa da hem kodlarımızı kaydetmek hem de büyük
    programlarda rahat
    hareket edebilmek için mutlaka bir metin düzenleyici kullanmamız
    gerekiyor. Şu aşamada
    kullanım kolaylığı nedeniyle "kwrite" metin düzenleyici önerilebilir.
    ALT+F2 tuşlarına basıp "kwrite" yazarak boş bir kwrite belgesi
    açabiliriz.
    Python kodlarını yazmaya başlamadan önce, boş belgenin ilk satırına
    #!/usr/bin/env python
    yazmamız gerekiyor. Bu satır sayesinde sistemimiz, yazdığımız kodların
    hangi program tarafından çalıştırılacağını anlıyor.
İşte Python’ca Hello World!:
  print "Hello world!“
Yorum Satırları
Python’da iki tip yorum satırı mevcuttur. Tek satırlık yorumlar #
karakteri ile başlarlar. Birden fazla satıra sahip yorumlar ise ”””
karakterleri ile başlayıp aynı şekildekapanırlar.
KULLANICIYLA İLETİŞİM: VERİ ALIŞ-
      VERİŞİ

   Python'da kullanıcıdan birtakım veriler alabilmek, yani
kullanıcıyla iletişime geçebilmek için ikitane fonksiyondan
faydalanılır. Bunlardan öncelikle ilkine bakalım:
1.raw_input() fonksiyonu
#!/usr/bin/env python
# -*- coding: utf-8 -*-
a=raw_input("Lütfen parolanızı girin:")
print "Teşekkürler!“

Şimdi bu belgeyi "deneme.py" ismiyle kaydediyoruz. Daha
sonra bir konsol ekranı açıp,
programımızın kayıtlı olduğu dizine geçerek şu komutla
programımızı çalıştırıyoruz:
python deneme.py
Şimdi raw_input fonksiyonuna bir ara verip, kullanıcıdan bilgi almak için
 kullanabileceğimiz ikinci fonksiyondan biraz bahsedelim.
2.input() fonksiyonu
Tıpkı raw_input fonksiyonunda olduğu gibi, bu komutla da kullanıcılardan
bazı bilgileri
alabiliyoruz. Şu basit örneğe bir bakalım:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
a = input("Lütfen bir sayı girin:")
b = input("Lütfen başka bir sayı daha girin:")
print a + b

raw_input() fonksiyonunun, girilen verileri "karakter dizisi" (string) olarak;
input() fonksiyonunun ise "tamsayı" (integer) olarak algılanır.
PYTHON'DA KOŞULA BAĞLI DURUMLAR
Bu iş için kullanacağımız üç tane ifade var: if..., else: ve elif...

#!/usr/bin/env python
#-*- coding: utf-8 -*-
meyve = raw_input("Bir meyve adı yazınız: ")
if meyve = = "elma":
print "elma bir meyvedir"
elif meyve = = "armut":
print "armut bir meyvedir"
else:
print meyve, "bir meyve değildir!"
PYTHON'DA
                DÖNGÜLER

1.while döngüsü
#!/usr/bin/env python
#-*- coding: utf-8 -*-
a=0
while a < 100:
   a=a+1
   print a


#!/usr/bin/env python
#-*- coding: utf-8 -*-
soru = raw_input("Arkadaşım sen deli misin?")
while soru != "hayır":
      print "delisin sen deli! Kulakları küpeli!“

Dikkat ederseniz burada da işleçlerimizden birini kullandık. Kullandığımız
işleç "eşit değildir“ anlamına gelen "!=" işleci...
2.For döngüsü
#!/usr/bin/env python
#-*- coding: utf-8 -*-
for zombi in range(1, 100):
   print zombi
Ben burada değişken adı olarak zombi kelimesini kullandım,siz isterseniz
Osman da kullanabilirsiniz 


#!/usr/bin/env python
#-*- coding: utf-8 -*-
for kelimeler in "linux":
   print kelimeler


Gördüğünüz gibi, for döngüsüyle yalnızca sayıları değil, karakter dizilerinin
öğelerini de dökebiliyoruz ekrana.
3.range() fonksiyonu
Bu fonksiyon Python'da sayı aralıklarını belirtmemizi sağlar. print
  range(100)
komutu 0 ile 100 arasındaki sayıları yazdırmamızı sağlar.
Başka bir örnek daha verelim:
  print range(100,200)
komutu 100 ile 200 arasındaki sayıları döker.
Bir örnek daha:
   print range(1,100,2)
Bu komut ise 1 ile 100 arasındaki sayıları 2'şer 2'şer atlayarak
   yazdırmamızı sağlar...
4.len() fonksiyonu
Bu fonksiyon, karakter dizilerinin uzunluğunu gösterir.

#!/usr/bin/env python
#-*- coding: utf-8 -*-
a = "Afyonkarahisar"
print len(a)


Bu kod, "Afyonkarahisar" karakter dizisi içindeki harflerin
sayısını ekrana dökecektir.
5.Break ifadesi
break ifadesi program içinde bir noktada programı sona erdirmek
gerektiği zaman kullanılır.
Aşağıdaki örnek break ifadesinin ne işe yaradığını açıkça gösteriyor:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
kullanici_adi = "kullanici"
parola = "sifre"
while True:
  soru1 = raw_input("Kullanıcı adı: ")
  soru2 = raw_input("Şifre: ")
  if soru1 = = kullanici_adi and soru2 = = parola:
       print "Kullanıcı adı ve şifreniz onaylandı. Programa hoşgeldiniz!“
       break
  else:
       print "Kullanıcı adınız veya şifrenizden en az birisi onaylanmadı.”
6.continue ifadesi
   Bu ifade ise döngü içinde bir bloğun es geçilip ondan sonraki bloğun
çalıştırılmasını sağlar. Çok bilindik bir örnek verelim:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
while True:
   s = raw_input("Bir sayı girin: ")
   if s = = "iptal":
        break
   if len(s) <= 3:
        continue
        print "En fazla üç haneli bir sayı girebilirsiniz."
PYTHON'DA LİSTELER, DEMETLER, SÖZLÜKLER
Listeler
    Python'da herhangi bir liste oluşturmak için önce listemize bir ad vermemiz,
    ardından da köşeli parantez kullanarak bu listenin öğelerini belirlememiz
    gerekiyor.
liste = ["Hale", "Jale", "Lale", 12, 23]
Python komut satırında şu ifadeyi yazın:
    type("Hale")
Bu komutun çıktısı:
   <type 'str'>
Şimdi aynı komutu şu şekilde deniyoruz:
   type(123)
Bu komut bize şu çıktıyı verecektir:
    <type 'int'>
Şimdi komut satırında
     liste
 yazdığımızda tanımladığımız "liste" adlı listenin öğeleri ekrana yazdırılacaktır.
Tanımladığımız bu listenin öğe sayısını len() fonksiyonu yardımıyla öğrenebiliriz:
     len(liste)
     5
append parçacığı
   İlk parçacığımız "append". Bu kelime Türkçe'de "eklemek, iliştirmek“
anlamına geliyor...Oluşturduğumuz listeye yeni bir öğe eklemek için
"append" parçacığından faydalanıyoruz:
    liste.append("Mehmet")
"Python, liste içindeki öğeleri sıralarken, listenin ilk öğesini 0'dan başlatır."
insert parçacığı
    İşte bu "insert" parçacığı yardımıyla listenin herhangi bir noktasına öğe
ekleyebiliyoruz. Bu kelime Türkçe'de "yerleştirmek, sokmak" anlamına
geliyor... insert parçacığı yardımıyla listenin 1. sırasına (Dikkat edin, 0'ıncı
sıraya demiyoruz) "Ahmet"i yerleştirebiliriz:
     liste.insert(1, "Ahmet")
Burada parantez içindeki ilk sayı, "Ahmet" öğesinin liste içinde yerleştirile-
ceği sırayı gösterir. Bu komutun çıktısı şöyle olur:
["Hale", "Ahmet", "Jale", "Lale", 12, 23, "Mehmet"]
extend parçacığı
yeni_liste = ["Simovic", "Prekazi", "Jardel", "Nouma"]
    liste.extend(yeni_liste)
Bu komutun çıktısı şöyle olacaktır:
['Veli', 'Hale', 'Ahmet', 'Jale', 'Lale', 12, 23, 'Mehmet', 'Simovic', 'Prekazi', 'Jardel',
   'Nouma']
remove parçacığı
liste.remove("Nouma")
listeden nouma silinir.
pop parçacığı
     liste.pop()
Gördüğünüz gibi, Python bu pop parçacığı yardımıyla listenin son
öğesini çıkaracak, üstelik çıkardığı öğeyi ekrana yazdıracaktır. Eğer
bu komutu şöyle verirsek ne olur?
    liste.pop(0)
Bu komut ise listedeki "ilk" yani "0'ıncı" öğeyi çıkarır ve çıkardığı
öğeyi ekrana yazdırır.
reverse parçacığı
Bu parçacık listedeki öğelerin sırasını ters yüz eder. Şöyle ki:
   liste.reverse()
Bu komutu üst üste iki kez verirseniz listeniz ilk haline dönecektir.
count parçacığı
Listelerle birlikte kullanabileceğimiz başka bir parçacık da
budur. Görevi ise liste içinde bir öğenin kaç kez geçtiğini
söylemektir:
   liste.count("Prekazi")
index parçacığı
Diyelim ki listedeki "Jardel" öğesinin listenin kaçıncı sırasında olduğunu
merak ediyorsunuz. İşte bu index parçacığı sizin aradığınız şey! Bu
parçacığı şöyle kullanıyoruz:
   liste.index("Jardel")
sort parçacığı
Bazen listemizdeki öğeleri alfabe sırasına dizmek isteriz. İşte yüreğimizde
böyle bir istek hasıl olduğunda kullanacağımız parçacığın adı "sort":
    liste.sort()
Demetler
   Demetler (tuples) listelere benzer. Ama listeler ile aralarında çok temel bir fark
vardır. Listeler üzerinde oynamalar yapabiliriz. Yani öğe ekleyebilir, öğe çıkarabiliriz.
Demetlerde ise böyle bir şey yoktur...
   Demeti şu şekilde tanımlıyoruz:
   demet = "Ali", "Veli", 49, 50
Gördüğünüz gibi, yaptığımız bu iş değişken tanımlamaya çok benziyor. İstersek
   demetin
Öğelerini parantez içinde de gösterebiliriz.
    demet2 = ("Ali", "Veli", 49, 50)
Peki boş bir demet nasıl oluşturulur? Çok basit:
    demet = ()
Peki tek öğeli bir demet nasıl oluşturulur? O kadar basit değil. Aslında basit ama biraz
tuhaf:
   hede = ("inek",)
Yukarıda anlattığımız şekilde bir demet oluşturma işine "demetleme" (tuple packing)
adı veriliyor. Bunun tersini de yapabiliriz. Buna da "demet açma" deniyor (sequence
unpacking):
Önce demetleyelim:
    aile = "Anne", "Baba", "Kardesler"
Şimdi demeti açalım:
   a, b, c = aile
Bu şekilde komut satırına "a" yazarsak, "Anne" öğesi; "b" yazarsak "Baba" öğesi; c
Yazarsak "Kardesler" öğesi ekrana yazdırılacaktır.
Sözlükler
sozluk = {"elma": "meyve", "domates": "sebze", 1: "sayi"}


telefon_defteri = {"Ahmet": "0533 123 45 67",
    "Kezban": "0532 321 54 76", "Feristah": "0533 333 33 33"}


   Burada örneğin, "elma" bir "anahtar", "meyve" ise bu anahtarın
"değeri"dir. Aynı şekilde "sebze“ değerinin anahtarı "domates"tir.
Dolayısıyla Python'da sözlük; "anahtar" ve "değer" arasındaki ilişkiyi
gösteren bir veri tipidir!
    Şimdi gelelim bu sözlükleri nasıl yöneteceğimize... Diyelim ki
sözlüğümüze yeni bir öğe eklemek istiyoruz:
telefon_defteri["Zekiye"] = "0544 444 01 00“
    Eğer biz sözlükteki bütün öğeleri silmek istersek şu komut kullanılıyor:
telefon_defteri.clear()
FONKSİYON TANIMLAMA

  Fonksiyonları tanımlarken "def" adlı bir parçacıktan yararlanacağız. Bu
  "def" parçacığının hemen ardından ise fonksiyonumuzun adını
  belirleme- miz gerekiyor...
  def ilk_fonksiyonumuz():
      print "Ben Python! Monty Python!“
  Fonksiyonlarda Parametreler
  Args=demet ve kwargs=sözlük
  def foobar(foo, bar="42", *args, **kwargs):
        ...
  Dikkat etmemiz gereken kural parametrelerin sıraının önce normal
  parametreler, ardından öntanımlı değere sahip parametreler,
  ardından geri kalan parametreleri toplamak üzere *args ve **kwargs
  tanımlarını kullanmaktır.
  Python’un fonksiyon tanımlarında içerdiği en önemli kolaylık değişken
  uzunluktaki parametre listeleridir. Bu sayede bir fonksiyonun sınırsız
  sayıda parametre alması sağlanabildiği gibi bir demet, liste veya sözlük
  içerisindeki veriler de kolayca bir fonksiyona parametre olarak
  geçirilebilir.( args adlı bir demet kwargs adlı bir sözlükten önce gelir)
Başka bir örnek:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
def merhaba(arkadas):
    print "Merhaba", arkadas
 arkadas = "Kezban"
arkadas = "Mücella"
merhaba(arkadas)
Sizce Python burada kimi arkadaştan sayacak? Kezban'ı mı yoksa
Mücella'yı mı?
Cevap: Mücella!
Peki bunun nedeni nedir?
Cevap: Python fonksiyonlarda değişkenleri okumaya sondan başlar...
Yukarıdaki örnekte arkadas =
"Mücella" ifadesinin altına arkadas = "Ahmet" ifadesini eklerseniz,
Python bu kez "Ahmet"i dikkate
alacaktır... Çünkü bu kez en sonda "Ahmet" değeri olmuş olacak...
"return" ifadesi
Bu ifadenin ne işe yaradığını anlamak için şu örneklere bakalım:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
def return_deneme(a,b):
     if a < b:
        return a
    else:
       return b
print return_deneme(34, 45)
Gördüğünüz gibi burada "return" ifadesi yarattığımız koşulun sonucuna göre
ya a değişkenini ya da b değişkenini "döndürüyor"; yani bize çıktı olarak
veriyor...
"pass" ifadesi

#!/usr/bin/python
def deneme():
    liste = []
    while True:
    a = raw_input("Giriniz: ")
    if a = = "0":
       pass
    else:
       liste.append(a)
     print liste
     deneme()
Burada gördüğümüz gibi, eğer kullanıcı "0" değerini girerse, bu değer
listeye eklenmeyecek,Python hiçbir şey yapmadan bu satırı
    atlayacaktır.
Veri Tipleri
1.Boolean değerler
Python’un geniş veri tipi seçenekleri arasında en yeni olanı boolean
  değerlerdir. Python 2.2’ye kadar True ve False anahtar kelimeleri
  yoktur. 2.2’de ise 0 ve 1 sayılarına denk olarak bu kelimeler
getirildikten sonra sonunda 2.3 sürümü ile Python gerçek bir boolean
  tipine kavuşmuştur. Boolean veri tipinin Python’da bu
kadar geç ortaya ¸cıkmasının sebebi Python’un C’ye benzer bir
şekilde her türlü veri tipini doğruluk testinde kullanabiliyor olmasıdır.
  Örneğin boş bir string, boş bir liste veya 0 sayısı yanlış, 0 dışındaki
  herhangi bir sayı, boyutu 0’dan büyük olan herhangi bir liste veya
  string ise doğru kabul edilecektir. Bunun dışında
__nonzero__ adlı fonksiyonu kendi sınıfımızın içerisinde
tanımlayarak kendi yaratacağımız bir sınıfı da doğruluk testinde
  kullanmak mümkündür.
2.Sayısal Tipler
         Python’da dört temel sayısal veri tipi bulunmaktadır.
  1.integer (Tamsayı),
  2.long (Uzun tamsayı),
  3. float (Kayar noktalı sayı),
  4. complex (Karmaşık sayı)
        Bu veri tiplerinin tamamı işaretli sayılardır. Gerektiği
   durumlarda Python yorumlayıcısı integer, long ve float tipleri
   arasında otomatik değişimler yapabilmektedir. Örneğin Python
   yorumlayıcısına integer’ın sınırlarını aşan bir sayı verdiğiniz takdirde
   yorumlayıcı bunu otomatik olarak long tipine çevirecektir. Aynı
   şekilde bir işlemin operandlarından birinin float olması halinde
   sonuç da float’a dönecektir.
3.String Tipleri
Python C printf tarzı metin bi¸cimlendirme (String
Formatting) karakterlerini destekler. Bu biçimlendirme
karakterlerinin tam bir listesine
http://www.python.org/doc/current/lib/typesseq-strings
html adresinden ulaşabilirsiniz.
Bu tip metin biçimlendirme işlemlerinde Python’un
getirdiği bir kolaylık biçimlenecek metnin içine koyulacak
değerleri bir liste yerine sözlükten alabilme özelliğidir. Bu
sayede biçimlendirilecek metnin içine yerleştirilecek
   veriler
listedeki sıralarından bağımsız olarak isimleriyle
   kullanılabi-
lirler.
SINIF TANIMLAMAK
class IlkSinif:
   mesele = "Olmak ya da olmamak"
Örnekleme (Instantiation)
Şimdi şöyle bir şey yazıyoruz:
>>>deneme = IlkSinif()
Artık şu komut yardımıyla, sınıf örneğimizin “niteliklerine” ulaşabiliriz:
>>>deneme.mesele
Böylece oluşturduğumuz sınıfı bir değişkene atadık. NTP kavramlarıyla
konuşacak olursak, “sınıfımızı örneklemiş olduk”.
Çöp Toplama (Garbage Collection)
Peki biz bir sınıfı örneklemezsek ne olur? Eğer bir sınıfı örneklemezsek, o
örneklenmeyen sınıf program tarafından otomatik olarak "çöp toplama“
(garbage collection) adı verilen bir sürece tabi tutulacaktır. Burada bu
sürecin ayrıntılarına girmeyeceğiz. Ama kısaca şöyle anlatabiliriz: Python'da
(ve bir çok programlama dilinde) yazdığımız programlar içindeki "işe
yaramayan" veriler bellekten silinir. Böylece etkili bir hafıza yönetimi
uygulanmış ve programların performansı artırılmış olur.
__init__ Nedir?
#!/usr/bin/env python
#-*- coding:utf8 -*-
class Oyun:
  def __init__(self):
    enerji = 50
    para = 100
    fabrika = 4
    isci = 10
    print "enerji:", enerji
    print "para:", para
    print "fabrika:", fabrika
    print "işçi:", isci
macera = Oyun()

Python’da bir programın ilk kez çalıştırıldığı anda işlemesini istediğimiz şeyleri bu __init__
fonksiyonu içine yazıyoruz. Mesela yukarıdaki ufak oyun çalışmasında, oyuna başlandığı anda
Bir oyuncunun sahip olacağı özellikleri __init__ fonksiyonu içinde tanımladık. Buna göre bu
Oyunda bir oyuncu oyuna başladığında;
    enerjisi 50,
    parası 100
    fabrika sayısı 4,
    işçi sayısı ise 10 olacaktır.
Self nedir?
class Oyun:
    def __init__(self):
         self.enerji = 50
         self.para = 100
         self.fabrika = 4
          self.isci = 10
    def goster(self):
          print "enerji:", self.enerji
          print "para:", self.para
          print "fabrika:", self.fabrika
          print "işçi:", self.isci
macera = Oyun()
Gördüğünüz gibi, kodlar içinde yazdığımız değişkenlerin, fonksiyon dışından da
çağrılabilmesi için, yani bir bakıma "global" bir nitelik kazanması için “self” olarak
tanımlanmaları gerekiyor. Yani mesela, “enerji” yerine “self.enerji” diyerek, bu
“enerji” adlı değişkenin yalnızca içinde bulunduğu fonksiyonda değil, o
fonksiyonun dışında da kullanılabilmesini sağlıyoruz. İyice somutlaştırmak
gerekirse, “__init__” fonksiyonu içinde tanımladığımız “enerji” adlı değişken, bu
haliyle “goster” adlı fonksiyonun içinde kullanılamaz. Daha da önemlisi bu kodları
bu haliyle tam olarak çalıştıramayız da.


Mesela şu temel komutları işletemeyiz:
   macera.enerji
   macera.para
   macera.isci
   macera.fabrika
MİRAS ALMA
                  (INHERİTANCE)


class Dusman(Oyun):
Böylelikle daha en başta tanımladığımız “Oyun” adlı sınıfı, bu
yeni oluşturduğumuz sınıfa miras verdik. Dusman sınıfının
durumunu Python’cada şöyle ifade “Dusman sınıfı Oyun
sınıfını miras aldı” (Dusman inherits from Oyun)
class Dusman(Oyun):
   def __init__(self):
      Oyun.__init__(self)
      self.ego = 0
   def goster(self):
      Oyun.goster(self)
      print "ego:", self.ego
Eski ve Yeni Sınıflar
Şimdiye kadar verdiğimiz sınıf örneklerinde önemli bir konudan
hiç bahsetmedik. Python'da iki tip
sınıf vardır: Eski tip sınıflar ve yeni tip sınıflar. Ancak
korkmanızı gerektirecek kadar fark yoktur bu
iki sınıf tipi arasında. Ayrıca hangi sınıf tipini kullanırsanız
kullanın sorun yaşamazsınız. Ama tabii
ki kendimizi yeni tipe alıştırmakta fayda var, çünkü muhtemelen
Python'un sonraki sürümlerinden
birinde (büyük ihtimalle Python 3.0'da) eski tip sınıflar
kullanımdan kaldırılacaktır.
Eski tip sınıflar ile yeni tip sınıflar arasındaki en büyük fark şudur:
Eski tip sınıflar şöyle tanımlanır:
class Deneme:
Yeni tip sınıflar ise şöyle tanımlanır:
class Deneme(object)
Gördüğünüz gibi, eski tip sınıflarda başka bir sınıfı miras alma zorunluluğu
yoktur. O yüzden sınıfları istersek parantezsiz olarak tanımlayabiliyoruz.
Yeni tip sınıflarda ise her sınıf mutlaka başka bir sınıfı miras almalıdır. Eğer
kodlarınız içinde gerçekten miras almanız gereken başka bir sınıf yoksa,
öntanımlı olarak "object" adlı sınıfı miras almanız gerekiyor. Dolayısıyla
politikamız şu olacak:
"Ya bir sınıfı miras al, ya da miras alman gereken herhangi bir sınıf
yoksa, "object" adlı sınıfı miras al..."
KAYNAKLA
R

  [1] Python Dökümantasyonu (http://www.python.org/doc/current/
  [2] Python Kılavuzu (
  http://www.geocities.com/dinceraydin/python/tut/tut.html)
  [3] Dive Into Python (http://www.diveintopyhton.org)
  [4] Python Style Guide (http://www.python.org/doc/essays/styleguide.html)
  [5] Python, Mustafa Başer, 2002

More Related Content

What's hot

Python quick guide1
Python quick guide1Python quick guide1
Python quick guide1
Kanchilug
 

What's hot (20)

Introduction to python
Introduction to pythonIntroduction to python
Introduction to python
 
Python by Rj
Python by RjPython by Rj
Python by Rj
 
Python basics
Python basicsPython basics
Python basics
 
Python Programming ppt
Python Programming pptPython Programming ppt
Python Programming ppt
 
POWER OF PYTHON PROGRAMMING LANGUAGE
POWER OF PYTHON PROGRAMMING LANGUAGE POWER OF PYTHON PROGRAMMING LANGUAGE
POWER OF PYTHON PROGRAMMING LANGUAGE
 
Python programming | Fundamentals of Python programming
Python programming | Fundamentals of Python programming Python programming | Fundamentals of Python programming
Python programming | Fundamentals of Python programming
 
Python quick guide1
Python quick guide1Python quick guide1
Python quick guide1
 
Fundamentals of Python Programming
Fundamentals of Python ProgrammingFundamentals of Python Programming
Fundamentals of Python Programming
 
Introduction to Python
Introduction to PythonIntroduction to Python
Introduction to Python
 
Python Visual Studio | Edureka
Python Visual Studio | EdurekaPython Visual Studio | Edureka
Python Visual Studio | Edureka
 
Seminar report On Python
Seminar report On PythonSeminar report On Python
Seminar report On Python
 
Introduction To Programming with Python
Introduction To Programming with PythonIntroduction To Programming with Python
Introduction To Programming with Python
 
Intro to Python
Intro to PythonIntro to Python
Intro to Python
 
Linux Introduction
Linux IntroductionLinux Introduction
Linux Introduction
 
summer training report on python
summer training report on pythonsummer training report on python
summer training report on python
 
Programming with Python
Programming with PythonProgramming with Python
Programming with Python
 
Python presentation by Monu Sharma
Python presentation by Monu SharmaPython presentation by Monu Sharma
Python presentation by Monu Sharma
 
Introduction to the basics of Python programming (part 1)
Introduction to the basics of Python programming (part 1)Introduction to the basics of Python programming (part 1)
Introduction to the basics of Python programming (part 1)
 
Overview of python 2019
Overview of python 2019Overview of python 2019
Overview of python 2019
 
Basics of python
Basics of pythonBasics of python
Basics of python
 

Similar to Phyton Programlama Dili

Python dokumani
Python dokumaniPython dokumani
Python dokumani
sersld98
 
Python kitabi
Python kitabiPython kitabi
Python kitabi
sersld98
 
Python seminerleri
Python seminerleriPython seminerleri
Python seminerleri
sersld98
 
Python kitaplari
Python kitaplariPython kitaplari
Python kitaplari
sersld98
 
Python kursu-esenler
Python kursu-esenlerPython kursu-esenler
Python kursu-esenler
sersld93
 
Python kursu-avcilar
Python kursu-avcilarPython kursu-avcilar
Python kursu-avcilar
sersld93
 
52657308 unix-linux
52657308 unix-linux52657308 unix-linux
52657308 unix-linux
Ahmet Sag
 
Python kursu-eyup
Python kursu-eyupPython kursu-eyup
Python kursu-eyup
sersld93
 
Python ornek
Python ornekPython ornek
Python ornek
sersld98
 
Python kursu-beyoglu
Python kursu-beyogluPython kursu-beyoglu
Python kursu-beyoglu
sersld93
 

Similar to Phyton Programlama Dili (20)

Python Programlama Diline Giriş - Güncelleme 2018
Python Programlama Diline Giriş - Güncelleme 2018Python Programlama Diline Giriş - Güncelleme 2018
Python Programlama Diline Giriş - Güncelleme 2018
 
Python programlama
Python programlamaPython programlama
Python programlama
 
Kabuk / bash proglama
Kabuk / bash  proglamaKabuk / bash  proglama
Kabuk / bash proglama
 
ARM Mimarisinde Exploit Geliştirme
ARM Mimarisinde Exploit GeliştirmeARM Mimarisinde Exploit Geliştirme
ARM Mimarisinde Exploit Geliştirme
 
Sunu (1)
Sunu (1)Sunu (1)
Sunu (1)
 
Python dokumani
Python dokumaniPython dokumani
Python dokumani
 
Python
PythonPython
Python
 
Python kitabi
Python kitabiPython kitabi
Python kitabi
 
Python seminerleri
Python seminerleriPython seminerleri
Python seminerleri
 
Python kitaplari
Python kitaplariPython kitaplari
Python kitaplari
 
Python kursu-esenler
Python kursu-esenlerPython kursu-esenler
Python kursu-esenler
 
Python kursu-avcilar
Python kursu-avcilarPython kursu-avcilar
Python kursu-avcilar
 
52657308 unix-linux
52657308 unix-linux52657308 unix-linux
52657308 unix-linux
 
Python kursu-eyup
Python kursu-eyupPython kursu-eyup
Python kursu-eyup
 
Linux'a Giris ve VirtualBox a Ubuntu Kurulumu
Linux'a Giris ve VirtualBox a Ubuntu KurulumuLinux'a Giris ve VirtualBox a Ubuntu Kurulumu
Linux'a Giris ve VirtualBox a Ubuntu Kurulumu
 
Python ornek
Python ornekPython ornek
Python ornek
 
Golang Book - Go Programlama Dili Temelleri
Golang Book - Go Programlama Dili TemelleriGolang Book - Go Programlama Dili Temelleri
Golang Book - Go Programlama Dili Temelleri
 
Programlama Dilleri Tanıtım
Programlama Dilleri TanıtımProgramlama Dilleri Tanıtım
Programlama Dilleri Tanıtım
 
Python for Hackers
Python for HackersPython for Hackers
Python for Hackers
 
Python kursu-beyoglu
Python kursu-beyogluPython kursu-beyoglu
Python kursu-beyoglu
 

More from Cumhuriyet Üniversitesi (8)

Gereksinim Analizi Dokümanı Hazırlama
Gereksinim Analizi Dokümanı HazırlamaGereksinim Analizi Dokümanı Hazırlama
Gereksinim Analizi Dokümanı Hazırlama
 
Pascal
Pascal Pascal
Pascal
 
ALGOL ailesi programlama dilleri
ALGOL ailesi programlama dilleriALGOL ailesi programlama dilleri
ALGOL ailesi programlama dilleri
 
Prolog
PrologProlog
Prolog
 
Teknik Rapor Nasıl Yazılır?
Teknik Rapor Nasıl Yazılır?Teknik Rapor Nasıl Yazılır?
Teknik Rapor Nasıl Yazılır?
 
Veri madenciliği ve ids
Veri madenciliği ve idsVeri madenciliği ve ids
Veri madenciliği ve ids
 
Veritabanları
VeritabanlarıVeritabanları
Veritabanları
 
Delphi 7
Delphi 7Delphi 7
Delphi 7
 

Phyton Programlama Dili

  • 2. GİRİŞ Python ilk olarak 1990’ların başında Guido van Rossum tarafından ABC adlı bir dilin devamı olarak geliştirilmeye başlanmıştır. İlk olarak CWI bünyesinde geliştirilen Python daha sonra sırasıyla CNRI ve BeOpen Labs. bünyesinde geliştirilmiştir. Günümüzde ise geliştirilmesine Python Software Foundation tarafından devam edilmektedir. 1.6.1 sürümünden beri GPL uyumlu bir lisans olan Python Lisansı altında dağıtılmaktadır
  • 3. NEDEN PYTHON? Pyhton'un Genel Özellikleri: 1- Nesneye Yönelik Bir Dildir Python'da herşey bir nesnedir Fonksiyonlar, Değişkenler, Sabitler, Sınıflar ve Modüller birer nesnedir. En basit bir karakter sabiti bile nesnedir 2- Özgürdür Python kaynak kodu açık, özgür bir dildir Kaynağı C ile yazılmıştır Eğer C biliyorsanız kendinize has bir python yorumlayıcısı yazabilir ve bu yeni yorumlayıcıyı dağıtabilirsiniz
  • 4. 3- Yorumlamalı / Derlemeli Python'da yazdığınız kodlar yorumlayıcı tarafından önce ara koda (byte-code) çevrilir Daha sonra yine yorumlayıcı tarafından yorumlanarak çalıştırılır Ara Koda çevirme işi oldukça hızlıdır Ve eğer kodda bir değişiklik yapılmadıysa tekrar ara koda çevirmek yerine doğrudan daha önceki ara koddan yorumlanır Böylece ara koda çevirme işlemi atlanarak çalıştırma işlemine hızla geçilir Hatta programınızı bir başka yerde çalıştırmak için kaynak kod yerine direkt olarak ara kodu götürebilirsiniz Ancak şunu da belirtmek gerekir Ara kodu çalıştırmak için yine de python yorumlayıcısının kurulu olması gerekir Net platformuna özgü Python derleyicileri mevcut Bu derleyiciler sayesinde Python yorumlayıcısı olmadan derlenen programlar net ortamında çalıştırılabilmektedir Bu da taşınabilirlik olarak önemlidir
  • 5. 4- Taşınabilirlik Pythonda yazılmış bir programı Windows, Unix ve Türevleri, MacOs gibi pek çok işletim sisteminde çalıştırabilirsiniz Python programlarının işletim sistemi ve donanım bağımlılığı olmadığından taşınabilirliği oldukça yüksektir Ancak yine de belli bir işletim sistemine özel modül kullandığınızda bu taşınabilirlik özelliğini ortadan kaldırabilir Eğer belli bir platforma özel bir program yazmıyorsanız o platforma özgü modülleri kullanmamalısınız
  • 6. 5- Güçlüdür Pythonda aradığınız hemen hemen her şeyi bulabilir, her türlü uygulamayı geliştirebilirsiniz Unix tabanında C/C++ kütüphanelerini kullanabilir, güçlü COM desteği sayesinde windowsta Visual C++'ın gücünü kullanabilirsiniz COM desteği ile windows uygulamalarına erişip her istediğinizi yaptırabilirsiniz 6- Hızlıdır Python bir alt benzeri olan Java'ya oranla oldukça hızlıdır Pythonda modüller bağımsız olduklarından istemediğiniz Hiçbir modül hafızaya yüklenmez Böylelikle hem bellek kullanımı düşer, hemde uygulamanıza daha hakim olursunuz Ayrıca tanımlı nesnelerle işiniz bittiğinde hafızadan silinecek ve hafıza gereksiz yere meşgul edilmeyecektir
  • 7. 7- Yazımı Kolaydır Kullanımı ve yazımı oldukça kolay bir dildir Kod yazım kuralları çok sıkı olduğundan sizi düzenli kod yazmaya itecektir Bu da bugün yazdığınız bir kodu 5 yıl sonra bile rahatça anlayabilmenize olanak tanır Ayrıca pek çok dile göre aynı işi daha az kod yazarak yapabilirsiniz
  • 8. 8- Kullanım Alanı Pythonu Veritabanı programcılığı ve Internet programcılığında kullanabilirsiniz Yani Pythonla hem ticari uygulamalar geliştirebilir hem de dinamik internet sayfaları hazırlayabilirsiniz Python programlama dili son dönemlerde oldukça popülerlik kazandı Örneğin Pardus Linux işletim sisteminin çok büyük bir desteği mevcut Pek çok uygulama Pythonda yazılmış durumda Yine aynı şekilde RedHat'ın kurulum arabirimi ve diğer pek çok program pythonla yazılmış durumda Google, Nasa, Yahoo gibi pek çok firma python kullanıyor Yanlış anlama Python kelimesi aslında çoğu kişinin zannettiği gibi "Piton Yılanı" anlamına gelmiyor. "Python“ ismi Guido Van Rossum'un çok sevdiği, "Monty Python" adlı altı kişilik bir İngiliz komedi grubunun "Monty Python's Flying Circus" adlı gösterisinden geliyor. Guido Van Rossum Python'u geliştirmeye 1990 yılında başlamış... Yani aslında Python için nispeten yeni bir dil deneb
  • 9. GENEL ÖZELLİKLER Python her ne kadar bir script dili olsa da diğer scripting dillerinde olan bazı özellikleri içermez. Python’da küçük-büyük harf ayrımı mevcuttur. Bu nedenle foobar, fooBar ve FooBar birbirinden farklı nesnelerdir. Python’da değişkenler kullanılmadan önce mutlaka ilklendirilmelidir (initialization). Python yorumlayıcısı değişkenlere kullanıldığı yere göre otomatik bir değer atamayacaktır. İlklendirilmemiş bir değeri kullanmaya kalktığınızda bir NameError ile karşılaşırsınız. Ancak buna rağmen değişkenlerin tiplerinin herhangi bir özel yerde tanımlanması gerekmez, örneğin kirkiki=42 yazdığımızda kirkiki adlı değişken otomatik olarak integer veri tipine sahip olacaktır. Son olarak Python’da herşey bir nesnedir. Bu nedenle mesela bir değişkene atamadan doğrudan kullanacağımız bir string de bir string değişkenle aynı özelliklere sahiptir.
  • 10. KOD YAZMAK İÇİN Python kodlarını yazmak için iki seçeneğimiz var. Birincisi kodlarımızı doğrudan Python komut satırına yazabiliyoruz. Python komut satırını açmak için ALT+F2 tuşlarına basıp çıkan ekrana "konsole" yazmamız, ardından da konsolda "python" komutunu vermemiz gerekiyor. Bu ekranda komutlarımızı ">>>" işaretinden hemen sonra yazacağız.  İkinci seçeneğimiz ise bir metin düzenleyici kullanmaktır. Bazı ufak kodları denemek için komut satırı yeterli olsa da hem kodlarımızı kaydetmek hem de büyük programlarda rahat hareket edebilmek için mutlaka bir metin düzenleyici kullanmamız gerekiyor. Şu aşamada kullanım kolaylığı nedeniyle "kwrite" metin düzenleyici önerilebilir. ALT+F2 tuşlarına basıp "kwrite" yazarak boş bir kwrite belgesi açabiliriz. Python kodlarını yazmaya başlamadan önce, boş belgenin ilk satırına #!/usr/bin/env python yazmamız gerekiyor. Bu satır sayesinde sistemimiz, yazdığımız kodların hangi program tarafından çalıştırılacağını anlıyor.
  • 11. İşte Python’ca Hello World!: print "Hello world!“ Yorum Satırları Python’da iki tip yorum satırı mevcuttur. Tek satırlık yorumlar # karakteri ile başlarlar. Birden fazla satıra sahip yorumlar ise ””” karakterleri ile başlayıp aynı şekildekapanırlar.
  • 12. KULLANICIYLA İLETİŞİM: VERİ ALIŞ- VERİŞİ Python'da kullanıcıdan birtakım veriler alabilmek, yani kullanıcıyla iletişime geçebilmek için ikitane fonksiyondan faydalanılır. Bunlardan öncelikle ilkine bakalım: 1.raw_input() fonksiyonu #!/usr/bin/env python # -*- coding: utf-8 -*- a=raw_input("Lütfen parolanızı girin:") print "Teşekkürler!“ Şimdi bu belgeyi "deneme.py" ismiyle kaydediyoruz. Daha sonra bir konsol ekranı açıp, programımızın kayıtlı olduğu dizine geçerek şu komutla programımızı çalıştırıyoruz: python deneme.py
  • 13. Şimdi raw_input fonksiyonuna bir ara verip, kullanıcıdan bilgi almak için kullanabileceğimiz ikinci fonksiyondan biraz bahsedelim. 2.input() fonksiyonu Tıpkı raw_input fonksiyonunda olduğu gibi, bu komutla da kullanıcılardan bazı bilgileri alabiliyoruz. Şu basit örneğe bir bakalım: #!/usr/bin/env python # -*- coding: utf-8 -*- a = input("Lütfen bir sayı girin:") b = input("Lütfen başka bir sayı daha girin:") print a + b raw_input() fonksiyonunun, girilen verileri "karakter dizisi" (string) olarak; input() fonksiyonunun ise "tamsayı" (integer) olarak algılanır.
  • 14. PYTHON'DA KOŞULA BAĞLI DURUMLAR Bu iş için kullanacağımız üç tane ifade var: if..., else: ve elif... #!/usr/bin/env python #-*- coding: utf-8 -*- meyve = raw_input("Bir meyve adı yazınız: ") if meyve = = "elma": print "elma bir meyvedir" elif meyve = = "armut": print "armut bir meyvedir" else: print meyve, "bir meyve değildir!"
  • 15. PYTHON'DA DÖNGÜLER 1.while döngüsü #!/usr/bin/env python #-*- coding: utf-8 -*- a=0 while a < 100: a=a+1 print a #!/usr/bin/env python #-*- coding: utf-8 -*- soru = raw_input("Arkadaşım sen deli misin?") while soru != "hayır": print "delisin sen deli! Kulakları küpeli!“ Dikkat ederseniz burada da işleçlerimizden birini kullandık. Kullandığımız işleç "eşit değildir“ anlamına gelen "!=" işleci...
  • 16. 2.For döngüsü #!/usr/bin/env python #-*- coding: utf-8 -*- for zombi in range(1, 100): print zombi Ben burada değişken adı olarak zombi kelimesini kullandım,siz isterseniz Osman da kullanabilirsiniz  #!/usr/bin/env python #-*- coding: utf-8 -*- for kelimeler in "linux": print kelimeler Gördüğünüz gibi, for döngüsüyle yalnızca sayıları değil, karakter dizilerinin öğelerini de dökebiliyoruz ekrana.
  • 17. 3.range() fonksiyonu Bu fonksiyon Python'da sayı aralıklarını belirtmemizi sağlar. print range(100) komutu 0 ile 100 arasındaki sayıları yazdırmamızı sağlar. Başka bir örnek daha verelim: print range(100,200) komutu 100 ile 200 arasındaki sayıları döker. Bir örnek daha: print range(1,100,2) Bu komut ise 1 ile 100 arasındaki sayıları 2'şer 2'şer atlayarak yazdırmamızı sağlar...
  • 18. 4.len() fonksiyonu Bu fonksiyon, karakter dizilerinin uzunluğunu gösterir. #!/usr/bin/env python #-*- coding: utf-8 -*- a = "Afyonkarahisar" print len(a) Bu kod, "Afyonkarahisar" karakter dizisi içindeki harflerin sayısını ekrana dökecektir.
  • 19. 5.Break ifadesi break ifadesi program içinde bir noktada programı sona erdirmek gerektiği zaman kullanılır. Aşağıdaki örnek break ifadesinin ne işe yaradığını açıkça gösteriyor: #!/usr/bin/env python #-*- coding:utf-8 -*- kullanici_adi = "kullanici" parola = "sifre" while True: soru1 = raw_input("Kullanıcı adı: ") soru2 = raw_input("Şifre: ") if soru1 = = kullanici_adi and soru2 = = parola: print "Kullanıcı adı ve şifreniz onaylandı. Programa hoşgeldiniz!“ break else: print "Kullanıcı adınız veya şifrenizden en az birisi onaylanmadı.”
  • 20. 6.continue ifadesi Bu ifade ise döngü içinde bir bloğun es geçilip ondan sonraki bloğun çalıştırılmasını sağlar. Çok bilindik bir örnek verelim: #!/usr/bin/env python #-*- coding:utf-8 -*- while True: s = raw_input("Bir sayı girin: ") if s = = "iptal": break if len(s) <= 3: continue print "En fazla üç haneli bir sayı girebilirsiniz."
  • 21. PYTHON'DA LİSTELER, DEMETLER, SÖZLÜKLER Listeler Python'da herhangi bir liste oluşturmak için önce listemize bir ad vermemiz, ardından da köşeli parantez kullanarak bu listenin öğelerini belirlememiz gerekiyor. liste = ["Hale", "Jale", "Lale", 12, 23] Python komut satırında şu ifadeyi yazın: type("Hale") Bu komutun çıktısı: <type 'str'> Şimdi aynı komutu şu şekilde deniyoruz: type(123) Bu komut bize şu çıktıyı verecektir: <type 'int'> Şimdi komut satırında liste yazdığımızda tanımladığımız "liste" adlı listenin öğeleri ekrana yazdırılacaktır. Tanımladığımız bu listenin öğe sayısını len() fonksiyonu yardımıyla öğrenebiliriz: len(liste) 5
  • 22. append parçacığı İlk parçacığımız "append". Bu kelime Türkçe'de "eklemek, iliştirmek“ anlamına geliyor...Oluşturduğumuz listeye yeni bir öğe eklemek için "append" parçacığından faydalanıyoruz: liste.append("Mehmet") "Python, liste içindeki öğeleri sıralarken, listenin ilk öğesini 0'dan başlatır." insert parçacığı İşte bu "insert" parçacığı yardımıyla listenin herhangi bir noktasına öğe ekleyebiliyoruz. Bu kelime Türkçe'de "yerleştirmek, sokmak" anlamına geliyor... insert parçacığı yardımıyla listenin 1. sırasına (Dikkat edin, 0'ıncı sıraya demiyoruz) "Ahmet"i yerleştirebiliriz: liste.insert(1, "Ahmet") Burada parantez içindeki ilk sayı, "Ahmet" öğesinin liste içinde yerleştirile- ceği sırayı gösterir. Bu komutun çıktısı şöyle olur: ["Hale", "Ahmet", "Jale", "Lale", 12, 23, "Mehmet"]
  • 23. extend parçacığı yeni_liste = ["Simovic", "Prekazi", "Jardel", "Nouma"] liste.extend(yeni_liste) Bu komutun çıktısı şöyle olacaktır: ['Veli', 'Hale', 'Ahmet', 'Jale', 'Lale', 12, 23, 'Mehmet', 'Simovic', 'Prekazi', 'Jardel', 'Nouma'] remove parçacığı liste.remove("Nouma") listeden nouma silinir. pop parçacığı liste.pop() Gördüğünüz gibi, Python bu pop parçacığı yardımıyla listenin son öğesini çıkaracak, üstelik çıkardığı öğeyi ekrana yazdıracaktır. Eğer bu komutu şöyle verirsek ne olur? liste.pop(0) Bu komut ise listedeki "ilk" yani "0'ıncı" öğeyi çıkarır ve çıkardığı öğeyi ekrana yazdırır. reverse parçacığı Bu parçacık listedeki öğelerin sırasını ters yüz eder. Şöyle ki: liste.reverse() Bu komutu üst üste iki kez verirseniz listeniz ilk haline dönecektir.
  • 24. count parçacığı Listelerle birlikte kullanabileceğimiz başka bir parçacık da budur. Görevi ise liste içinde bir öğenin kaç kez geçtiğini söylemektir: liste.count("Prekazi") index parçacığı Diyelim ki listedeki "Jardel" öğesinin listenin kaçıncı sırasında olduğunu merak ediyorsunuz. İşte bu index parçacığı sizin aradığınız şey! Bu parçacığı şöyle kullanıyoruz: liste.index("Jardel") sort parçacığı Bazen listemizdeki öğeleri alfabe sırasına dizmek isteriz. İşte yüreğimizde böyle bir istek hasıl olduğunda kullanacağımız parçacığın adı "sort": liste.sort()
  • 25. Demetler Demetler (tuples) listelere benzer. Ama listeler ile aralarında çok temel bir fark vardır. Listeler üzerinde oynamalar yapabiliriz. Yani öğe ekleyebilir, öğe çıkarabiliriz. Demetlerde ise böyle bir şey yoktur... Demeti şu şekilde tanımlıyoruz: demet = "Ali", "Veli", 49, 50 Gördüğünüz gibi, yaptığımız bu iş değişken tanımlamaya çok benziyor. İstersek demetin Öğelerini parantez içinde de gösterebiliriz. demet2 = ("Ali", "Veli", 49, 50) Peki boş bir demet nasıl oluşturulur? Çok basit: demet = () Peki tek öğeli bir demet nasıl oluşturulur? O kadar basit değil. Aslında basit ama biraz tuhaf: hede = ("inek",) Yukarıda anlattığımız şekilde bir demet oluşturma işine "demetleme" (tuple packing) adı veriliyor. Bunun tersini de yapabiliriz. Buna da "demet açma" deniyor (sequence unpacking): Önce demetleyelim: aile = "Anne", "Baba", "Kardesler" Şimdi demeti açalım: a, b, c = aile Bu şekilde komut satırına "a" yazarsak, "Anne" öğesi; "b" yazarsak "Baba" öğesi; c Yazarsak "Kardesler" öğesi ekrana yazdırılacaktır.
  • 26. Sözlükler sozluk = {"elma": "meyve", "domates": "sebze", 1: "sayi"} telefon_defteri = {"Ahmet": "0533 123 45 67", "Kezban": "0532 321 54 76", "Feristah": "0533 333 33 33"} Burada örneğin, "elma" bir "anahtar", "meyve" ise bu anahtarın "değeri"dir. Aynı şekilde "sebze“ değerinin anahtarı "domates"tir. Dolayısıyla Python'da sözlük; "anahtar" ve "değer" arasındaki ilişkiyi gösteren bir veri tipidir! Şimdi gelelim bu sözlükleri nasıl yöneteceğimize... Diyelim ki sözlüğümüze yeni bir öğe eklemek istiyoruz: telefon_defteri["Zekiye"] = "0544 444 01 00“ Eğer biz sözlükteki bütün öğeleri silmek istersek şu komut kullanılıyor: telefon_defteri.clear()
  • 27. FONKSİYON TANIMLAMA Fonksiyonları tanımlarken "def" adlı bir parçacıktan yararlanacağız. Bu "def" parçacığının hemen ardından ise fonksiyonumuzun adını belirleme- miz gerekiyor... def ilk_fonksiyonumuz(): print "Ben Python! Monty Python!“ Fonksiyonlarda Parametreler Args=demet ve kwargs=sözlük def foobar(foo, bar="42", *args, **kwargs): ... Dikkat etmemiz gereken kural parametrelerin sıraının önce normal parametreler, ardından öntanımlı değere sahip parametreler, ardından geri kalan parametreleri toplamak üzere *args ve **kwargs tanımlarını kullanmaktır. Python’un fonksiyon tanımlarında içerdiği en önemli kolaylık değişken uzunluktaki parametre listeleridir. Bu sayede bir fonksiyonun sınırsız sayıda parametre alması sağlanabildiği gibi bir demet, liste veya sözlük içerisindeki veriler de kolayca bir fonksiyona parametre olarak geçirilebilir.( args adlı bir demet kwargs adlı bir sözlükten önce gelir)
  • 28. Başka bir örnek: #!/usr/bin/env python #-*- coding:utf-8 -*- def merhaba(arkadas): print "Merhaba", arkadas arkadas = "Kezban" arkadas = "Mücella" merhaba(arkadas) Sizce Python burada kimi arkadaştan sayacak? Kezban'ı mı yoksa Mücella'yı mı? Cevap: Mücella! Peki bunun nedeni nedir? Cevap: Python fonksiyonlarda değişkenleri okumaya sondan başlar... Yukarıdaki örnekte arkadas = "Mücella" ifadesinin altına arkadas = "Ahmet" ifadesini eklerseniz, Python bu kez "Ahmet"i dikkate alacaktır... Çünkü bu kez en sonda "Ahmet" değeri olmuş olacak...
  • 29. "return" ifadesi Bu ifadenin ne işe yaradığını anlamak için şu örneklere bakalım: #!/usr/bin/env python #-*- coding:utf-8 -*- def return_deneme(a,b): if a < b: return a else: return b print return_deneme(34, 45) Gördüğünüz gibi burada "return" ifadesi yarattığımız koşulun sonucuna göre ya a değişkenini ya da b değişkenini "döndürüyor"; yani bize çıktı olarak veriyor...
  • 30. "pass" ifadesi #!/usr/bin/python def deneme(): liste = [] while True: a = raw_input("Giriniz: ") if a = = "0": pass else: liste.append(a) print liste deneme() Burada gördüğümüz gibi, eğer kullanıcı "0" değerini girerse, bu değer listeye eklenmeyecek,Python hiçbir şey yapmadan bu satırı atlayacaktır.
  • 31. Veri Tipleri 1.Boolean değerler Python’un geniş veri tipi seçenekleri arasında en yeni olanı boolean değerlerdir. Python 2.2’ye kadar True ve False anahtar kelimeleri yoktur. 2.2’de ise 0 ve 1 sayılarına denk olarak bu kelimeler getirildikten sonra sonunda 2.3 sürümü ile Python gerçek bir boolean tipine kavuşmuştur. Boolean veri tipinin Python’da bu kadar geç ortaya ¸cıkmasının sebebi Python’un C’ye benzer bir şekilde her türlü veri tipini doğruluk testinde kullanabiliyor olmasıdır. Örneğin boş bir string, boş bir liste veya 0 sayısı yanlış, 0 dışındaki herhangi bir sayı, boyutu 0’dan büyük olan herhangi bir liste veya string ise doğru kabul edilecektir. Bunun dışında __nonzero__ adlı fonksiyonu kendi sınıfımızın içerisinde tanımlayarak kendi yaratacağımız bir sınıfı da doğruluk testinde kullanmak mümkündür.
  • 32. 2.Sayısal Tipler Python’da dört temel sayısal veri tipi bulunmaktadır. 1.integer (Tamsayı), 2.long (Uzun tamsayı), 3. float (Kayar noktalı sayı), 4. complex (Karmaşık sayı) Bu veri tiplerinin tamamı işaretli sayılardır. Gerektiği durumlarda Python yorumlayıcısı integer, long ve float tipleri arasında otomatik değişimler yapabilmektedir. Örneğin Python yorumlayıcısına integer’ın sınırlarını aşan bir sayı verdiğiniz takdirde yorumlayıcı bunu otomatik olarak long tipine çevirecektir. Aynı şekilde bir işlemin operandlarından birinin float olması halinde sonuç da float’a dönecektir.
  • 33. 3.String Tipleri Python C printf tarzı metin bi¸cimlendirme (String Formatting) karakterlerini destekler. Bu biçimlendirme karakterlerinin tam bir listesine http://www.python.org/doc/current/lib/typesseq-strings html adresinden ulaşabilirsiniz. Bu tip metin biçimlendirme işlemlerinde Python’un getirdiği bir kolaylık biçimlenecek metnin içine koyulacak değerleri bir liste yerine sözlükten alabilme özelliğidir. Bu sayede biçimlendirilecek metnin içine yerleştirilecek veriler listedeki sıralarından bağımsız olarak isimleriyle kullanılabi- lirler.
  • 34. SINIF TANIMLAMAK class IlkSinif: mesele = "Olmak ya da olmamak" Örnekleme (Instantiation) Şimdi şöyle bir şey yazıyoruz: >>>deneme = IlkSinif() Artık şu komut yardımıyla, sınıf örneğimizin “niteliklerine” ulaşabiliriz: >>>deneme.mesele Böylece oluşturduğumuz sınıfı bir değişkene atadık. NTP kavramlarıyla konuşacak olursak, “sınıfımızı örneklemiş olduk”. Çöp Toplama (Garbage Collection) Peki biz bir sınıfı örneklemezsek ne olur? Eğer bir sınıfı örneklemezsek, o örneklenmeyen sınıf program tarafından otomatik olarak "çöp toplama“ (garbage collection) adı verilen bir sürece tabi tutulacaktır. Burada bu sürecin ayrıntılarına girmeyeceğiz. Ama kısaca şöyle anlatabiliriz: Python'da (ve bir çok programlama dilinde) yazdığımız programlar içindeki "işe yaramayan" veriler bellekten silinir. Böylece etkili bir hafıza yönetimi uygulanmış ve programların performansı artırılmış olur.
  • 35. __init__ Nedir? #!/usr/bin/env python #-*- coding:utf8 -*- class Oyun: def __init__(self): enerji = 50 para = 100 fabrika = 4 isci = 10 print "enerji:", enerji print "para:", para print "fabrika:", fabrika print "işçi:", isci macera = Oyun() Python’da bir programın ilk kez çalıştırıldığı anda işlemesini istediğimiz şeyleri bu __init__ fonksiyonu içine yazıyoruz. Mesela yukarıdaki ufak oyun çalışmasında, oyuna başlandığı anda Bir oyuncunun sahip olacağı özellikleri __init__ fonksiyonu içinde tanımladık. Buna göre bu Oyunda bir oyuncu oyuna başladığında; enerjisi 50, parası 100 fabrika sayısı 4, işçi sayısı ise 10 olacaktır.
  • 36. Self nedir? class Oyun: def __init__(self): self.enerji = 50 self.para = 100 self.fabrika = 4 self.isci = 10 def goster(self): print "enerji:", self.enerji print "para:", self.para print "fabrika:", self.fabrika print "işçi:", self.isci macera = Oyun()
  • 37. Gördüğünüz gibi, kodlar içinde yazdığımız değişkenlerin, fonksiyon dışından da çağrılabilmesi için, yani bir bakıma "global" bir nitelik kazanması için “self” olarak tanımlanmaları gerekiyor. Yani mesela, “enerji” yerine “self.enerji” diyerek, bu “enerji” adlı değişkenin yalnızca içinde bulunduğu fonksiyonda değil, o fonksiyonun dışında da kullanılabilmesini sağlıyoruz. İyice somutlaştırmak gerekirse, “__init__” fonksiyonu içinde tanımladığımız “enerji” adlı değişken, bu haliyle “goster” adlı fonksiyonun içinde kullanılamaz. Daha da önemlisi bu kodları bu haliyle tam olarak çalıştıramayız da. Mesela şu temel komutları işletemeyiz:  macera.enerji  macera.para  macera.isci  macera.fabrika
  • 38. MİRAS ALMA (INHERİTANCE) class Dusman(Oyun): Böylelikle daha en başta tanımladığımız “Oyun” adlı sınıfı, bu yeni oluşturduğumuz sınıfa miras verdik. Dusman sınıfının durumunu Python’cada şöyle ifade “Dusman sınıfı Oyun sınıfını miras aldı” (Dusman inherits from Oyun) class Dusman(Oyun): def __init__(self): Oyun.__init__(self) self.ego = 0 def goster(self): Oyun.goster(self) print "ego:", self.ego
  • 39. Eski ve Yeni Sınıflar Şimdiye kadar verdiğimiz sınıf örneklerinde önemli bir konudan hiç bahsetmedik. Python'da iki tip sınıf vardır: Eski tip sınıflar ve yeni tip sınıflar. Ancak korkmanızı gerektirecek kadar fark yoktur bu iki sınıf tipi arasında. Ayrıca hangi sınıf tipini kullanırsanız kullanın sorun yaşamazsınız. Ama tabii ki kendimizi yeni tipe alıştırmakta fayda var, çünkü muhtemelen Python'un sonraki sürümlerinden birinde (büyük ihtimalle Python 3.0'da) eski tip sınıflar kullanımdan kaldırılacaktır.
  • 40. Eski tip sınıflar ile yeni tip sınıflar arasındaki en büyük fark şudur: Eski tip sınıflar şöyle tanımlanır: class Deneme: Yeni tip sınıflar ise şöyle tanımlanır: class Deneme(object) Gördüğünüz gibi, eski tip sınıflarda başka bir sınıfı miras alma zorunluluğu yoktur. O yüzden sınıfları istersek parantezsiz olarak tanımlayabiliyoruz. Yeni tip sınıflarda ise her sınıf mutlaka başka bir sınıfı miras almalıdır. Eğer kodlarınız içinde gerçekten miras almanız gereken başka bir sınıf yoksa, öntanımlı olarak "object" adlı sınıfı miras almanız gerekiyor. Dolayısıyla politikamız şu olacak: "Ya bir sınıfı miras al, ya da miras alman gereken herhangi bir sınıf yoksa, "object" adlı sınıfı miras al..."
  • 41. KAYNAKLA R [1] Python Dökümantasyonu (http://www.python.org/doc/current/ [2] Python Kılavuzu ( http://www.geocities.com/dinceraydin/python/tut/tut.html) [3] Dive Into Python (http://www.diveintopyhton.org) [4] Python Style Guide (http://www.python.org/doc/essays/styleguide.html) [5] Python, Mustafa Başer, 2002

Editor's Notes

  1. Eg identifier is a token that can have lexemes such a s sum and total Examples of tokens and lexemes on p 106 of statement (on previous page) index = 2 * count + 17;
  2. Explain meta symbols used “ ::=“ - “consists of “ “is the same as” “ |” - “or” Explain the process of derivation starting with the goal symbol of the language The multiple sentential forms are shown on next slide Further examaple on p 109 of text “Grammar for a small language”
  3. in this derivation the leftmost non terminal is replaced - this is called a leftmost derivation the sentential form consisting of only terminals (lexemes) is the generated sentence. Most languages are infinite so cannot generate all sentences Conversely could start with a sentence “the apple eats the man” and work backward through the derivation to arrive at &lt;sentence&gt; and so have shown that the sentence is legal in the language. Louden p,67 Articles at the beginning of sentence should have capital Such ‘positional properties’ not easy in context-free grammars
  4. Grammars naturally describe the hierarchical syntactic structure of sentences The parse tree is labeled by nonterminals at interior nodes and terminals at leasves All terminals and nonterminals in a derivation are included Every Subtree of a parse tree describes one instance of an abstraction in a grammar statements Not all terminals and nonterminals may be necessary to determine the structure Abstract syntax trees abstract the essential structure of the parse tree