Python da Satır Başı

Satır Başı (n)

Python’daki en temel kaçış dizisi daha önce örneklerini verdiğimiz  işaretidir. Bu kaçış dizisi başka karakterlerle birleşerek, farklı işlevlere sahip yeni kaçış dizileri de oluşturabilir. Aslında bu olguya yabancı değiliz. Önceki sayfalarda bu duruma bir örnek vermiştik. Hatırlarsanız print() fonksiyonunu anlatırken end parametresinin ön tanımlı değerinin n, yani satır başı karakteri olduğunu söylemiştik.

Satır başı karakterine ‘yeni satır karakteri’ dendiği de olur.

Satır başı karakterini ilk öğrendiğimizde bu karakteri anlatırken bazı örnekler de vermiştik:

>>> print("birinci satırnikinci satırnüçüncü satır")

birinci satır
ikinci satır
üçüncü satır

Gördüğünüz gibi, n adlı kaçış dizisi, bir alt satıra geçilmesini sağlıyor. İşte aslında n kaçış dizisi de,  ile ‘n’ harfinin birleşmesinden oluşmuş bir kaçış dizisidir. Burada  işaretinin görevi, ‘n’ harfinin özel bir anlam kazanmasını sağlamaktır.  işareti ile ‘n’ harfi birleştiğinde ‘satır başı karakteri’ denen özel bir karakter dizisi ortaya çıkarıyor.

Gelin bu kaçış dizisi ile ilgili bir örnek verelim. Şimdi şu kodları dikkatlice inceleyin:

>>> başlık = "Türkiye'de Özgür Yazılımın Geçmişi"
>>> print(başlık, "n", "-"*len(başlık), sep="")

Türkiye'de Özgür Yazılımın Geçmişi
----------------------------------

Burada, başlık adlı değişkenin tuttuğu “Türkiye’de Özgür Yazılımın Geçmişi” adlı karakter dizisinin altını çizdik. Dikkat ederseniz, başlığın altına koyduğumuz çizgiler başlığın uzunluğunu aşmıyor. Yazdığımız program, başlığın uzunluğu kadar çizgiyi başlığın altına ekliyor. Bu programda başlık ne olursa olsun, programımız çizgi uzunluğunu kendisi ayarlayacaktır. Örneğin:

>>> başlık = "Python Programlama Dili"
>>> print(başlık, "n", "-"*len(başlık), sep="")

Python Programlama Dili
-----------------------

>>> başlık = "Alışveriş Listesi"
>>> print(başlık, "n", "-"*len(başlık), sep="")

Alışveriş Listesi
-----------------

Gelin isterseniz bu kodlardaki print() satırını şöyle bir inceleyelim. Kodumuz şu:

>>> print(başlık, "n", "-"*len(başlık), sep="")

Burada öncelikle başlık adlı değişkeni print() fonksiyonunun parantezleri içine yazdık. Böylece başlık değişkeninin değeri ekrana yazdırılacak.

print() fonksiyonunun ikinci parametresinin n adlı kaçış dizisi olduğunu görüyoruz. Bu kaçış dizisini eklememiz sayesinde Python ilk parametreyi çıktı olarak verdikten sonra bir alt satıra geçiyor. Bu parametrenin tam olarak ne işe yaradığını anlamak için, yukarıdaki satırı bir de o parametre olmadan çalıştırmayı deneyebilirsiniz:

>>> print(başlık, "-"*len(başlık), sep="")

Alışveriş Listesi-----------------

print() fonksiyonunun üçüncü parametresinin ise şu olduğunu görüyoruz: "-"*len(başlık).

İşte başlık değişkeninin altına gerekli sayıda çizgiyi çizen kodlar bunlardır. Burada len() fonksiyonunu nasıl kullandığımıza çok dikkat edin. Bu kod sayesinde başlık değişkeninin uzunluğu (len(başlık)) sayısınca  işaretini ekrana çıktı olarak verebiliyoruz.

Yukarıdaki kodlarda print() fonksiyonunun son parametresi ise sep=’‘. Peki bu ne işe yarıyor? Her zaman olduğu gibi, bu kod parçasının ne işe yaradığını anlamak için programı bir de o kodlar olmadan çalıştırmayı deneyebilirsiniz:

>>> print(başlık, "n", "-"*len(başlık))

Alışveriş Listesi
  -----------------

Gördüğünüz gibi, başlık değişkeninin tam altına gelmesi gereken çizgi işaretleri sağa kaymış. Bunun nedeni sep parametresinin öntanımlı değerinin bir adet boşluk karakteri olmasıdır. sep parametresinin öntanımlı değeri nedeniyle çizgilerin baş tarafına bir adet boşluk karakteri ekleniyor çıktıda. O yüzden bu çizgiler sağa kaymış görünüyor. İşte biz yukarıdaki kodlarda sep parametresinin öntanımlı değerini değiştirip, boşluk karakteri yerine boş bir karakter dizisi yerleştiriyoruz. Böylece çizgiler çıktıda sağa kaymıyor.

Satır başı karakteri, programlama maceramız sırasında en çok kullanacağımız kaçış dizilerinden biri ve hatta belki de birincisidir. O yüzden bu kaçış dizisini çok iyi öğrenmenizi tavsiye ederim.

Ayrıca bu kaçış dizisini (ve tabii öteki kaçış dizilerini) tanıyıp öğrenmeniz, yazacağınız programların selameti açısından da büyük önem taşır. Eğer bir karakter dizisi içinde geçen kaçış dizilerini ayırt edemezseniz Python size hiç beklemediğiniz çıktılar verebilir. Hatta yazdığınız programlar kaçış dizilerini tanımıyor olmanızdan ötürü bir anda hata verip çökebilir. Peki ama nasıl?

Şimdi şu örneğe dikkatlice bakın:

Diyelim ki bilgisayarınızın ‘C:’ dizinindeki ‘nisan’ adlı bir klasörün içinde yer alan masraflar.txt adlı bir dosyayı yazdığınız bir program içinde kullanmanız gerekiyor. Mesela bu dosyayı, tam adresiyle birlikte kullanıcılarınıza göstermek istiyorsunuz.

İlk denememizi yapalım:

>>> print("C:nisanmasraflar.txt")

Buradan şöyle bir çıktı aldık:

C:
isanmasraflar.txt

Gördüğünüz gibi, bu çıktıyı normal yollardan vermeye çalıştığımızda Python bize bir hata mesajı gösteriyor. Peki ama neden?

Python’da karakter dizileri ile çalışırken asla aklımızdan çıkarmamamız gereken bir şey var: Eğer yazdığımız herhangi bir karakter dizisinin herhangi bir yerinde  işaretini kullanmışsak, bu işaretten hemen sonra gelen karakterin ne olduğuna çok dikkat etmemiz gerekir. Çünkü eğer dikkat etmezsek, farkında olmadan Python için özel anlam taşıyan bir karakter dizisi oluşturmuş olabiliriz. Bu da kodlarımızın beklediğimiz gibi çalışmasını engeller.

Yukarıdaki sorunun kaynağını anlamak için "C:\nisan\masraflar.txt" adlı karakter dizisine çok dikkatlice bakın. Python bu karakter dizisinde bizim ‘nisan’ olarak belirttiğimiz kısmın başındaki n karakterlerini bir kaçış dizisi olarak algıladı. Çünkü nadlı karakter dizisi, ‘satır başı kaçış dizisi’ adını verdiğimiz, Python açısından özel anlam taşıyan bir karakter dizisine işaret ediyor. Zaten yukarıdaki tuhaf görünen çıktıya baktığınızda da, bu kaçış dizisinin olduğu noktadan itibaren karakter dizisinin bölünüp yeni bir satıra geçildiğini göreceksiniz. İşte biz yukarıdaki örnekte alelade bir dizin adı belirttiğimizi zannederken aslında hiç farkında olmadan bir kaçış dizisi üretmiş oluyoruz. Bu nedenle, daha önce de söylediğimiz gibi, karakter dizileri içinde farkında olarak veya olmayarak kullandığımız kaçış dizilerine karşı her zaman uyanık olmalıyız. Aksi takdirde, yukarı olduğu gibi hiç beklemediğimiz çıktılarla karşılaşabiliriz.

Esasen yukarıdaki problem bir dereceye kadar (ve yerine göre) ‘masum bir kusur’ olarak görülebilir. Çünkü bu hata programımızın çökmesine yol açmıyor. Ama bir karakter dizisi içindeki gizli kaçış dizilerini gözden kaçırmak, bazı durumlarda çok daha yıkıcı sonuçlara yol açabilir. Mesela yukarıdaki sorunlu dizin adını ekrana yazdırmak yerine open() fonksiyonunu kullanarak, bu karakter dizisi içinde belirttiğimiz masraflar.txt adlı dosyayı açmaya çalıştığımızı düşünün:

>>> open("C:nisanmasraflar.txt")

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OSError: [Errno 22] Invalid argument: 'C:nisan\masraflar.txt'

Eğer sorunun gözden kaçan bir kaçış dizisinden kaynaklandığını farkedemezsiniz, bu sorunu çözebilmek için saatlerinizi ve hatta günlerinizi harcamak zorunda kalabilirsiniz. Çünkü yukarıdaki hata mesajı sorunun nedenine dair hiçbir şey söylemiyor. Ancak ve ancak yukarıdaki karakter dizisi içinde sinsice gizlenen bir n kaçış dizisi olduğu gözünüze çarparsa bu sorunu çözme yolunda bir adım atabilirsiniz.

Diyelim ki sorunun ‘nisan’ ifadesinin başındaki n karakterlerinin Python tarafından bir kaçış dizisi olarak algılanmasından kaynaklandığını farkettiniz. Peki bu sorunu nasıl çözeceksiniz?

Bu sorunun birkaç farklı çözüm yolu var. Biz şimdilik sadece ikisini göreceğiz. Bu bölümün sonuna vardığınızda öteki çözüm yolunu da öğrenmiş olacaksınız.

Yukarıdaki problemi, ilgili kaçış dizisi içindeki ters taksim işaretini çiftleyerek çözebilirsiniz:

>>> open("C:\nisanmasraflar")

Tabii tutarlılık açısından karakter dizisi içindeki bütün ters taksim işaretlerini çiftlemek mantıklı olacaktır:

>>> open("C:\nisan\masraflar")

Bunun dışında, bu örnek için, dizin adlarını ters taksim yerine düz taksim işaretiyle ayırmayı tercih edebilirsiniz:

>>> open("C:/nisan/masraflar")

Dediğimiz gibi, üçüncü (ve aslında daha kullanışlı olan) yöntemi daha sonra inceleyeceğiz. Biz şimdilik kaçış dizilerini anlatmaya devam edelim.

Alıntıdır.