Programlamadili.Net Yeni Nesil Programlama Portali
 
Makale Ara: 
Kullanıcı Adı : Şifre :
  • Makale Kategorileri
ACPI [0]
Action Script [5]
ASP [12]
ASP.NET [23]
Assembly [3]
Bash [1]
C [4]
C# [9]
C++ [10]
Cobol [1]
Delphi [31]
Flash [5]
Html [9]
JAVA [36]
Java Script [11]
JSF [2]
Jsp [1]
Lua [1]
Matlab [2]
MySQL [26]
Oracle [1]
Pascal [31]
Perl [4]
Photoshop [2]
PHP [108]
Python [8]
REXX [6]
Ruby [1]
SEO [4]
Visual Basic [20]
  • Gorsel Ders Kategorileri
Asp [25]
Asp.Net [5]
Csharp [33]
Delphi [3]
Fireworks [4]
Flash [10]
Java Script [0]
Photoshop [0]
PHP [11]
Vb.Net [9]
Visual Basic [4]
  • Dil
English
Deutsch
deutsch
  • Reklam Alani
Python / Python Sözdizimi
Python Sözdizimi
Yazar: SahinBey
Eklenme: 04/02/08    Okunma: 116    
 
 


Python sözdizimi olarak bazı dillerle benzerlikler içermekle birlikte özellikle C sözdizimini andıran Perl ve PHP gibi dillerden oldukça farklıdır. Temel sözdizimi öğeleri şu şekilde sıralanabilir:



Bloklar

Python'un sözdiziminin diğer dillerle farkının en çok ortaya çıktığı nokta blok yapılarıdır. Diğer dillerde {} karakterleri veya begin, end gibi işaretlerle ile sağlanan blok yapıları Python'da girinti-çıkıntılar yardımıyla sağlanır. Kodun içerisinde aynı seviyede girintiye sahip olan alt alta bölümler aynı blok içerisinde kabul edilir. Hello World'e dönecek olursak if bölümünden sonra alt satırlardaki komutların eşit oranda girintiye sahip olmasının sebebi göze güzel gözükmekten öte, bloklamayı sağlamaktır. Kodunuzda girinti/çıkıntıları doğru ayarlamadığınız takdirde Python kodunuz çalışmayacaktır.



Blok yapılarının girinti çıkıntılarla sağlanması ilk başta itici gelebilir. Sonuçta diğer dillerdeki gibi belirli ifadeler ile bloklama yapıldığında bloklar daha kesin olarak belirlenebilir diye bir düşünce mevcuttur. Tabiiki blokların başlangıç ve sonunu belirli karakterlerle belirlemenin kendine özgü avantajları vardır. Örneğin tüm bir blok bu sayede tek satıra yazılabilir ancak bu durum kodun okunabilirliğini azalatacaktır. Hangi dil kullanılırsa kullanılsın kod yazarken okunabilirliği ön planda tutmak her zaman içi önemlidir. Kodu okunabilir kılmak için de girinti/çıkıntıları doğru kullanmak zaten bir programcılık geleneğidir. Tabiiki pek çok gelenek gibi bu da programcılar tarafından pek umursanmaz ve ortaya sahibinin dahi okuyunca anlamayacağı kodlar çıkar Bu aşamada Python programcıyı düzenli kod yazmaya zorlayarak hem bloklar için fazladan karakterler kullanma ihtiyacını ortadan kaldırır hem de kodun düzenli kalmasını sağlar. Tabiiki bir insan spagetti kod yazmak isterse her dilde yazar. Fakat normal koşullar altında bu zorlamalar kodu düzenli tutmak için yeterli olacaktır.



Kontrol Yapıları

Bir dilin bel kemiği şüphesiz ki kontrol yapılarıdır. İf-Else tarzı denetleme deyimleri ve for, while gibi döngüler her dilde bulunsa da aynı parmak izi gibi dilden dile bazı farklılıklar içerirler. Python'da her programlama dili gibi bu yapıları bünyesinde bulundurur. Bu yapıların genel yapısı şu şekildedir:


<kontrol deyimi> <kontrol cümlesi>:
  <çalıştırılacak komut>


Python'daki denetleme deyimleri ve döngüler diğer dillerdekinden daha farklı olmadığıdan burada tekrar tümünü anlatmanın gereği yoktur. Fakat diğer dilerdeki benzerlerinden bazı farklılıklar gösteren for ve while deyimlerinin bu farklarına bir değinmekte fayda var.



C ve Pascal gibi dillerde for deyimi sayı sayma esasına dayanır. Sayı tipinde bir değişken artırılıp azaltılarak kontrol sistemi kurulur. Python'da ise for döngüsü bir liste üzerinde işletilerek listenin her elemanı listedeki sıralarına göre işleme alınır. Örneğin:


liste = ["42","00101010","*"]
for eleman in liste:
    print eleman


For döngüsü her ne kadar bir liste üzerinde çalışsa da kimi zaman doğrudan sayılar üzerinde çalışmamız gerekebilir. Böyle bir durumda sayılardan oluşan bir listeyi her seferinde elle yazmak tabiiki mantıklı olmayacaktır. Python böyle durumlar için bize range() fonksiyonunu sunar. Bu fonksiyon kendisine verdiğimiz parametrelere göre bize bir sayı listesi üretir. range() fonksiyonu üç farklı parametre alır: taban sayı, tavan sayı ve artırma miktarı. Bu her ne kadar bize C'nin esnekliğini sunmasa da istediğimiz sayıları elde etmek için yeterlidir. Taban sayı ve artırma miktarı parametreleri kullanılmayabilir, bu durumda başlangıç olarak 0 ve artırma miktarı olarak ta 1 alınır. Gözönünde bulundurulması gereken bir faktör liste oluşturulurken tavan sayısının listeye dahil edilmediğidir. Örnek vermek gerekirse:


>>> range(10) #0'dan 10'a kadar (10 hariç) olan sayıları döndür
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(1, 11, 2) #11'den küçük pozitif tek tamsayıları döndür
[1, 3, 5, 7, 9]


Python'da benzerlerinden farklılık gösteren diğer bir deyim ise if deyimidir. Python'da case veya switch gibi ayrı bir kalıp bulunmadığından if deyimi bu fonksiyonaliteyi sağlayacak şekilde düzenlemiştir. Bir if deyiminin içerisinde kullanacağınız birden fazla elif (evet Else-if'in kısaltması) deyimi ile farklı koşulları test etmek mümkündür. Hello World uygulamasındaki işletim sistemi karşılaştırmasında bu durumun tipik bir örneğini görmek mümkündür.



Fonksiyon ve Sınıf Tanımlamaları

Python'da fonksiyon tanımlamaları def anahtar sözcüğü ile yapılır. genel yapı def <fonksiyon_adi>(<parametreler>): şeklindedir. Fonksiyonun kendisi bu tanımın altındaki satırlara uygun girinti ile yazılır. Fonksiyon parametrelerini tanımlarken duruma göre bazı farklı yaklaşımlar kullanmamız mümkündür. Tanımladığımız fonksiyon parametrelerinin bazılarına öntanımlı değerler atamamız mümkündür. Bu sayede fonksiyonu çağırırken yalnızca öntanımlı değeri değiştirmemiz gereken durumlarda o parametreye müdahale etmemiz gerekecektir. Parametrelere öntanımlı değer atanması şu şekilde yapılır:


  def foobar(foo="bar"):
      ...


Bu durumda Python yorumlayıcısı fonksiyonu sadece foobar() şeklinde çağırdığımızda foo değişkenine otomatik olarak bar değerini atayacaktır. Parametrelere öntanımlı değer atarken dikkat edilmesi gereken önemli bir nokta öntanımlı değer atanan parametrelerin, atanmayan parametrelerden sonra gelmesi gerektiğidir.



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 tüp, liste veya sözlük içerisindeki veriler de kolayca bir fonksiyona parametre olarak geçirilebilir. Değişken uzunlukta parametreler alan bir fonksiyon tanımı şu şekilde yapılır:


    def foobar(*args, **kwargs):
...


Bu şekilde tanımlanan bir fonksiyona geçirilen parametrelere fonksiyonun içinde args adlı bir tüpü ve kwargs adlı bir sözlüğü kullanarak erişebiliriz. Bu isimleri kullanmak mecburi olmadığı gibi bu iki parametre tipi aynı anda kullanılmayıp arı ayrı da kullanılabilir. Fakat bu kullanım tarzı genel olarak uygulamada yerleşmiştir. Ancak eğer ikisini bir arada kullanacaksak mutlaka önce *args sonra **kwargs tanımlarını kullanmamız gerekir.



Bu iki çağrı tipini birleştirerek fonksiyon tanımları yamamız da tabiiki mümkündür. Bu durumda 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. Aksi halde Python yazım hatasından şikayet edecektir. Örnek bir fonksiyon tanımı şu şekilde yapılabilir:


  def foobar(foo, bar="42", *args, **kwargs):
      ...


Sınıf tanımlamaları class (ne süpriz ama) anahtar sözcüğü ile yapılır. Bir sınıf tanımlaması şu şekilde yapılır: class (<Temel_sinif1>, <Temel_sinif2>,...): Eğer sınıfımız bir temel sınıf'tan (base class) türetilmiyorsa parantezleri kullamamaya dikkat etmemiz gerekir. Bir sınıfın tanımında birden çok temel sınıf kullanmak mümkündür, bu sayede Python'da nesne yönelimli programlamanın güzelliklerinden çoklu miras almayı (multiple inheritance) kullanmamız mümkün hale gelir.



Bir sınıf içerisindeki fonksiyonları tanımlarken ilk parametre fonksiyonun çağrıldığı sınıf örneğine (instance) referans veren self parametresi olmalıdır. Parametresi olmayan fonksiyonları tanımlarken dahi bu parametrenin parametre listesinin ilk elemanı olarak eklenmesi gerekir. Bu parametrenin adının self olması zorunlu olmamakla birlikte uygulamada bu isim yerleşmiştir. Hello adlı bir fonksiyona sahip bir sınıf aşağıdaki gibi gözükecektir:


    class HelloWorld:
      def Hello(self):
  print "Hello Python!"


Python yorumlayıcısı bu fonksiyonu çağırırken self parametresini otomatik olarak yerleştirecektir. Bu nedenle HelloWorld sınıfının KirkIki adı örneğindeki Hello fonksiyonunu çağırmak istediğimizde KirkIki.Hello() yazmamız yeterli olacaktır.



İstisnalar (Exceptions)

Bir büyüğümüzün de dediği gibi: "Yakalanmayan istisnalar, kaideyi bozar". Python pek çok modern dil gibi hata yakalamanın pratik bir yolu olan istisna sistemine sahiptir. İstisnalar Pascal'a benzer şekilde try ... except blokları ile yakalanır ve raise ile ortaya çıkarılırlar.



try anahtar sözcüğü ile başlayan blokların sonunda except anahtar sözcüğü ile bir veya daha fazla hatayı yakalamak mümkündür. Tipik bir try ... except bloğu şu şekilde olacaktır:


try:
foobar() #Olmayan bir fonksiyonu çağırmaya çalış

except NameError, isim:
"""
Eğer bir NameError oluşursa beraberinde döndürdüğü
detayları isim değişkenine al
"""
print isim, 'adı tanımlı değil'
"""
NameError'a ilişkin
bir hata mesajı görüntüle
"""

except (TypeError, ValueError): #TypeError veya ValueError oluşursa yakala
print "Geçersiz değer" #ve hata mesajı göster

except: #Geri kalan istisnalarda bir hata mesajı göster
print "Beklenmeyen istisna"
raise #Yakalanan istisnayı daha üst seviyelerden yakalanabilmesi için yükselt.

else: #Hiçbir hata oluşmazsa başarı mesajını görüntüle
print "Hiçbir sorun oluşmadan program tamamlandı"


Bu örnekte Python'a özgü bir anahtar sözcük olan else karşımıza çıkmaktadır. Hiçbir istisna oluşmadan programın tamamlanması halinde else bloğundaki kodlar çalıştırılacaktır. Herhangi bir istisna oluşması halinde ise else bölümü çalıştırılmayacaktır. Bu konuyla ilgili son anahtar sözcük ise bffinally sözcüğüdür. finally sözcüğü bir hata oluşsun yada oluşmasın mutlaka çalıştırılması gereken kritik kısımları belirlemekte kullanılır. Bu bölümde genelde açık dosyaların kapatılması, ağ bağlantılarının kesilmesi gibi işlemler yürütülür. Bir try bloğunun içerisinde aynı anda hem except hem de finally sözcükleri bir arada bulunamaz. Ancak içiçe try blokları kullanarak bunun üstesinden gelmek mümkündür. Örneğin:


try:
try:
...
Sorun çıkarabilecek işlemler
...

except:
...
Hata yakalama işlemleri
...

finally:
...
Her durumda çalıştırılacak kodlar
...



Taglar: Hello World! Python 'da İlk Programı Yazalım Neden Python Peki ama neden Python? Python Anahtar Sözcükler Python Sözdizimi Python Veri Tipleri Python yorumlayıcısı Python'a Gelişimi

Isminiz:
E-mail adresiniz:
Güvenlik Kodu:
  
 

 

Istatistikler ,
Sitemizde su anda 30 kategori, 377 makale , 104 görsel ders ve 4 Ziyaretci bulunmaktadir...
Toplam üye sayimiz : 496

Copyright © 2007 Programlamadili.net - Programlama & Tasarim: Recep Ikiz & Ferdi Küçük

| Site Haritasi |

"Ne Aradığını Bilmeyen Bulduğunun Farkına Varamaz "
ACPI Programlama dili, Action Script Programlama dili, ASP Programlama dili, ASP.NET Programlama dili, Assembly Programlama dili, Bash Programlama dili, C Programlama dili, C# Programlama dili, C++ Programlama dili, Cobol Programlama dili, Delphi Programlama dili, Flash Programlama dili, Html Programlama dili, JAVA Programlama dili, Java Script Programlama dili, JSF Programlama dili, Jsp Programlama dili, Lua Programlama dili, Matlab Programlama dili, MySQL Programlama dili, Oracle Programlama dili, Pascal Programlama dili, Perl Programlama dili, Photoshop Programlama dili, PHP Programlama dili, Python Programlama dili, REXX Programlama dili, Ruby Programlama dili, SEO Programlama dili, Visual Basic Programlama dili,
Reklam alanı