Python 3'te Dize Biçimlendiricileri Nasıl Kullanılır
Giriş
Python’un str.format()
metodu, string sınıfının bir parçası olarak değişken ikameleri ve değer biçimlendirme işlemlerini yapmanıza olanak sağlar. Bu yöntem, string içinde konum bazlı biçimlendirme ile elemanları bir araya getirmenizi mümkün kılar.
Bu öğretici, Python’daki biçimlendiricilerin yaygın kullanımlarını ele alacak ve kodunuzu daha okunabilir ve kullanıcı dostu hale getirmenize yardımcı olacak.
Biçimlendirici Kullanımı
Biçimlendiriciler, string içinde bir veya daha fazla yer tutucu tanımlanan bir çift süslü parantez {}
oluşturarak ve str.format()
metodunu çağırarak çalışır. Bu metoda, string ile birleştirmek istediğiniz değeri geçirirsiniz. Program çalıştırıldığında, bu değer, süslü parantezlerin bulunduğu yere yerleştirilir.
Bir biçimlendirici kullanan bir string yazdıralım:
Bilgi: Bu öğreticideki örnek kodları takip etmek için, yerel sisteminizde bir Python interaktif kabuğu açmak için python3
komutunu çalıştırın. Ardından, örnekleri kopyalayarak, yapıştırarak veya düzenleyerek >>>
isteminden sonra ekleyebilirsiniz.
print("Sammy'nin {} balonu var.".format(5))
Çıktı:
Sammy'nin 5 balonu var.
Yukarıdaki örnekte, bir çift süslü parantez ile bir yer tutucuya sahip bir string oluşturduk:
"Sammy'nin {} balonu var."
Daha sonra str.format()
metodunu ekledik ve bu metoda 5
tam sayısını geçirdik. Bu işlem, string içindeki süslü parantezlerin olduğu yere 5
sayısını yerleştirir:
Sammy'nin 5 balonu var.
Ayrıca, biçimlendirici yer tutucularına sahip bir string’i bir değişkene atayabiliriz:
open_string = "Sammy {} seviyor."
print(open_string.format("açık kaynağı"))
Çıktı
Sammy açık kaynağı seviyor.
Bu ikinci örnekte, "açık kaynağı"
stringini daha büyük bir string ile birleştirdik ve orijinal stringdeki süslü parantezlerin yerine geçirdik.
Python’da biçimlendiriciler, süslü parantezleri str.format()
metodu ile geçeceğiniz değerler için yer tutucu olarak kullanmanıza olanak tanır.
Birden Fazla Yer Tutucu ile Biçimlendiriciler Kullanma
Birden fazla süslü parantez çifti kullanarak, birden fazla değişken ikamesi yapabilirsiniz. Yukarıdaki cümleye başka bir değişken eklemek istersek, orijinal stringe ikinci bir süslü parantez çifti ekleyip metoda ikinci bir değer geçirebiliriz:
new_open_string = "Sammy {} {} seviyor." #2 {} yer tutucular
print(new_open_string.format("açık kaynak", "yazılımı")) #Yönteme virgülle ayrılmış 2 dize geçirin
Çıktı
python
Sammy açık-kaynak yazılımı seviyor.
Başka bir ikame eklemek için, orijinal stringe ikinci bir süslü parantez çifti ekledik. Sonra, str.format()
metoduna iki string geçtik ve bunları virgül ile ayırdık.
Aynı söz dizimi ile ek ikameler ekleyebiliriz:
sammy_string = "Sammy {} {} seviyor, ve {} {} var." #4 {} yer tutucuları
print(sammy_string.format("açık kaynak", "yazılımı", 5, "balonu")) #Metoda 4 dize geçir
Çıktı
Sammy açık-kaynak yazılımı seviyor, ve 5 balonu var.
sammy_string
içinde, değişken ikameleri için 4 çift süslü parantez ekledik. Daha sonra str.format()
metoduna 4 değer geçtik, string ve tam sayı veri türlerini karıştırdık. Bu değerlerin her biri virgülle ayrılır.
Konum ve Anahtar Argümanlar ile Biçimlendiricileri Yeniden Düzenleme
Süslü parantezleri herhangi bir parametre olmadan boş bıraktığımızda, Python str.format()
metoduna geçirilen değerleri sırayla yerleştirir. Şimdiye kadar gördüğümüz gibi, iki boş süslü parantez ile iki değer geçirilmiş bir biçimlendirici şu şekilde görünür:
print("Sammy bir {} ve evcil hayvanı {}!".format("köpek balığı", "pilot balığı"))
Çıktı
Sammy bir köpek balığı ve evcil hayvanı pilot balığı var!
Süslü parantezlerin ilk çifti "köpek balığı"
string değeriyle, ikinci çifti ise "pilot balığı"
değeriyle ikame edilir.
Metot içindeki değerler şu şekildedir:
("köpek balığı", "pilot balığı")
Bu, esasen bir tuple
veri tipidir ve tuple
içinde yer alan her bir değer sıfırdan başlayan bir indeks numarası ile çağrılabilir.
Bu indeks numaralarını orijinal stringde yer tutucu olarak kullanılan süslü parantezlere geçirebiliriz:
print("Sammy bir {0} ve evcil hayvanı {1} var!".format("köpek balığı", "pilot balığı"))
Yukarıdaki örnekte, çıktısı sırasız indeks numaraları geçmeden elde ettiğimizle aynı olacak çünkü tuple içindeki değerleri sırayla çağırıyoruz:
Çıktı
Sammy bir köpek balığı ve evcil hayvanı pilot balığı var!
Ancak, indeks numaralarını tersine çevirirsek, stringe geçirilen değerlerin sırasını da tersine çevirebiliriz:
print("Sammy bir {1} ve evcil hayvanı {0} var!".format("köpek balığı", "pilot balığı"))
Çıktı
Sammy bir pilot balığı ve evcil hayvanı köpek balığı var!
Eğer bir tuple (demet) içinde 0 ve 1 indeks pozisyonlarında değerler varsa, 2 numaralı bir indeks numarasını çağırmak, aralık dışı bir değeri çağırmak anlamına gelir. Aralık dışı bir indeks numarası çağırdığınızda, bir hata mesajı alırsınız:
print("Sammy the {2} has a pet {1}!".format("shark", "pilot fish"))
Çıktı:
IndexError: tuple dizini aralık dışında
Bu hata mesajı, tuple'ın yalnızca 0 ve 1 indeks numaralarına sahip değerleri olduğunu ve bu nedenle 2 numaralı indeksin aralık dışı olduğunu belirtir.
Daha fazla yer tutucu (placeholder) ekleyelim ve bunlara birkaç değer daha geçirelim, böylece formatlayıcıların nasıl yeniden sıralanabileceğini daha iyi anlayabiliriz. Öncelikle, dört yer tutucuya sahip yeni bir dize (string) örneği:
print("Sammy is a {}, {}, and {} {}!".format("mutlu", "gülümseyen", "mavi", "köpekbalığı"))
Çıktı:
Sammy mutlu, gülümseyen ve mavi bir köpekbalığıdır!
Parametreler olmadan, str.format()
metoduna geçirilen değerler sırayla dizeye eklenir.
Dizedeki değerlerin tuple'da karşılık gelen indeks numaraları şunlardır:
"Mutlu" "gülümseyen" "mavi" "köpekbalığı"
0 1 2 3
Şimdi, bu değerlerin sırasını değiştirmek için indeks numaralarını kullanalım:
print("Sammy bir {3}, {2} ve {1} {0}!".format("mutlu", "gülümseyen", "mavi", "köpekbalığı"))
Çıktı:
Sammy bir köpek balığı, mavi ve mutlu bir şekilde gülümsüyor!
3 numaralı indeks ile başladığımız için, "shark"
değerini ilk olarak çağırdık. Diğer indeks numaraları da kelimelerin dizideki sırasını değiştirdi.
Posisyonel argümanlara ek olarak, anahtar kelime argümanlarını (keyword arguments) da kullanabiliriz. Bu argümanlar anahtar kelimelerine göre çağrılır:
print("Sammy {0} {1} bir {pr}.".format("köpekbalığı", "yapıldı", pr = "çekme isteği"))
Çıktı:
Köpekbalığı Sammy bir çekme isteği gönderdi.
Bu örnek, anahtar kelime argümanının pozisyonel argümanlarla birlikte kullanıldığını gösterir. Anahtar kelime argümanı olan pr
'ı, pozisyonel argümanların yanında kullanabilir ve bu argümanları orijinal dizedeki sırayı değiştirmek için kullanabiliriz:
print("Sammy {pr} {1} bir {0}.".format("köpekbalığı", "yapıldı", pr = "çekme isteği"))
Çıktı:
Sammy çekme isteği bir köpekbalığı yaptı.
Posisyonel ve anahtar kelime argümanları, dizeleri manipüle ederken daha fazla kontrol sağlar ve orijinal dizenin sırasını değiştirme olanağı sunar.
Tip Türünü Belirleme
Süslü parantezler içinde daha fazla parametre ekleyebiliriz. Format kodu sözdizimi {field_name:conversion}
şeklinde kullanılır. Burada field_name
, daha önce sıralama bölümünde geçtiğimiz gibi, str.format()
metoduna geçirilen argümanın indeks numarasını belirtir. conversion
ise formatlayıcı ile kullandığınız veri türünün dönüştürme koduna atıfta bulunur.
Dönüştürme türü, Python’un kullandığı tek karakterlik tür koduna karşılık gelir. Burada kullanacağımız kodlar; s
(string - dize), d
(onluk tam sayılar - decimal integers) ve f
(ondalık basamaklı sayı göstermek için - float) kodlarıdır. Daha fazla bilgi için Python 3'ün resmi belgelerindeki Format Spesifikasyonu Mini Dili'ne göz atabilirsiniz.
Bir tam sayıyı metot üzerinden geçirip, onu f
dönüşüm türü argümanı ekleyerek bir float (ondalık sayı) olarak nasıl gösterebileceğimize bir örnekle bakalım:
print("Sammy {1}'in {0:f} yüzdesini yedi!".format(75, "pizza"))
Çıktı:
Sammy bir pizzanın yüzde 75.000000'ini yedi!
İlk süslü parantez değişim alanı için {field_name:conversion}
sözdizimini kullandık ve bir float çıktısı aldık. İkinci süslü parantez yalnızca {field_name}
kullanır.
Yukarıdaki örnekte, ondalık noktadan sonra çok fazla rakam gösteriliyor, ancak bunları sınırlayabilirsiniz. Float (ondalık sayı) değerleri için f
belirtirken, ondalık noktadan sonra göstermek istediğiniz basamak sayısını .
ekleyerek belirtebilirsiniz.
Sammy pizzanın %75,765367'sini yediyse, ancak yüksek bir doğruluk seviyesine ihtiyacımız yoksa, f
dönüşüm türünden önce .3
ekleyerek ondalık noktadan sonraki basamakları 3 ile sınırlayabiliriz:
print("Sammy pizzanın {0:.3f} yüzdesini yedi!".format(75.765367))
Çıktı:
Sammy bir pizzanın yüzde 75.765'ini yedi!
Eğer sadece bir ondalık basamak istiyorsak, dizeyi ve metodu şu şekilde yeniden yazabiliriz:
print("Sammy bir pizzanın {0:.1f} yüzdesini yedi!".format(75.765367))
Çıktı:
Sammy pizzanın yüzde 75,8'ini yedi!
Dikkat edin, hassasiyeti değiştirmek sayının yuvarlanmasına neden olur.
Hiçbir ondalık basamağı olmayan bir sayıyı float olarak görüntülememize rağmen, d
dönüşüm türünü kullanarak float değerini tam sayıya dönüştürmeye çalışırsak bir hata alırız:
print("Sammy pizzanın % {0:d} kadarını yedi!".format(75.765367))
Çıktı
ValueError: 'float' türü nesne için bilinmeyen 'd' biçim kodu
Eğer ondalık basamakların gösterilmesini istemiyorsanız, biçimlendiricinizi şu şekilde yazabilirsiniz:
print("Sammy pizzanın % {0:.0f} kadarını yedi!".format(75.765367))
Çıktı
Sammy pizzanın % 76 kadarını yedi!
Bu, sayınızı tam sayıya dönüştürmez ancak ondalık basamaktan sonra gösterilen basamak sayısını sınırlar.
Değişken Yerine Koymalarını Doldurma (Padding Variable Substitutions)
Yer tutucular, değişken yerine koyma alanları olduğundan, bir öğenin etrafına alan veya boşluk eklemek için alan boyutunu artırabilirsiniz. Bu, verileri görsel olarak düzenlemenin gerekli olduğu durumlarda yararlıdır.
Sözdizimimizdeki süslü parantezlerdeki iki nokta üst üste :
işaretinden sonra bir sayı ekleyerek alan boyutunu (karakter cinsinden) artırabiliriz:
print("Sammy'nin {0:4} kırmızı {1:^16} var!".format(5, "balonları"))
Çıktı
Sammy'nin 5 kırmızı balonları var!
Yukarıdaki örnekte, 5
sayısına 4 karakterlik bir alan boyutu verdik ve balonları
kelimesine 16 karakterlik bir alan boyutu verdik (çünkü uzun bir dizgedir).
Gördüğümüz gibi, varsayılan olarak dizgeler alan içinde sola dayalıdır ve sayılar ise sağa dayalıdır. Bunu, iki nokta üst üste işaretinden sonra hizalama kodu ekleyerek değiştirebiliriz.<
metni alanda sola hizalar, ^
metni alanın ortasına hizalar ve >
metni sağa hizalar.
Sayımızı sola hizalayalım ve dizgeyi ortalayalım:
print("Sammy'nin {0:<4} kırmızı {1:^16} var!".format(5, "balonları"))
Çıktı
Sammy'nin 5 kırmızı balonları var!
Artık 5
sola hizalanmış, kırmızı
kelimesinin önünde boşluklar bırakılmış ve balonları
alanın ortasına hizalanmıştır, solunda ve sağında boşluklar bulunmaktadır.
Varsayılan olarak, biçimlendiricilerle alanı büyüttüğümüzde Python, alanı boşluk karakterleriyle doldurur. Bunu, alanı doldurmak istediğimiz karakteri iki nokta üst üste işaretinden hemen sonra belirterek değiştirebiliriz:
print("{:*^20s}".format("Sammy"))
Çıktı
*******Sammy********
Biçimlendirme str.format() içinde sıfır dizin konumunda belirtilen dizgeyi alıyor, iki nokta üst üste işaretini ekliyor ve alanı doldurmak için boşluk yerine *
kullanıyoruz. Dizgiyi ortalıyoruz ^
, alanın 20 karakter uzunluğunda olduğunu belirtiyoruz ve ayrıca dizge türünde çalıştığımızı belirtmek için s
kullanıyoruz.
Bu parametreleri daha önce kullandığımız diğer parametrelerle birleştirebiliriz:
print("Sammy pizzanın % {0:5.0f} kadarını yedi!".format(75.765367))
Çıktı Sammy pizzanın %76 kadarını yedi!
Süslü parantezler içindeki parametrelerde, ondalık sayının dizin alanı numarasını belirledik ve iki nokta üst üste işaretini ekledik, alan numarasının boyutunu belirledik ve ondalık nokta yazdık, ardından f
dönüştürme türünü belirledik.
Değişken Kullanımı
Şu ana kadar str.format()
yöntemine tamsayılar, ondalık sayılar ve dizgeler geçirdik, ancak aynı yönteme değişkenleri de geçirebiliriz. Bu, diğer tüm değişkenlerle çalıştığı gibi çalışır.
nBalonlar = 8
print("Sammy'nin bugün {} balonu var!".format(nBalonlar))
Çıktı
Sammy'nin bugün 8 balonu var!
Hem orijinal dize hem de yönteme geçen veriler için değişkenler kullanabiliriz:
sammy = "Sammy'nin bugün {} balonu var!"
nBalonlar = 8
print(sammy.format(nBalonlar))
Çıktı
Sammy'nin bugün 8 balonu var!
Değişkenler, biçimlendirici sözdizimi yapımızın her kısmına kolayca yerine konabilir. Bu, kullanıcı tarafından üretilen girdileri alıp bu değerlere değişkenler atarken işleri daha kolay hale getirir.
Verileri Düzenlemek için Biçimlendirici Kullanımı
Biçimlendiriciler, birçok veriyi görsel bir şekilde düzenlerken en iyi ışıkta görülürler. Kullanıcılara veritabanları gösteriyorsak, alan boyutunu artırmak ve hizalamayı değiştirmek için biçimlendirici kullanmak, çıktınızın daha okunabilir olmasını sağlayabilir.
Python'daki tipik bir for döngüsüne bakalım, 3'ten 12'ye kadar olan aralıkta i
, i*i
ve i*i*i
değerlerini yazdıracaktır:
for i in range(3,13):
print(i, i*i, i*i*i)
Çıktı
3 9 27
4 16 64
5 25 125
6 36 216
7 49 343
8 64 512
9 81 729
10 100 1000
11 121 1331
12 144 1728
Çıktı bir şekilde düzenlenmiş olsa da, sayılar birbirlerinin sütunlarına taşarak son kısımlarını daha az okunabilir hale getirir. Daha büyük bir veri kümesiyle çalışıyorsanız bu bir sorun teşkil edebilir.
Bu sayılara daha fazla boşluk vermek için biçimlendiricileri kullanalım:
for i in range(3,13):
print("{:3d} {:4d} {:5d}".format(i, i*i, i*i*i))
Süslü parantezlerin içinde, dizin numarası için alan adı eklemedik ve iki nokta üst üste işaretinden sonra alan boyutunu, ardından tamsayılarla çalıştığımız için d
dönüştürme türünü ekledik. Bu örnekte, beklenen çıktı boyutunu karşılamak için her biri için iki ekstra karakter boşluğu sağladık, böylece çıktımız şu şekilde görünüyor:
Çıktı
3 9 27
4 16 64
5 25 125
6 36 216
7 49 343
8 64 512
9 81 729
10 100 1000
11 121 1331
12 144 1728
Sabit sütunlar elde etmek için tutarlı bir alan boyutu belirleyebiliriz, böylece daha büyük sayılar için bile alanı düzenleyebiliriz:
for i in range(3,13):
print("{:6d} {:6d} {:6d}".format(i, i*i, i*i*i))
Çıktı
3 9 27
4 16 64
5 25 125
6 36 216
7 49 343
8 64 512
9 81 729
10 100 1000
11 121 1331
12 144 1728
Sütunların hizalanmasını <
, ^
ve >
ekleyerek değiştirebilir, d
'yi f
ile değiştirip ondalık basamaklar ekleyebilir, alan adı dizin numaralarını değiştirebilir ve daha fazlasını yapabiliriz, böylece verileri istediğimiz gibi görüntüleyebiliriz.
Sonuç
Değişken yerine koyma için biçimlendirici kullanmak, dizgeleri birleştirmenin ve değerleri ve verileri düzenlemenin etkili bir yolu olabilir. Biçimlendiriciler, bir dizeye değişken geçirmeyi temel ama açıklayıcı olmayan bir şekilde temsil eder ve çıktının okunabilir ve kullanıcı dostu olmasını sağlamak için yararlıdır.
Lisa Tagliaferri tarafından yazılan How To Use String Formatters in Python 3 Program makalesinin düzenlenmiş çevirisi.
Daha Fazla Oku:
- Sonraki Makale:Python 3'te Operatörlerle Matematik Nasıl Yapılır
- Önceki Makale:Python 3'te Değişkenler Nasıl Kullanılır