Kaçış Dizileri
Şimdi çoğu kişi bu dizilerin tamamını bilmez, ben bile :) Şimdi print("benim adım "Flow" dur") dediğinizde hata olacaktır. Çünkü "benim adım " ile " dur"
bir stirngtir ve python bunu hafızada tutar, şimdi sıraya bakalım:


"benim adım "flow" dur"


üstteki dizidende görüldüğü gibi, Birinci çift tırnak ikinci tişt tırnağı kapatıyor. Ancak yeni bir string dizisi açılmıyor. Sadece diziyi kapatıyor. Yani flow her halükarda açıkta kalıyor.


Peki ne yapmalı?

Şimdi Pythonda stringler üç şekilde açılırdı değil mi? hatırlayalım;


~ ' arasına ' yazılarak
~ " arasına " yazılarak
~ """ arasına """ veya ''' arasına ''' yazılarak


şimdi baktığımızda örenk olarak iki şekilde sorunu çözebiliriz. Bu pek ala en kolay yol. Deneyelim, print('benim adım "Flow" dur'). hata vermedi. aynı şekilde üç tırnak metoduylada hata vermez.


~ters taksim / slash (\):
Bu harf string yapısında kullanıldığında eğer string raw değilse önündeki yarfi kaçırır. yani print("benim adım "Flow" dur") yazınca hata almayız.


aynı zamanda bu karakterden sonra gelen öntanımlı harfler (örenpin n) bir fonksiyonu kullanır. Örnek olaran \n karakter dizisini string içerisinde kullanılırsa sonraki kelimeler yeni satıra gelir. n harfi newline fonksiyonunu temsil eder. tabikidie bu fonksiyonlar öntanımlıdır.


şimdi isterseniz bu öntanımlı fonksiyonlara değinelim:


~Satır başı / newline (\n):
Kullanıldığı takdirde yeni satıra atlar. Pekte örnek vermeyeceğim çünkü yukarıda bahsetmiştim.


peki içerisinde \n olan bir stirng olması durumunda ne yapacağım?


"kaçış dizisini kaçıralım" \\n bakın, yaptığımız işlemde \ kaçış dizisi \'yi kaçırdı bu sayede ikiside yazıldı. Diğer öntanımlı fonksiyonlulardada kullanılabilir.



~Sekme - Tab(\t):
Adındanda anlayacağınız gibi bir tab kadar boşluk bırakır. Dahada deyineyim mi?



~Zil sesi / Bip! (\a)
Bir bip sesi çıkartır. Ne yani? Bip sesi kötü değildir ki?


~Aynı satır başı (\r):
Burası anlaşılması zor bir bölüm. Yani başka bir kaynaktan (yazbel) alıntı yapacağım



Bu kaçış dizisi, bir karakter dizisinde aynı satırın en başına dönülmesini sağlar. Bu kaçış dizisinin işlevini tanımına bakarak anlamak biraz zor olabilir. O yüzden dilerseniz bu kaçış dizisinin ne işe yaradığını bir örnek üzerinde göstermeye çalışalım:
>>> print("Merhaba\rZalim Dünya!") Zalim Dünya!

Burada olan şey şu: Normal şartlar altında, print() fonksiyonu içine yazdığımız bir karakter dizisindeki bütün karakterler soldan sağa doğru tek tek ekrana yazdırılır:
>>> print("Merhaba Zalim Dünya!") Merhaba Zalim Dünya!

Ancak eğer karakter dizisinin herhangi bir yerine \r adlı kaçış dizisini yerleştirirsek, bu kaçış dizisinin bulunduğu konumdan itibaren aynı satırın başına dönülecek ve \r kaçış dizisinden sonra gelen bütün karakterler satır başındaki karakterlerin üzerine yazacaktır. Şu örnek daha açıklayıcı olabilir:
>>> print("Merhaba\rDünya") Dünyaba

Burada, ?Merhaba? karakter dizisi ekrana yazdırıldıktan sonra \r kaçış dizisinin etkisiyle satır başına dönülüyor ve bu kaçış dizisinden sonra gelen ?Dünya? karakter dizisi ?Merhaba? karakter dizisinin üzerine yazıyor. Tabii ?Dünya? karakter dizisi içinde 5 karakter, ?Merhaba? karakter dizisi içinde ise 7 karakter olduğu için, ?Merhaba? karakter dizisinin son iki karakteri (?ba?) dışarda kalıyor. Böylece ortaya ?Dünyaba? gibi bir şey çıkıyor.


Alın size bolca açıklama :)

~Düşey sekme(\v):
Kolay açıklaması şu, kullandığınızda alt satırda üstekki satrıda nerede kestiyseniz o kadar yer boşluk bırakarak yazmaya devam eder. Kendiniz deneyin bence :)

~imleç kaydırma(\b):
imleçi sola kaydırmak görevlerindendir. şimdi şöyle dyelim. Not defterini açalım ve bir yazı yazalım. Ardından sola doğru ok tuşuna basalım. Alın şte bu kaçış dizini aynı şeyi yapar.

~Unicode (\u, \U):
ihtihzadan alıntıdır!


Tıpkı bundan önceki kaçış dizileri gibi, karakter dizileri içindeki varlığı konusunda dikkatli olmamız gereken bir başka kaçış dizisi de \u adlı kaçış dizisidir. Eğer bu kaçış dizisini tanımaz ve dikkatli kullanmazsak, yazdığımız programlar tespit etmesi çok güç hatalar üretebilir.
Örneğin şöyle bir çıktı vermek istediğinizi düşünün:
Dosya konumu: C:\users\zeynep\gizli\dosya.txt
Bu çıktıyı normal yollardan vermeye çalışırsak Python bize bir hata mesajı gösterecektir:
>>> print("Dosya konumu: C:\users\zeynep\gizli\dosya.txt") File "", line 1 SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 16-18: truncated \uXXXX escape

Belki sağda solda ?UNICODE? diye bir şey duymuşsunuzdur. Eğer şimdiye kadar böyle bir şey duymadıysanız veya duyduysanız bile ne olduğunu bilmiyorsanız hiç ziyanı yok. Birkaç bölüm sonra bunun ne anlama geldiğini bütün ayrıntılarıyla anlatacağız. Biz şimdilik sadece şunu bilelim: UNICODE, karakterlerin, harflerin, sayıların ve bilgisayar ekranında gördüğümüz öteki bütün işaretlerin her biri için tek ve benzersiz bir numaranın tanımlandığı bir sistemdir. Bu sistemde, ?kod konumu? (code point) adı verilen bu numaralar özel bir şekilde gösterilir. Örneğin ?ı? harfi UNICODE sisteminde şu şekilde temsil edilir:
u+0131

Aynı şekilde ?a? harfi bu sistemde şu kod konumu ile gösterilir:
u+0061

Python programlama dilinde ise, yukarıdaki kod konumu düzeni şöyle gösterilir:
\\u0131

Gördüğünüz gibi, Python UNICODE sistemindeki her bir kod konumunu gösterebilmek için, önce \u şeklinde bir kaçış dizisi tanımlıyor, ardından UNICODE sisteminde + işaretinden sonra gelen sayıyı bu kaçış dizisinin hemen sağına ekliyor. Gelin kendi kendimize birkaç deneme çalışması yapalım:
>>> '\u0130' 'İ' >>> '\u0070' 'p' >>> "\ufdsf" File "", line 1 SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-4: truncated \uXXXX escape

Gördüğünüz gibi, eğer \u kaçış dizisinden sonra doğru bir kod konumu belirtmezsek Python bize bir hata mesajı gösteriyor...
Bu hata mesajının, biraz önce print("Dosya konumu: C:\users\zeynep\gizli\dosya.txt") kodunu yazdıktan sonra aldığımız hata ile aynı olduğuna dikkat edin. Tıpkı \ufdsf örneğinde olduğu gibi, \users ifadesi de varolan bir UNICODE kod konumuna karşılık gelmediği için, Python?ın hata vermekten başka çaresi kalmıyor.
Biz bu örnekte ?users? kelimesini kullanmaya çalışıyoruz, ama ?u? harfinden hemen önce gelen \ kaçış dizisi nedeniyle, hiç farkında olmadan Python açısından önemli bir karakter dizisi (\u) meydana getirmiş oluyoruz. O yüzden, böyle can sıkıcı hatalarla karşılaşmamak için olası kaçış dizilerine karşı her zaman uyanık olmamız gerekiyor.
Peki biz bu kaçış dizisi yüzünden, yazdığımız programlarda Dosya konumu: C:\users\zeynep\gizli\dosya.txt?) gibi bir çıktı veremeyecek miyiz?
Verebileceğimizi ve bunun bir yolu yordamı olduğunu biliyorsunuz:
>>> print("Dosya konumu: C:\\users\\zeynep\\gizli\\dosya.txt") Dosya konumu: C:\users\zeynep\gizli\dosya.txt

Gördüğünüz gibi, karakter dizisi içinde geçen bütün \ işaretlerini çiftleyerek sorunumuzu çözdük. Buradaki gibi bir sorunla karşılaşmamak için, dizin adlarını ayırırken ters taksim işareti yerine düz taksim işaretini kullanmayı da tercih edebilirsiniz:
>>> print("Dosya konumu: C:/users/zeynep/gizli/dosya.txt")

Biraz sonra bu sorunu halletmenin üçüncü ve daha kolay bir yönteminden daha söz edeceğiz. Ama biz şimdilik bu kaçış dizisini bir kenara bırakıp başka bir kaçış dizisini incelemeye geçelim.
Büyük Unicode (\U)

Bu kaçış dizisi biraz önce gördüğümüz \u adlı kaçış dizisiyle hemen hemen aynı anlama gelir. Bu kaçış dizisi de, tıpkı \u gibi, UNICODE kod konumlarını temsil etmek için kullanılır. Ancak U ile gösterilen kod konumları u ile gösterilenlere göre biraz daha uzundur. Örneğin, hatırlarsanız u kaçış dizisini kullanarak ?ı? harfinin UNICODE kod konumunu şöyle temsil ediyorduk:
>>> '\u0131' 'ı'

Eğer aynı kod konumunu U adlı kaçış dizisi ile göstermek istersek şöyle bir şey yazmamız gerekir:
>>> '\U00000131'

Gördüğünüz gibi, burada \U kaçış dizisinden sonra gelen kısım toplam 8 haneli bir sayıdan oluşuyor. u kaçış dizisinde ise bu kısmı toplam 4 haneli bir sayı olarak yazıyorduk. İşte \u kaçış dizisi ile U kaçış dizisi arasındaki fark budur. u kaçış dizisi hakkında söylediğimiz öteki her şey U kaçış dizisi için de geçerlidir.




alın size açıklama. Bu kadar bölümü ben yazmadım ancak bende o kadar örnek yazamam. çünkü bu dizin hakkında yeterli bilgim yok.


şimdi birde raw stringlere bakıp son verelim konuya.


r"deneme" yazdığınızda bu string bir raw string olur. içerisindeki kaçış dizinleri gözardı edilir ve olduğu gibi çıktı verilir. bu çıktıya kaçış dizinleri de dahildir.