PYTHON 3 Yrd. Doç. Dr. Murat Olcay ÖZCAN Python Nedir? Python, üst düzey, yorumlayıcı kullanan, etkileşimli ve nesne yönelimli bir programlama dilidir. Yorumlayıcı (interpreter) kullanır. Çalıştırmadan önce kodu derlemenize gerek yoktur. Etkileşimli. Python kabuğunda direkt yorumlayıcıda kod çalıştırabilirsiniz. Nesne Tabanlı programlamayı destekler. Yeni başlayanlar için harika. Kolay bir yazım diline sahip olduğundan programlamaya yeni başlayanlar için iyi bir tercihtir. Metin işlemeden görüntü işlemeye, WEB sayfaları oluşturmaktan oyun programlamaya kadar birçok alanda kullanılabilir.
Python Tarihi Guido van Rossum tarafından 80 lerin sonunda Hollanda da geliştirilmeye başlanmıştır. Geliştirilmesinde ABC, Modula-3, C, C++, Algol-68, SmallTalk, Unix kabuğu ve diğer script dillerinden esinlenilmiştir. Açık kaynak kodlu ve ücretsizdir. Sürüm çıkış tarihleri: Python 1.0 Kasım 1994 Python 2.0 2000 Python 3.0-2008 Python Özellikleri Öğrenmesi kolay Okuması kolay Bakımı kolay Geniş kütüphane seçenekleri Unix, Linux, Windows, MacOS uyumlu Taşınabilir - Python çok çeşitli donanım platformlarında çalışabilir ve tüm platformlarda aynı arabirime sahiptir Genişletilebilir - Alt düzey modülleri Python yorumlayıcısına ekleyebilirsiniz. Veritabanları - Python, tüm önemli ticari veritabanlarına arabirimler sağlar. GUI Programlama - Python, Windows MFC, Macintosh ve Unix'in X Window sistemi gibi birçok sisteme uyumlu GUI uygulamalarını destekler.
Kurulum www.python.org sitesinden indirebilir. Kurulum - Alternatif Python ve bir çok bilimsel kütüphaneyi içeren Anaconda paketini yüklemek için: https://www.continuum.io/downloads
Kod Editörü - PyCharm Community ücretsiz sürümünü indirmek için www.jetbrains.com/pycharm/download/ Ücretsiz Kitap www.istihza.com a giriş yaptıktan sonra Python 3 seçilerek kitaba ulaşılır. Web sayfaları şeklinde gezilebilir ya da PDF olarak indirilebilir.
Ayrılmış İsimler Python dilinde belirli bir amacı yerine getirirler. Değişken, fonksiyon, sınıf isimlerinde kullanılamayacak kelimelerdir. Çok satırlı işlemler Genelde her işlem satır sonunda satır sonunda bitirilir. Ancak istenirse satır sonunda (\) karakteri kullanılarak işlem sonlanmadan alt satıra geçilebilir.
Yorum Eklemek Kodların arasına yorum satırları eklemek için # işareti kullanılır. Yalnız başına ya da bir işlemle aynı satırda kullanılabilir. Bir satırda birden çok işlem Noktalı-virgül ; kullanılarak aynı satırda birden çok işlem yazılabilir.
Değişkenlere değer atamak Python değişkenlerinin bellek alanını ayırmak için önceden tanımlanmasına gerek yoktur. Bir değişkene bir değer atandığında bildirim otomatik olarak gerçekleşir. Eşittir işareti (=) değişkenlere değer atamak için kullanılır. Çoklu Değer Ataması Python aynı anda birden fazla değişkene tek bir değer atamanıza izin verir. Aynı anda birden çok aynı yada farklı tip değişkene, farklı değerler de atanabilir.
Yazdırma ve Klavyeden Giriş print fonksiyonu kullanılarak standart çıkış aygıtına yazdırma işlemi yapılır. Virgül (,) ile birden fazla veri tipi birleştirilebilir. input fonksiyonu kullanılarak klavyeden girilen girdiler okunur. Okunan değer string(karakter dizisi) tipindedir. Standart Veri Tipleri Sayılar int (tamsayı) float (kesirli sayı) complex (karmaşık sayı) String (Karakter Dizisi) Boolean (True, False) Listeler Demetler Sözlükler
Sayılar Sayı örnekleri String Python'da String, tırnak işaretleri içinde temsil edilen bitişik karakter kümesi olarak tanımlanır. Tek veya çift tırnak " kullanılabilir. Dizelerin alt kümeleri, dizenin başı 0'dan başlamak üzere, dilim işleci ([] ve [:]) kullanılarak alınabilir. Artı (+) işareti dize birleştirme operatörü ve yıldız (*) tekrarlama operatörüdür.
Kaçış Dizileri Veri tiplerinde dönüşüm Fonksiyon int(x) float(x) str(x) chr(x) hex(x) oct(x) tuple(s) list(s) dict(d) Tanım x i Tamsayıya çevirir. x i kesirli sayıya çevirir. x i string e çevirir. x bir karaktere çevirir. x tamsayısını hexadecimal a çevirir. x tamsayısını octal a çevirir. s i demete çevirir. s i listeye çevirir. s i sözlüğe çevirir.
Temel Operatörler(İşleçler) Aritmetik İşleçler Karşılaştırma İşleçleri Mantıksal İşleçler Atama İşleçleri Aitlik İşleçleri Aritmetik İşleçler Karşılaştırma İşleçleri
Mantıksal İşleçleri İşleç Tanım Örnek (a=true b=false) and Logical AND İki işleç de doğru ise koşul doğru olur. (a and b) False. or Logical OR İkisinden bir tanesi bile doğru ise koşul doğru olur. (a or b) True. not Logical NOT İşlecin mantıksal durumunun tersini alır. Not(a and b) True. Değer Atama İşleçleri Atama İşleci Örnek Kullanım Açıklama = c = a + b a ve b toplamı c ye atanır. += a += 5 a = a + 5 -= a -= 5 a = a - 5 *=, /=, %=, **=, //= bunlar da aynı şekilde
Aitlik İşleçleri İşleç in Tanım Değeri belirtilen dizi içinde bulursa True, bulamazsa False sonucu verir. not in Değeri belirtilen dizi içinde bulamazsa True, bulursa False sonucu verir. İşleçlerde İşlem Öncelikleri
Karar Verme if bloğu if bloğu verinin karşılatırıldığı mantıksal bir ifade içerir. Karşılaştırma sonucunda True ise içerdiği işlemler gerçekleştirilir. Sonuç False ise işletim bloğun sonundan devam eder. if ifade: işlem(ler) Karar Verme if else bloğu if bloğu içindeki ifadenin sonucunun False olduğu durumda işletilecek ifadeler else bloğu içinde tanımlanabilir. if ifade: else: İşlem(ler) İşlem(ler)
Karar Verme elif bloğu if bloğunun False olduğu durumda, else bloğuna geçiş yapmak yerine daha fazla koşulu kontrol edebilmek için araya istenilen sayıda elif bloğu eklenebilir. Bir elif bloğu True değer aldığında if elif- else bloğu sonuna gidilerek işlemlerin çalıştırılması buradan devam eder. Listeler Virgülle ayrılmış değerler barındıran bir yapıdır. İçerdiği değerlerin aynı tipte olması zorunluluğu yoktur. String ler için geçerli olan erişim ve dilimleme işlemleri aynı şekilde geçerlidir. Erişilen değere yeni değer atanabilir. Yerini bildiğimiz bir elemanı silmek için del ifadesini kullanabiliriz.
Listeler II Temel İşlemler ve Fonksiyonlar İşlem Sonuç Tanım len([1, 2, 3]) 3 Uzunluğu verir [1, 2, 3] + [4, 5, 6] [1, 2, 3, 4, 5, 6] Birleştirme ['Hi!'] * 4 ['Hi!', 'Hi!', 'Hi!', 'Hi!'] Tekrarlama 3 in [1, 2, 3] True Aitlik max([1, 2, 3]) 3 En büyük değeri verir min([1, 2, 3]) 1 En küçük değeri verir Listeler III Liste Methodları Method liste.append(x) liste.insert(index, x) liste.remove(x) liste.index(x) liste.reverse() liste.sort() Açıklama Listenin sonuna x i ekler Listenin index sırasına x i ekler Listeden x i siler Listede x in ilk bulunduğu yeri verir Listeyi terse çevirir Listeyi sıralar
Tuple (Demetler) Listeler gibi bir değer dizisi olup, farkı içerdiğin değerlerin değiştirilemez olmasıdır. Genel olarak parantez içinde virgül ile ayrılmış değerler olarak tanımlanır. Boş olarak tanımlamak için: Tek elemanlı bir tuple tanımlamak için: Elemanlara erişim, atama ve diğer fonksiyonlar Listelerde olduğu gibidir. Sözlük (Dictionary) Sözlüklerin her bir elemanı değeri tanımlayan bir ifade ile değerin : (ikinokta) ile birleşmesinden oluşur. Bir sözlükteki değerleri tanımlayan anahtarlar eşsiz olmalıdır. Değerler için böyle bir zorunluluk yoktur. Değerler herhangi bir veri tipinde olabilir ancak anahtarlar string, sayı yada tüple gibi değişmez bir yapı türünde olmalıdır.
Sözlük II Varolan kayıtlar değiştirebilir ya da yeni anahtar-değer kaydı eklenebilir. Varolan kayıtlar ya da tüm sözlük silinebilir. Döngüler - while Belirtilen koşul True sonucunu verdiği sürece içerdiği işlemleri yerine getirir. İşlemler yerine getirildikten sonra koşul tekrar kontrol edilir. Koşul True olduğu sürece bu böyle devam eder. while ifade: işlem(ler)
Döngüler - for İçerdiği işlemleri belirli sayıda çalıştırmak için kullanılır. Genellikle döngünün kaç kez tekrarlanacağı önceden bilindiğinde ve bir dizinin tüm elemanları için işlem yapılacağında tercih edilir. for tekrarlama_değişkeni in dizi: işlem(ler) Döngü Kontrol İfadeleri İfade break continue pass Açıklama Döngüyü kırıp çıkar, döngü sonlanmış olur. Döngünün o dönüşü sonlanmış olur, döngü içi diğer işlemler yapılmadan döngünün başına gidilir. Hiç bir işlem yapmaz, bir nevi hatırlatıcıdır
Döngülerde Else Kullanımı Python programlama dilinde döngüler için else bloğu kullanılabilir. While döngüsü ile kullanıldığında: Koşul False değerini aldığında else bloğu çalıştırılır. For döngüsü ile kullanıldığında: Döngü tekrarlamayı bitirdiğinde else bloğu çalıştırılır. ANCAK döngü break ile sonlanmışsa else bloğu çalıştırılmaz. Fonksiyonlar Bir fonksiyon, tek bir ilgili eylem gerçekleştirmek için kullanılan, tekrar kullanılabilir organize bir kod bloğudur. Fonksiyonlar, uygulamanız için daha iyi modülerlik ve yüksek oranda kod tekrar kullanımı sağlar. Python içinde tanımlı print() gibi bir çok fonksiyon olduğu gibi kendi fonksiyonumuzu da tanımlayabiliriz.
Kullanıcı Tanımlı Fonksiyon def anahtar kelimesi ile fonksiyon tanımlanır. Fonksiyona aktarılacak parametre ve argümanlar parantez içinde tanımlanır. Opsiyonel olarak fonksiyon bilgi kısmı içerebilir. return ifadesi ile fonksiyon sonlandığında bir değer döndürülmesi sağlanabilir. Genel Yapı: Kullanıcı Tanımlı Fonksiyon II Birden fazla parametre kullanılacaksa ya da birden fazla değer return ile döndürülecekse değer/değişkenler, ile ayrılarak yazılır. Parametre alıp almamasına göre ve değer geri döndürüp döndürmemesine göre farklı tipte fonksiyonlar yazılabilir. Parametre almayan ve değer döndürmeyen fonksiyon Parametre almayan ve değer döndüren fonksiyon Parametre alan ve değer döndürmeyen fonksiyon Parametre alan ve değer döndüren fonksiyon
Anonim Fonksiyonlar def anahtar kelimesi kullanılmadan oluşturulan fonksiyonlardır. lambda anahtar kelimesi kullanılarak küçük anonim fonksiyonlar oluşturulur. Anonim fonksiyonlar bir çok parametre alabilir, ancak tek bir ifade içerebilir. Komut, yazdırma yada birden fazla işlem içeremez. lambda [arg1 [,arg2,...argn]]:ifade print(f) print(f) map() ve filter() fonksiyonları Lambda (anonim) fonksiyonlarla sıklıkla birlikte kullanılan fonksiyonlardır. def ile tanımlamış fonksiyonlar ile birlikte de kullanılabilseler de, hız ve kolaylık açısından anonim fonksiyonlarla birlikte kullanımları yaygındır. map() fonksiyonu bir fonksiyon adı ve bir dizi adı olmak üzere iki argüman almaktadır. map (fonksiyon, dizi) map() fonksiyonu dizinin her elemanı için fonksiyonu çalıştırır ve sonuçları döngüsel olarak bize verir. Bu sonuçları istersek bir listeye alabilir, ya da for döngüsü için kullanabiliriz.
map() fonksiyonu örnekler Listedeki sıcaklık değerlerini Celcius dan fahrenheit a çevirmek: Fahrenheit dan tekrar Celcius a dönüşüm: Birden fazla liste üzerinde de işlem yapılabilir. filter() fonksiyonu filter() fonksiyonu da aynı şekilde bir fonksiyon ve bir dizi olmak üzere iki argüman almaktadır. filter (fonksiyon, dizi) filter() fonksiyonu dizinin her elemanı için fonksiyonu çalıştırır ve fonksiyonun sonuç olarak True değerini verdiği elemanları döngüsel olarak bize verir. Bu elemanları istersek bir listeye alabilir, ya da for döngüsü için kullanabiliriz.
filter() fonksiyonu örnekler Bir fibonacci dizisindeki tek ve çift sayıları bulup, bir listeye atamak: Dosya İşlemleri open fonksiyonu kullanılarak dosya oluşturma/açma işlemleri yapılır. open(dosya_ismi, erişim_kipi) Erişim kipi ile dosyanın yazma, okuma, sonuna ekleme gibi farklı durumlar için açılması sağlanır. Bazı erişim kipi değerleri: r : Sadece okumak için. Dosya imleci dosyanın başındadır. r+ : Hem okuma hem yazmak için. Dosya imleci dosyanın başındadır. w : Sadece yazmak için. Dosya varsa üzerine yazar, yoksa oluşturur. w+ : Hem okuma hem yazmak için. Dosya varsa üzerine yazar, yoksa oluşturur. a :Dosya sonuna ekleme yapmak için. Dosya imleci dosyanın sonundadır.
Dosya Nesnesi Özellikleri Özellik dosya.closed dosya.mode dosya.name Açıklama Dosya kapalıysa True, değilse False döndürür. Dosyanın açıldığı erişim kipini verir. Dosyanın ismini verir. dosyam.close() metodu ile dosya kapatılır. Okumak ve Dosyaya Yazmak Dosyaya yazmak için write() metodu kullanılır. Dosyadan bir string okumak için read() metodu kullanılır. Parametre olarak girilen sayı kadar byte okunur. Sayı girilmezse dosya sonuna kadar okuma işlemi yapılması denenir. Dosyadan bir satır okumak için readline() metodu kullanılır. Dosyadan tüm satırları okuyup her satırı bir eleman olarak bir listeye aktarmak için ise readlines() metodu kullanılır. Bir listeyi satır satır yazmak için ise writelines() metodu kullanılabilir.
Dosya imleci konumlandırma tell() metodu dosya içerisinde nerede olduğunu gösterir. Diğer bir ifadeyle bir sonraki okuma yada yazma işleminin hangi byte için yapılacağını gösterir. seek(offset, başlangıç) metodu ile dosya imleci offset kadar ilerletilir. başlangıç değeri: 0 ise dosya başından itibaren 1 ise o anki pozisyonundan itibaren 2 ise dosya sonundan itibaren Hata Yakalama (Exception Handling) Program içindeki hatalı bir kod ya da hatalı bir giriş değeri bazen hataya ve programın sonlanmasına sebep olabilir. Hata oluşur oluşmaz, program sonlanır. Örneğin aşağıdaki kod bir sıfıra bölüm hatası vererek programı sonlandırmaktadır.
Hata Yakalama II Karşılaşabilecek bazı genel hatalar şunlardır: ImportError : import başarısız olduğunda IndexError : liste içinde tanımlı olmayan bir sıradaki elemana erişmek istendiğinde NameError : bilinmeyen bir değişken kullanıldığında SyntaxError : kod içinde yazım kurallarına uygunluk sağlanmadığında TypeError : bir fonksiyon uygunsuz bir değer ile çağrıldığında ValueError: bir fonksiyon uygun tipte ancak uygunsuz bir değer ile çağrıldığında Python içinde tanımlı daha bir çok hata türü vardır. ZeroDivisionError ve OSError gibi. Python a sonradan yüklenmiş kütüphanelerin de kendilerine ait tanımlı hata türleri bulunmaktadır. Hata Yakalama III try/except Hatalarla başedilmek ve hata oluştuğunda başka bir kodu çalıştırmak için try/except bloğu kullanılır. Hata oluşabilecek kod try bloğu içine konur ve hata oluştuğunda bu bloğun işletimi durdurularak except bloğu işletilir. Hata oluşmazsa except bloğu da işletilmez.
Bu kodun çıktısı ne olur? Hata Yakalama IV try bloğunun birden çok except bloğu olabileceği gibi bir except bloğuna da birden fala hata tanımlanabilir. Hata türü belirtilmezse except bloğu tüm hataları yakalar.
Hata Yakalama V - finally Hata oluşsun ya da oluşmasın bir kodun mutlaka çalışmasını istiyorsak bu kodu finally bloğu içine yazabiliriz. Hata oluşturma Programın çalışmasını durdurmak için kendi istediğimizde hata da oluşturabiliriz. Bunun için raise komutu kullanılır.