Programlama 2
Programlama 2
Python programlama dili, Guido van Rossum tarafından 1990 yılında tasarlanmaya
başlanmıştır.
Otomatik çöp toplama (garbage collector) desteği vardır.
Dinamik tip kontrolünü destekler ve yüksek seviyeli dinamik veri tiplerini sağlamaktadır.
Windows’ta Python programlama dili %LOCALAPPDATA%\Programs\Python dizinine kurulur.
Python’da tanımlayıcı isimlendirilirken !, @, #, $, % vb. gibi özel semboller kullanılamaz.
Bir tanımlayıcı bir rakamla başlayamaz.
Python büyük/küçük harfe duyarlı bir dildir.
Python’da, bir ifadenin sonu yeni satır karakteri ile işaretlenir. Ancak satır devam karakteri “\”
ile birden çok satıra yayılan bir ifade yapabiliriz
Python’da, parantezler ( ), köşeli ayraçlar [ ] ve süslü parantezler { } içinde de satır devamı
belirtilir.
Değişken isimlerinde ( -, +, /, *, #, ?, .) ve boşluk gibi özel karakterler kullanılamaz.
Noktalı virgül kullanarak birden çok ifadeyi tek bir satırda da kodlayabiliriz.
Docstring, belge dizesinin kısaltmasıdır. Belge dizeleri, nesneyle __doc__ öznitelikleri olarak
ilişkilendirilir. (Örnek: print(double.__doc__))
NOT: İnput fonksiyonu ile alınan verinin tipi hafızada string olarak tutulmaktadır.
Aritmetik Operatörler
Karşılaştırma Operatörleri
Mantıksal Operatörler
Atama Operatörleri
Kimlik Oparatörleri
Üyelik Operatörleri
Python’daki üyelik operatörleri “in” ve “not in” olarak tanımlanmıştır.
range() fonksiyonu bir sayı dizisi oluşturmak için kullanılmaktadır. Başlangıç, bitiş ve adım
değerleri de range (başlangıç, bitiş, adım) olarak tanımlanmaktadır.
Bir for döngüsüne, isteğe bağlı olarak bir else bloğu eklenebilir.
Python dilinde switch-case ifadesi bulunmamaktadır. Bu durumu aşmak için sözlük eşleşmesi
(dictionary mapping) kullanılmaktadır.
NOT: İşlev, metot ve fonksiyon aynı kavramı ifade etmek için kullanılan farklı isimlerdir.
Fonksiyonlar
def: Fonksiyon başlığının başlangıcını işaretleyen anahtar sözcüktür.
fonksiyon_adı: Fonksiyonu benzersiz şekilde tanımlamak için kullanılan bir tanımlamadır.
Fonksiyon isimlendirme, Python’da değişken isimlendirme ile aynı kuralları izler.
parametre(ler): Bir fonksiyona iletmek istediğimiz değerlerdir. İsteğe bağlı olarak kullanılır.
İki nokta üst üste (:): Fonksiyon başlığının sonunu işaretlemek için kullanılır.
docstring (Yorum satırı): Fonksiyonun parametreleri ve fonksiyonun görevini açıklamak için
isteğe bağlı yazılan açıklamaları içerir.
kod bloğu: Fonksiyon gövdesini oluşturan bir veya daha fazla geçerli python ifadesine verilen
isimdir. İfadeler aynı girinti düzeyine sahip olmalıdır (genellikle 4 boşluk veya 1 tab girintisi).
return: Fonksiyondan bir değer döndürmek için isteğe bağlı olarak kullanılabilen bir dönüş
ifadesidir. Return ifadesi bulunmuyorsa, fonksiyon None nesnesini döndürür.
NOT: Python’da, fonksiyon tanımı her zaman fonksiyon çağrısından önce bulunmalıdır.
Fonksiyon dışındaki değişkenlerin değerini fonksiyonun içinden değiştirmek için, global anahtar
sözcüğü kullanılarak global değişkenler olarak bildirilmeleri gerekmektedir.
NOT: Özyinelemeli fonksiyonlarda varsayılan olarak, maksimum özyineleme derinliği 1000’dir. Sınır
aşılırsa, RecursionError ile sonuçlanır.
Filter() fonksiyonu listedeki tüm öğelerle birlikte çağrılır ve fonksiyonun Doğru olarak
değerlendirdiği öğeleri içeren yeni bir liste döndürür. Yani liste elemanlarını fonksiyona göre
filtreler.
Map() fonksiyonu ile bir liste elemanları tek tek düzenlenebilir. Örneğin bir liste
elemanlarının karesi alınabilir.
Modüller
Modülleri içeri aktarmak için import anahtar kelimesi kullanılır.
İmport (Modülİsmi) as (Yeniİsim) şeklinde yazılarak modüle takma isim verilebilir.
From (Modülİsmi) import (Fonksiyonİsmi) ile modül içinden ihtiyaç duyulan fonksiyon
aktarılabilir.
From (Modülİsmi) import * ile modüldeki bütün fonksiyonlar aktarılabilir.
Bir modüldeki kullanılabilecek bütün fonksiyonların isimlerini öğrenmek için
dir(Modülİsmi) metodu kullanılabilir.
Bir oturum sırasında bir modül yalnızca bir kez içe aktarılır.
Program sırasında değişen modülün çalışması için tekrar yüklenmesi gerekir.
Bir modülü yeniden yüklemek için imp modülünün içindeki reload() işlevi kullanılabilir.
Paket Yapısı
Python’un bir yapıyı paket olarak kabul etmesi için, __init__.py adlı bir dosya içermelidir.
Paketler bir çok modülü içeren klasörlerden oluşur.
Nokta (.) operatörü kullanılarak paketlerden modüller içe aktarılır. (Örneğin: import
Paketİ[Link]İsmi.Mödülİsmi)
Paket Yöneticisi (pip): Python ortamınızda pip kurulu değilse, pip’in kurulumu için doğrudan
pip’in sağlayıcıları tarafından desteklenen 2 mekanizma vardır.
o Ensurepip
o [Link]
o pip –version ya da pip –help kurulumun başarılı olarak yüklendiğini kontrol
etmek için bu komutlar çalıştırılabilir.
Python ile yüklü olarak gelen standart paketler lib klasörü altında bulunur.
Paketlerin yüklü olduğu dizini kontrol etmek için paket import ile dahil edildikten sonra
Paketİsmi.__path__ ile paketin yüklü olduğu dizin bulunabilir.
Veri Türleri
Bir değişkenin veya bir değerin hangi sınıfa ait olduğunu öğrenmek için type() fonksiyonu ve
belirli bir sınıfa ait olup olmadığını kontrol etmek için isinstance() fonksiyonu kullanılabilir.
Python dilinde, dilimleme operatörü olarak “:” kullanılmaktadır. Örneğin: Liste[0:5] bize
listenin 0. indeksinden 5. indeksine kadar olan elemanları verir.
Listeler
Demet
Tek elemanlı bir demet oluşturmak biraz zordur. Tek eleman girildikten sonra virgül koyularak
bir demet oluşturulabilir.
bir demeti tamamen silmek, “del” anahtar sözcüğünü kullanarak gerçekleştirilebilir.
“in” anahtar sözcüğünü kullanarak bir elemanın bir demet içinde olup olmadığı test edilebilir.
Dizeler
Dizeler de tıpkı demetler gibi değişmezdir. Bir dizeden karakterler silinemez veya kaldırılamaz.
“del” anahtar sözcüğü kullanılarak dizeyi tamamen silmek mümkündür.
Python dilinde dizeleri birleştirmek için “+” operatörü kullanılmaktadır.
Python programlama dilinde “in” anahtar sözcüğü kullanılarak bir dize içinde bir alt dizenin
olup olmadığı test edilebilir.
NOT: enumerate() fonksiyonu, bir numaralandırma nesnesi döndürür. Bu nesne, dizedeki tüm
öğelerin indeks ve değer çiftlerini içerir.
Kaçış Dizileri
String nesnesiyle kullanılabilen çok sayıda yöntem vardır:
Kümeler
Sözlükler
Dosya okuma kodunda, read() yönteminin verilen sayı kadar karakter döndürdüğü
görülmektedir.
Mevcut dosya imleci (konumu) search() yöntemi kullanılarak değiştirilebilir. Benzer şekilde,
tell() yöntemi mevcut imleç konumunu (bayt sayısı olarak) döndürmektedir.
Bir dosyanın tek tek satırlarını okumak için readline() yöntemi kullanılabilir.
readlines() fonksiyonu dosyanın tüm kalan satırlarının bir listesini döndürmek için
kullanılır.
Dizinler
Programın mevcut çalışma dizini (Current Working Directory - CWD), os modülünün
getcwd() yöntemi kullanılarak elde edilebilir.
Mevcut çalışma dizini (CWD) değiştirmek için [Link]() yöntemi kullanılmaktadır.
Yeni dizin yolu elemanlarını ayırmak için hem ters bölü “\” hem de “/” bölü işareti
kullanılabilir.
Bir dizindeki tüm dosya ve alt dizinlere listdir() fonksiyonu kullanılarak elde edilebilir.
Yeni bir dizin oluşturmak için os modülünün desteklediği [Link]() fonksiyonu
bulunmaktadır.
Bir dizini veya dosyayı yeniden adlandırmak için rename() fonksiyonu kullanılmaktadır.
Bir dosyayı kaldırmak, silmek için remove() yöntemi kullanılmaktadır.
boş olmayan bir dizini kaldırmak için “shutil” modülü içindeki
rmtree() metodu kullanılabilir.
Program Hataları (Syntax errors): Programlama dilinin söz dizimine uygun olmayan kod
yazılması nedeniyle ortaya çıkan hatalardır.
Mantık Hataları (Bug): Programın sonlanmasına neden olacak bir hata oluşmaz. Bulması daha
zordur.
İstisnalar (Exceptions): Söz diziminden başarılı bir şekilde geçtikten sonra oluşan hatalara
istisna denilmektedir.
Bir telefon tasarımından bir çok telefon üretilebildiği gibi, bir sınıftan da bir çok nesne oluşturulabilir.
Oluşturulan nesneye, oluşturulduğu sınıfın örneği (instance) denir ve bu nesne oluşturma işlemi de
örnekleme (instantiation) olarak adlandırılır.
Sınıf tanımlamaları class anahtar kelimesi ile başlamaktadır. Sınıfın içindeki ilk metin dizisine
docstring
adı verilmektedir. Bu metin, sınıfın kısa bir açıklamasını içermektedir. Bu kısım zorunlu değildir
fakat tanımlanması tavsiye edilmektedir.
Sınıf içinde tanımlanan tüm fonksiyonlar, diğer normal fonksiyonlardan farklı olarak, ilk
parametreleri self anahtar kelimesi olması gerekmektedir. Bu anahtar kelime, sınıfın kendisine
verilen bir referanstır ve sınıfa ait tüm özelliklere erişmek için kullanılmaktadır.
Sınıflar içerisinde tanımlı fonksiyonlarından çift altçizgi ile başlayan fonksiyonlara özel fonksiyonlar
denmektedir. Bir sınıftan yeni bir nesne oluşturulacağı zaman __init__() metodu çağrılmaktadır.
Metotlar
Metotlar, sınıfın içerisinde tanımlanmış fonksiyonlardır.
isinstance() fonksiyonu ile, oluşturulan nesne sınıfın veya o sınıftan türetilen bir sınıfın
örneği ise True (doğru) değeri döndürmektedir.
issubclass() metodu da, kalıtım kontrolü için kullanılmaktadır. İlk parametre olarak
verilen sınıf, diğer sınıftan türetilmiş ise True (doğru), türetilmemiş ise False (yanlış) değeri
vermektedir.
NOT: Python programlama dilinde unutulmaması gereken bir nokta da, her sınıfın nesne sınıfından
türetildiğidir. Nesne (object) sınıfı, en temel tür olarak da bilinir.
Python MySQL
Python, MySQL veritabanına ulaşabilmek için bir MySQL sürücüsüne ihtiyaç duymaktadır. Sürücüyü
yüklemek için python -m pip install mysql-connector-python komutu kullanılır.
Veri tabanındaki tüm tabloları listelemek için “SHOW TABLES” komutu kullanılır.
Veri tabanında tablo oluşturulurken, tabloya eklenen her bir kayıt için benzersiz bir anahtar,
değer içeren bir sütun da oluşturulmalıdır. Bu tablonun id değeri “INT
AUTO_INCREMENT PRIMARY KEY” kodu ile tanımlanmaktadır.
Sunucu ile bağlantıyı kesme [Link]() ile sağlanmaktadır.
Eğer tablo zaten oluşturulmuş ise, tabloya yeni bir sütun ilave etmek için ALTER TABLE
komutu
kullanılır.
Sql komutları büyük-küçük harfe duyarlı değildir.
Veri girişi yapabilmek için insert komutu kullanılmaktadır.
o INSERT INTO tablo_adı ( sütun1, sütun2, sütun3, ... ) VALUES
( değer1, değer2,
değer3, ... );
Veri tabanına girilmesi istenen verilerin kaydedilmesi için de [Link]() metodu
kullanılmaktadır. Bu işlem yapılmazsa yapılan bütün değişiklikler yok sayılır.
Çoklu kayıt girişinde de benzer şekilde veriler oluşturulmakta ve “execute” metodu,
“executemany” ile değiştirilmektedir.
Ayrıca, filtreleme yaparken, aranmak istenen ifade kayıtların başında, içinde veya sonunda
olabilir. Böyle durumlar için de joker karakteri olarak “%” sembolü kullanılmaktadır.
o “%” karakteri aranan ifadenin sadece başına konulduğunda, ifadeden önce ne gelirse
gelsin ama bu ifade ile bitsin anlamına gelmektedir.
o “%” karakteri aranan ifadenin sadece sonuna konulduğunda, ifadeden sonra ne
gelirse gelsin ama bu ifade ile başlasın anlamına gelmektedir.
o “%” karakteri aranan ifadenin hem başına hem de sonuna konulduğunda, ifadeden
önce ve sonra ne gelirse gelsin ama bu ifadeyi içersin anlamına gelmektedir.
Bu gibi bir sorgu yapıldığında artık “=” karşılaştırması yerine, bu filtreye benzer olanları getir
diyerek “LIKE” komutu kullanılmaktadır.
Tablo verilerinde istenilen filtreleme sonucunu, istenilen sütuna göre artan veya azalan
düzende sıralama yapmak için ORDER BY ifadesi kullanılmaktadır.
o ASC (ASCENDING) artan şekilde sıralamaktadır. Azalan şekilde sıralanması için de
DESC (DESCENDING) komutu kullanılmaktadır.
Veri tabanında var olan bir tabloyu silmek için DROP TABLE komutu kullanılmaktadır.
Olmayan bir tablo silinmeye çalışıldığında da hata alınacaktır. Böyle bir durumun önüne
geçebilmek için IF EXIST anahtar kelimesi kullanılmaktadır.
UPDATE yani güncelleme komutu, veri tabanında kayıtlı verilerin değerlerini değiştirmek için
kullanılmaktadır.
WHERE şartının eklenmediği bir UPDATE komutu ile tablodaki tüm veriler güncellenecektir.
LIMIT komutu, çalıştırılan sorgudan dönen sonuç kümesindeki verilerin sayısını kontrol
etmek veya sınırlandırmak için kullanılmaktadır. Örneğin ilk 5 veri alınmak istendiğinde
kullanılır.
OFFSET anahtar kelimesi verilerin hangi satırdan itibaren alınmaya başlayacağını belirtir.
LIMIT ile kullanılarak özel aralıkların alınabilmesi sağlanmaktadır.
Django
Python dili için dizayn edilmiş yüksek seviyeli bir web uygulaması geliştirme platformudur.
...