str ve Formatlı Yazım İşlemleri
9911
Diyelim ki 3 adet değişkeni ekrana basmak istiyoruz, a, b ve c olsun.
s = 'a = ' + str(a) + ', b = ' + str(b) + ', c = ' + str(c)
print(s)
Bunu yapabiliriz ama çok da pratik değildir. Bu tarz işlemlere formatlı yazım denmektedir. Bunun için dilde kullanılan temelde 3 adet yöntem vardır.
%operatör metodu ile formatlı yazımstrsınıfınınformat()metodu ile formatlı yazımString enterpolasyonu ile formatlı yazım.
String enterpolasyonu Python’a sonraları, 3.6 ile, gelmiştir. Diğer iki yönteme göre hem daha pratik hem de hızlı bir formatlama sunmaktadır.
Bu yüzden hemen hemen her zaman string enterpolasyonu kullanılır.
strnin format() Metodu
format() metodu istenildiği kadar argüman alabilmektedir. Bu metodda yazı
içerisinde {n} şeklinde yer tutucular olmalıdır. Bu metod argümanları
numaralarına göre yerleştirir. İlk argümanın numarası 0dır.
Örneğin:
>>> a = 10; b = 20; c = 30
>>> s = 'a = {0}, b = {1}, c = {2}'.format(a, b, c)
>>> print(s)
a = 10, b = 20, c = 30
Görüldüğü gibi burada {n} kalıpları argümanlarla değiştirilmiştir.
Eğer olmayan bir argümana erişmeye çalışırsak IndexError exception oluşmakta
ama kullanmadığımız bir argüman geçersek problem olmamaktadır.
>>> print('a = {10}, b = {1}, c = {2}'.format(a, b, c))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: Replacement index 10 out of range for positional args tuple
>>> print('{0}'.format(a, b, c))
10
Aynı yer tutucu birden fazla kez kullanılabilir ve format()ın argüman türleri
int vs olabilir.
Yer tutucularda {} şeklinde boş küme parantezi kullanabiliriz. Bu durumda
her {} sırası ile argümanlarla eşlenir. Fakat böyle bir kullanımda ya
yer tutucuların hepsi numarasız olmalı ya da numaralı olmalıdır.
Numarasız yer tutucu sıklıkla kullanılmaktadır. Fakat burada aynı yer tutucuyu tekrarlamak mümkün değildir.
>>> print('a = {}, b = {}, c = {}'.format(a, b, c))
a = 10, b = 20, c = 30
format() metodunda aslında daha ileri kullanımlar da mevcuttur. Bunlar
genelde : karakteri ile yapılır.
Örneğin:
>>> day = 7
>>> month = 6
>>> year = 2025
>>> print('{0:02d}/{1:02d}/{2:04d}'.format(day, month, year))
07/06/2025
Ya da başka bir sayı sisteminde yazdırma yapabiliriz.
>>> x = 100
>>> print('{:X}'.format(x))
64
Çeşitli kullanım senaryoları için:
https://docs.python.org/3/library/string.html#formatspec
adresine bakılabilir.
10116
format()içerisinde gerçekten { karakteri basmak istiyorsak {{ ya da }}
şeklinde ikili kullanım yapmalıyız.
String Enterpolasyonu - String Interpolation
Bu özellik birçok programlama dilinde olmasına rağmen Python’a versiyon 3.6 ile beraber gelmiştir.
Bunun için string’e yapışık f veya F öneki getirilir. Burada yapılan işlem
format() metoduna benzer. Ama burada {} içerisinde bir ifade bulunmalıdır.
Yorumlayıcı akışta buraya geldiğinde bizzat {} içerisinde olan ifadelerin
değerini hesaplar ve yeni bir str oluşturarak yer tutucu ile değiştirir.
Örneğin:
>>> a = 10; b = 20
>>> print(f'a = {a}, b = {b}')
a = 10, b = 20
format(), str sınıfının bir metodudur. Enterpolasyon ise doğrudan
yorumlayıcı tarafından yapılan bir şeydir. Bu yüzden göreceli daha hızlı
çalışmaktadır. O yüzden artık Python’da default olarak programcılar tarafından
hep bu kullanılır.
>>> a = 10; b = 20; c = 30
>>> s = f'a = {a}, b = {b * b}, c = {c}'
>>> print(s)
a = 10, b = 400, c = 30
Hatta
import math
x = 10
print(f"karekök {x} = {math.sqrt(x)}") # karekök 10 = 3.1622776601683795
gibi kodlar da yazabiliriz.
String enterpolasyonda string’i ' ile kullanıyorsak ve {} içerisinde de '
kullanılacaksa, bu karışma engellenmelidir.
>>> s = f'{', '.join(a)}'
File "<stdin>", line 1
s = f'{', '.join(a)}'
^
SyntaxError: f-string: expecting '}'
Biz bu durumda çift tırnak ya da üç tırnak ile çözüm sağlayabiliriz örneğin.
>>> a = ['alper', 'yazar']
>>> s = f"{', '.join(a)}"
>>> s
'alper, yazar'
Burada {} içerisinde \ kullanılamamakta olup aşağıdaki ifade geçersizdir.
>>> s = f'{\', \'.join(a)}'
File "<stdin>", line 1
s = f'{\', \'.join(a)}'
^
SyntaxError: f-string expression part cannot include a backslash
10211
format() metodunun da kullanışlı olabildiği durumlar hala olabilir. Örneğin
tekrarlı ifadeleri yazmak format() ile daha kolay olabilir. Örnek:
>>> x = 10
>>> print(f'{x * x}, {x * x}, {x * x}, {x * x}, {x * x}')
100, 100, 100, 100, 100
>>> print('{0}, {0}, {0}, {0}, {0}'.format(x * x))
100, 100, 100, 100, 100
Enterpolasyonda da format()taki : içeren kurallar geçerlidir.
print(f'{day:02d}/{month:02d}/{year:04d}') # geçerlidir.
% ile Formatlama
Python 2’de olan bir yöntemdir. Dil, C’nin etkisi altında olduğu için bu tercih
edilmiştir, %d ile int yazdır, %f ile float yazdır gibi.
Bu formatlamada % operatörü kullanılır, strnin dışında, ve bunun sağında
bir demet solunda ise str vardır. Yani % karakteri sadece strnin içinde
geçmez, ayrıca sonrasında bir operatör olarak da bulunur.
>>> x = 10; y = 20
>>> 'x = %d, y = %d' % (x, y)
'x = 10, y = 20'
% operatörünün sağında tek bir ifade olabilir ya da demet olmalıdır. Tek bir
değeri formatlamak için demet kullanmaya gerek yoktur. Birden fazla için demet
şarttır. Demet yerine liste gibi başka bir dolaşılabilir nesne kullanamayız.
>>> 'x = %d' % x
'x = 10'
10300