Cevap: Pyton Hakkında Ufak kodlar
Bir de şu örneği inceleyelim:
>>> print "%s ve %s iyi bir ikilidir." %("Python", "Django")
Görüleceği gibi, bu kez değişkenlerimiz tamsayı yerine karakter dizisi olduğu için parantez içinde değişkenleri belirtirken tırnak işaretlerini kullanmayı unutmuyoruz.
Kaçış Dizileri
Önceki bölümlerde “kaçış dizisi” diye bir şeyden söz ettik. Hatta bununla ilgili bir örnek de yaptık. İsterseniz o örneği hatırlayalım:
>>> print ’İstanbul\\’un 5 günlük hava tahmini’
İşte bu karakter dizisi içinde kullandığımız “\\” işareti bir kaçış dizisidir. Bu kaçış dizisinin buradaki görevi,
İstanbul’un kelimesi içinde geçen kesme işaretinin, karakter dizisini açan ve kapatan tırnak işaretleriyle karışmasını önlemek. Python bir karakter dizisiyle karşılaştığında, bu karakter dizisini soldan sağa doğru okur. Mesela yukarıdaki örnekte önce tek tırnak işaretini görüyor ve bir karakter dizisi tanımlayacağımızı anlıyor. Ardından karakter dizisi içindeki kesme işaretine rastlıyor ve bu işaretin karakter dizisinin bitişini gösteren kesme işareti olduğunu, yani karakter dizisinin sona erdiğini zannediyor. Ancak okumaya devam ettiğinde, karakter dizisine birleşik bir halde “un 5 günlük hava tahmini” diye bir şeyle karşılaşıyor ve işte bu noktada kafası allak bullak oluyor. Bizim
İstanbul’un kelimesindeki kesme işaretinin sol tarafına yerleştirdiğimiz “\\” kaçış dizisi Python’a, bu kesme işaretini görmezden gelme emri veriyor. Böylece karakter dizimiz hatasız bir şekilde ekrana basılıyor...
Dilerseniz bununla ilgili birkaç örnek daha yapalım:
>>> print "1 numaralı oyuncudan gelen cevap: "Sola dön!""
Bu karakter dizisi içinde “Sola dön!” ifadesi var. Biz yukarıdaki karakter dizisini tanımlarken çift tırnaktan yararlandığımız için, karakter dizisi içindeki bu “Sola dön!” ifadesi çakışmaya sebep oluyor. İstersek yukarıdaki karakter dizisini şu şekilde yazabiliriz:
>>> print ’1 numaralı oyuncudan gelen cevap: "Sola dön!"’
Bu komut sorunsuz bir şekilde yazdırılır. Ama eğer karakter dizisini çift tırnakla tanımlamanız gerekirse, kaçış dizilerinden yararlanabilirsiniz:
>>> print "1 numaralı oyuncudan gelen cevap: \\"Sola dön!\\""
Burada iki adet kaçış dizisi kullandığımıza dikkat edin. Bunun nedeni, karakter dizisi içinde başlangıç ve bitiş tırnaklarıyla karışabilecek iki adet tırnak işareti olmasıdır... Ayrıca kaçış dizisini, sorunlu tırnağın soluna koyduğumuza da dikkat edin.
Hatırlarsanız kaçış dizilerinden ilk bahsettiğimiz yerde şöyle bir örnek de vermiştik:
>>> print "Python’da önemli komutlardan biri de "print" komutudur."
Bu komutun hata vereceğini biliyoruz. Çünkü karakter dizisini çift tırnak içinde tanımladık. Dolayısıyla karakter dizisi içinde geçen çift tırnaklı “print” ifadesi çakışmaya yol açtı. Bu sorunu aşmak için karakter dizisini şöyle yazıyoruz:
>>> print "Python’da önemli komutlardan biri de \\"print\\" komutudur."
Burada kaçış dizilerini çift tırnaklı “print” kelimesine nasıl uyguladığımıza dikkat edin. Her bir çift tırnağın soluna bir adet “\\” işareti yerleştirdik. Böylece hatadan kıvrak hareketlerle kaçmış olduk...
“\\” işareti yalnızca tırnak işaretleriyle birlikte kullanılmaz. Bu işaret başka karakterlerle birlikte de kullanılarak farklı amaçlara hizmet edebilir.
Şu örneğe bir bakın:
>>> print "birinci satır\\nikinci satır"
Burada
“\\” işaretini “n” harfiyle birlikte kullandık.
“\\” işareti
“n” harfiyle birlikte kullanıldığında özel bir anlam ifade eder. Yukarıdaki kod şöyle bir çıktı verir:
birinci satır
ikinci satır
Gördüğünüz gibi, karakter dizisini iki satıra böldük. Bunu yapmamızı sağlayan şey “\\n” adlı kaçış dizisidir. Bu kaçış dizisi yeni bir satıra geçmemizi sağlar. Daha belirgin bir örnek verelim:
>>> print "Yolun sonu\\n"
Bu komut, “
Yolun sonu” karakter dizisini çıktı olarak verdikten sonra bir satır boşluk bırakacaktır.
Hatırlarsanız önceki bölümde, print komutunu kullanmadan herhangi bir karakter dizisi yazdığımızda elde ettiğimiz çıktının Python’ın bakış açısını yansıttığını söylemiştik. Bu durumu çok daha net anlayabilmemizi sağlayacak bir örnek verelim:
>>> """
... Günün mönüsü
... ------------
... Makarna..... 6 TL
... Çorba....... 3 TL
... Tatlı....... 2 TL
... """
Bu örneği hatırlıyorsunuz. Daha önce aynı örneği print komutu ile birlikte kullanmıştık.
Bu kodlar şöyle bir çıktı verir:
’\\nGünün mönüsü\\n------------\\nMakarna..... 6 TL\\nÇorba.......
3 TL\\nTatlı....... 2 TL\\n’
Gördüğünüz gibi, çıktıda “\\n” adlı kaçış dizileri de görünüyor. Demek ki Python üç tırnak yardımıyla girdiğimiz kodları böyle görüyormuş. Bu çıktıdan şunu da anlıyoruz: Demek ki biz üç tırnak yerine tek tırnak kullanmak istesek aynı çıktıyı elde etmek için şöyle gibi bir komut vermemiz gerekecek:
>>> print ’\\nGünün mönüsü\\n------------\\nMakarna..... 6 TL\\nÇorba....... \\
... 3 TL\\nTatlı....... 2 TL\\n’
Günün mönüsü
------------
Makarna..... 6 TL
Çorba....... 3 TL
Tatlı....... 2 TL
Buradan, üç tırnak işaretlerinin kimi durumlarda hayatımızı ne kadar da kolaylaştırabileceğini anlayabilirsiniz...
Bu arada, yukarıdaki komutlarda bir şey dikkatinizi çekmiş olmalı. >>> print ’
\\nGünün mönüsü\\n--- ile başlayan komutun ilk satırının sonunda, ENTER tuşuna basıp yeni satıra geçmeden önce “\\” adlı kaçış dizisini kullandık. Elbette istersek bu iki satırı tek bir satırda da yazabiliriz. Ancak görüntü açısından kodların bu şekilde sağa doğru uzaması hoş değil. Kötü bir kod görünümü ortaya çıkmaması için, bu kaçış dizisini kullanarak kodlarımızı iki satıra bölmeyi tercih ettik.
Not
Python’da doğru kod yazmak kadar, yazdığınız kodların düzgün görünmesi ve okunaklı olması da önemlidir. Bu yüzden yazdığımız programlarda satır uzunluğunun mümkün olduğunca 79 karakterden fazla olmamasına dikkat ediyoruz. Eğer yazdığımız bir satır 79 karakterden uzun olacaksa satırı uygun bir yerinden bölüp yeni bir satıra geçmemiz gerekir. Bu durum teknik bir zorunluluk değildir, ancak okunaklılığı artırdığı için uyulması tavsiye edilir. Örneğin biz de yukarıdaki örnekte kodlarımızın sağa doğru çirkin bir şekilde uzamaması için satırı uygun bir yerinden bölüp alt satıra geçtik.
Bu kaçış dizisini kullanmamızın amacı, Python’ın herhangi bir hata vermeden alt satıra geçmesini sağlamak. Eğer orada o kaçış dizisini kullanmazsak, ENTER tuşuna bastığımız anda Python hata verecektir. “\\” işareti, alt satıra geçilmiş de olsa kodların ilk satırdan devam etmesi gerektiğini gösteriyor. Bu durumu belirgin bir şekilde gösteren bir örnek verelim:
>>> print ’mer\\
... haba’
merhaba
Gördüğünüz gibi, “merhaba” kelimesini “mer” hecesinden bölüp “\\” işareti ile alt satıra geçtiğimiz halde, çıktımız “merhaba” oldu. Eğer amacınız “merhaba” kelimesini “mer” ve “haba” olarak bölmekse şöyle bir şey yapabilirsiniz:
>>> print """mer
... haba"""
mer
haba
Eğer üç tırnak kullandığınız halde, “merhaba” kelimesinin bölünmesini istemiyorsanız yine “\\” kaçış dizisinden yararlanabilirsiniz:
>>> print """mer\\
... haba"""
merhaba
Eğer üç tırnak yerine çift veya tek tırnak kullanarak “merhaba” kelimesini ortadan bölmek isterseniz elbette “\\n” adlı kaçış dizisinden yararlanabilirsiniz:
>>> print "mer\\nhaba"
mer
haba
>>> print ’mer\\nhaba’
mer
haba
Not
Çok uzun bir karakter dizisini iki satıra bölmek için “\\” işaretini kullanırken, bu işaretin satırdaki son karakter olmasına özen gösterin. Yani “\\” işaretini koyar koymaz ENTER tuşuna basmalısınız. “\\” işaretinden sonra boşluk bile olmamalı.
Bütün bu örneklerden şunu anlıyoruz: Python’da temel olarak tek bir kaçış dizisi var. O da “\\” işareti... Bu işaret farklı karakterlerle bir araya gelerek, değişik anlamlar ortaya çıkarabiliyor. Mesela bu karakter dizisi tırnak işaretiyle birlikte kullanıldığında, karakter dizisini başlatıp bitiren tırnaklarla çakışılmasını önlüyor. Eğer bu kaçış dizisini “n” harfiyle birlikte kullanırsak, karakter dizilerini bölüp alt satıra geçebiliyoruz. Eğer bu kaçış dizisini tek başına kullanırsak, bir karakter dizisini herhangi bir yerinden bölüp alt satıra geçtiğimiz halde, o karakter dizisi çıktıda tek satır olarak görünüyor. Bütün bunların dışında bu kaçış dizisi “t” harfiyle de yan yana gelebilir. O zaman da şöyle bir anlam kazanır:
>>> print "Uzak... \\t Çok uzak"
Uzak... Çok uzak
Bu kaçış dizisinin görevi karakter dizisi içindeki karakterler arasına mesafe koymak. Bu kaçış dizisi de kimi yerlerde hayatınızı kolaylaştırabilir. “\\” kaçış dizisi başka karakterlerle de bir araya gelebilir. Ancak en önemlilerini zaten yukarıda verdik. Programlama maceramızda en çok işimize yarayacak olanlar bunlardır.
Yukarıdakilerin dışında, Python’da şablona uymayan önemli bir kaçış dizisi daha bulunur. Bu kaçış dizisinin adı “r“‘dir. Bu kaçış dizisinin hem görünüşü hem de kullanımı yukarıdaki kaçış dizilerinden biraz farklıdır. Dilerseniz bu kaçış dizisini anlatmadan önce size şöyle bir soru sorayım:
Acaba aşağıdaki karakter dizisini nasıl yazdırırız?
“C:\\Documents and Settings\\nergis\\test”
İsterseniz bu karakter dizisini önce şöyle yazdırmayı deneyelim:
>>> print "C:\\Documents and Settings\\nergis\\test"
C:\\Documents and Settings
ergis est
Gördüğünüz gibi Python bize tuhaf bir çıktı verdi. Sizce neden böyle oldu?
Cevap aslında çok basit. Karakter dizisinde kalın harflerle gösterdiğimiz kısımlara dikkat edin: C:\\Documents and Settings
\\nergis
\\test
Burada “nergis” ve “test” kelimelerinin başındaki harfler, dizin ayracı olan “\\” işareti ile yan yana geldiği için Python bunları birer kaçış dizisi olarak algılıyor. Bu durumdan kurtulmak için birkaç seçeneğimiz var. İstersek yukarıdaki karakter dizisini şöyle yazabiliriz:
>>> print "C:\\\\Documents and Settings\\\\nergis\\\\test"
Burada “\\” işaretlerini çiftleyerek sorunun üstesinden gelebiliyoruz. Ama eğer istersek yukarıdaki soruna çok daha temiz bir çözüm de bulabiliriz. İşte böyle bir duruma karşı Python’da “r” adlı bir kaçış dizisi daha bulunur. Bunu şöyle kullanıyoruz:
>>> print r"C:\\Documents and Settings\\nergis\\test"
Gördüğünüz gibi, “r” adlı kaçış dizisi, karakter dizisi içinde geçen bütün kaçış dizilerini etkisiz hale getiriyor. Bu kaçış dizisi özellikle dizin adlarını yazdırırken çok işinize yarayacaktır. İsterseniz bununla ilgili şöyle bir örnek daha verelim. Diyelim ki şu cümleyi ekrana yazdırmak istiyoruz:
Python’daki kaçış dizileri şunlardır: \\, \\n, \\t
Bu cümleyi şöyle yazdıramayız:
>>> print "Python’daki kaçış dizileri şunlardır: \\, \\n, \\t"
Python’daki kaçış dizileri şunlardır: \\,
,
Gördüğünüz gibi çıktı hiç de beklediğimiz gibi değil. Çünkü Python karakter dizisi içinde geçen kaçış dizilerini işleme sokuyor ve buradaki her bir kaçış dizisinin görevini yerine getirmesine izin veriyor. Bu kaçış dizilerinin etkisizleştirilebilmesi için şu kodu yazabilirsiniz:
print "Python’daki kaçış dizileri şunlardır: \\\\, \\\\n, \\\\t"
Ama burada “r” kaçış dizisini kullanırsak çok daha temiz bir kod görünümü elde etmiş oluruz:
print r"Python’daki kaçış dizileri şunlardır: \\, \\n, \\t"
“r” adlı kaçış dizisi, karakter dizisi içindeki kaçış dizilerinin görevlerini yerine getirmesine engel olacaktır.
Dilerseniz şimdiye kadar gördüğümüz kaçış dizilerini şöyle bir özetleyelim:
\\
ENTER tuşuna basılarak alt satıra kaydırılan karakter dizilerinin çıktıda tek satır olarak görünmesini sağlar.
\\’
Karakter dizilerini başlatıp bitiren tek tırnaklarla, karakter dizisi içinde geçen tek tırnakların karışmasını engeller.
\\”
Karakter dizilerini başlatıp bitiren çift tırnaklarla, karakter dizisi içinde geçen çift tırnakların karışmasını engeller.
\\n
Yeni bir satıra geçilmesini sağlar.
\\t
Karakter dizileri içinde sekme (TAB) tuşuna basılmış gibi boşluklar oluşturulmasını sağlar.
r
Karakter dizileri içinde geçen kaçış dizilerini etkisiz hale getirir.