Python - f-string

F-String Kullanımı

F-String, bir dizenin (string ifadenin) seçilen kısımlarını biçimlendirmenize olanak tanır.

F-String, python 3.6'da tanıtıldı ve şu anda dizeleri biçimlendirmek için tercih edilen yöntemdir.

f-string

Python 3.6'dan önceformat() yöntemini kullanmak zorundaydık. format() yöntemi hala kullanılabilir, ancak f-string daha hızlıdır ve dizileri biçimlendirmek için tercih edilen yöntemdir. O nedenle format yöntemini/metodunu anlatmayacağım.

Bir dizeyi f-string olarak belirtmek için, dize sabitinin önüne f harfini eklemeniz yeterlidir, örneğin:

metin = f"Fiyat 4900 Türk Lirası"
print(metin)

Çıktı:

Fiyat 4900 Türk Lirası

Yer tutucular ve Değiştiriciler

Bir f-stringdeki değerleri biçimlendirmek için yer tutucular{} ekleyin. Bir yer tutucu, değeri biçimlendirmek için kullanılır ve değişkenler, işlemler, fonksiyonlar ile değiştiriciler içerebilir.

Örneğin:

Fiyat değişkeni için bir yer tutucu ekleyin:

ücret = 5900
metin = f"Fiyat {ücret} Türk Lirası"
print(metin)

Çıktı:

Fiyat 5900 Türk Lirası

Yer tutucu, değeri biçimlendirmek için bir değiştirici de içerebilir.

Değiştirici, iki nokta üst üste (:) ve ardından geçerli bir biçimlendirme türü eklenerek dahil edilir. Örneğin, .2f ifadesi, 2 basamaklı ondalıklı sayı (float) anlamına gelir.

Fiyatı 2 ondalık basamakla göster:

ücret = 59
metin = f"Fiyat {ücret:.2f} Türk Lirası"
print(metin)

Çıktı:

Fiyat 59.00 Türk Lirası

Bir değeri bir değişkende tutmadan doğrudan da biçimlendirebilirsiniz:

metin = f"Fiyat {59:.2f} Türk Lirası"
print(metin)

Çıktı:

Fiyat 59.00 Türk Lirası

.2f yer tutucusu aynı zamanda ondalıklı sayıları yuvarlamak için de kullanılabilir.

pi = 3.1415926535897932384626433 

print(f"{pi:.2f}")
print(f"{pi:.4f}")

Çıktı:

3.14
3.1416

Eğer yukarıdaki kodda .4f yerine sadece .4 yazmış olsaydık bu kez . nokta karakteri hariç toplam 4 karakterlik değer ekrana yazdırılırdı, görelim;

pi = 3.1415926535897932384626433 

print(f"{pi:.4}")

Çıktı:

3.142

Eğer fstring içerisinde { ya da } süslü parantez karakterlerini kullanmak istersek, peşpeşe 2 adet süslü parantez {{ yazmak gerekir.

pi = 3.1415926535897932384626433 
print(f"{{pi sayısı  }} {pi} iken yarısı {pi / 2} dir.")

Çıktı:

{pi sayısı  } 3.141592653589793 iken yarısı 1.5707963267948966 dir.

F-String ile İşlemler Gerçekleştirmek

Yer tutucuların içinde Python işlemleri gerçekleştirebilirsiniz. Örneğin doğrudan matematiksel işlemler yapabilirsiniz:

metin = f"Fiyat {20 * 59} Türk Lirası"
print(metin)

Çıktı:

Fiyat 1180 Türk Lirası

Değişkenler üzerinde de matematik işlemleri gerçekleştirebilirsiniz:

ücret = 65
kdv = 0.25
metin = f"KDV'li fiyat {ücret * (1 + kdv)} Türk Lirası"
print(metin)

Çıktı:

KDV'li fiyat 81.25 Türk Lirası

Yer tutucuların içinde if...else ifadeleri kullanabilirsiniz.

Fiyat 5000 'in üzerindeyse "Pahalı" değerini, aksi takdirde "Ucuz" değerini döndür:

ücret = 5000
metin = f"Bu ürün üçün fiyat oldukça {'Pahalı' if ücret > 3000 else 'Ucuz'}"

print(metin)

Çıktı:

Bu ürün üçün fiyat oldukça Pahalı

fstring ile kod yazarken satırı bir noktada kesip alt satırdan devam etmek için \ karakteri kullanılabilir.

ücret = 5000
metin = f"Bu ürün üçün fiyat oldukça {'Pahalı' if ücret > 3000 \
else 'Ucuz'}"

print(metin)

F-String içinde Fonksiyon Çalıştırmak

Yer tutucunun içindeki fonksiyon çalıştırabilirsiniz.

Bir değeri büyük harflere dönüştürmek için upper() dizi (string) metodunu kullanın:

meyve = "Çilek"
metin = f"En sevdiğim meyve: {meyve.upper()}'tir."
print(metin)

Çıktı:

En sevdiğim meyve: ÇİLEK'tir.

F-String içinde kullanılan fonksiyon, dahili (yerleşik) bir Python metodu olmak zorunda değildir; kendi fonksiyonlarınızı da oluşturup kullanabilirsiniz.

Feet ölçü birimini metreye dönüştüren bir fonksiyon oluşturun ve bunu f-string içinde kullanın.

def fonksiyonum(x):
  return x * 0.3048

metin = f"Uçak şuan {fonksiyonum(30000)} metre yükseklikte uçuyor."
print(metin)

Çıktı:

Uçak şuan 9144.0 metre yükseklikte uçuyor.

Daha Fazla Değiştirici

Bu bölümün başında, .2f değiştiricisini kullanarak bir sayıyı, 2 basamaklı ondalıklı sayı olarak biçimlendirmeyi açıklamıştık.

Değerleri biçimlendirmek için kullanılabilecek birkaç başka değiştiriciler de mevcut. Şimdi bunları inceleyelim.

Binlik ayırıcı olarak virgül kullanın:

ücret = 65000
metin = f"Ürünün fiyatı {ücret:,} Türk Lirası"
print(metin)

Çıktı:

Ürünün fiyatı 65,000 Türk Lirası

Aşağıdaki tabloda tüm biçimlendirme türlerini ve ne işe yaradıklarına dair açıklamalarını görebilirsiniz.

Biçimlendirme Türleri

Biçimlendirme Türü Kullanım Amacı
:< Sonucu sola hizalar (kullanılabilir alan içinde)
:> Sonucu sağa hizalar (kullanılabilir alan içinde)
:^ Sonucu ortalar (kullanılabilir alan içinde)
:= İşareti en sol konuma yerleştirir
:+ Sonucun pozitif veya negatif olduğunu belirtmek için artı işareti kullanın
:- Yalnızca negatif değerler için eksi işareti kullanın
: Pozitif sayıların önüne ekstra boşluk eklemek için boşluk kullanır (ve negatif sayıların önüne eksi işareti ekler)
:, Binlik ayırıcı olarak virgül kullanır
:_ Binlik ayırıcı olarak alt çizgi de kullanılabilir
:b İkili (Binary) biçim
:c Değeri, karşılık gelen Unicode karakterine dönüştürür
:d Ondalıklı biçim
:e Bilimsel biçim, küçük e harfi ile
:E Bilimsel biçim, büyük E harfi ile
:f Sabit ondalıklı sayı biçimi
:F Sabit ondalıklı sayı biçimi, büyük harf biçiminde (inf ve nanINF ve NAN olarak göster)
:g Genel biçim
:G Genel biçim (bilimsel gösterimler için büyük E harfi kullanılır)
:o Sekizlik (Octal) biçim
:x Onaltılık (Hex) biçim, küçük harf
:X Onaltılık (Hex) biçim, büyük harf
:n Sayı (number) biçimi
:% Yüzde biçimi

F-String ile biçimlendirme türlerini kullanırken, aşağıdaki sıralamaya göre yerleşim yapılabilir.

:[Doldurulacak_Karakter][Hizalama_Karakteri (Biçimlendirme_Türü)][Genişlik],.[Ondalik_Ayrimi][Biçim]

Örnekler

:<

Sonucu (kullanılabilir alan içinde) sola hizalar.

Aşağıda sola hizala :< biçimine dair örnek bir uygulama göstermek istiyorum.

Standart f-string ile kodu yazarsak aşağıdaki sonucu elde ederiz.

bilgiler = ["Mustafa", "Halil", "Makine Mühendisi"]

for no, deger in enumerate(bilgiler):
    print(f"| {no} | {deger} |")

Çıktı:

| 0 | Mustafa |
| 1 | Halil |
| 2 | Makine Mühendisi |

Koda :< biçimini eklersek bir değişiklik olur mu? görelim:

bilgiler = ["Mustafa", "Halil", "Makine Mühendisi"]

for no, deger in enumerate(bilgiler):
    print(f"| {no} | {deger:<} |")

Çıktı:

| 0 | Mustafa |
| 1 | Halil |
| 2 | Makine Mühendisi |

Gördüğünüz gibi sonuç değişmedi çünkü varsayılan olarak ifadeler sola dayalı yazılır. Peki ya, :< ifadesinden sonra bir sayı değeri (yer tutucu) kullansak ne olur?.

bilgiler = ["Mustafa", "Halil", "Makine Mühendisi"]

for no, deger in enumerate(bilgiler):
    print(f"| {no} | {deger:<20} |")

Çıktı:

| 0 | Mustafa              |
| 1 | Halil                |
| 2 | Makine Mühendisi     |

İşte istediğim sonuç. :< ifadesinin yanına 20 sayısını yazmakla (:<20) , python'a toplamda 20 karakterlik yer işgal etmesi ve deger değişkenin bu alanda sola hizalanmasını söylemiş olduk.

Peki 20 karakterlik yer işgal ederken yer tutucu olarak boşluk karakteri yerine başka karakter kullanmak istersek ne yapmalıyız? Aşağıdaki örneği inceleyelim;

bilgiler = ["Mustafa", "Halil", "Makine Mühendisi"]

for bilgi in bilgiler:
    print(f"{bilgi:_<20}")

Çıktı:

Mustafa_____________
Halil_______________
Makine Mühendisi____

:>

Sonucu  (kullanılabilir alan içinde) sağa hizalar.

Yukarıdaki örneği revize ederek bu kez de 30 karekterlik yer işgal edip, değer ifadesini sağa hizalayalım. Bunu için :>30 ifadesini kullanacağız.

bilgiler = ["Mustafa", "Halil", "Makine Mühendisi"]

for no, deger in enumerate(bilgiler):
    print(f"| {no} | {deger:>30} |")

Çıktı:

| 0 |                        Mustafa |
| 1 |                          Halil |
| 2 |               Makine Mühendisi |
bilgiler = ["Mustafa", "Halil", "Makine Mühendisi"]

for bilgi in bilgiler:
    print(f"{bilgi:_>20}")

Çıktı:

_____________Mustafa
_______________Halil
____Makine Mühendisi

:^

Sonucu (kullanılabilir alan içinde) ortalar.

bilgiler = ["Mustafa", "Halil", "Makine Mühendisi"]

for bilgi in bilgiler:
    print(f"{bilgi:_^20}")

Çıktı:

______Mustafa_______
_______Halil________
__Makine Mühendisi__

.f

Sabit ondalıklı sayı biçimi

ondalik: float =  1234.5678

print(f"{ondalik:.2f}")

Çıktı:

1234.57

,.f

Python'da binlik ayırıcı olarak , virgül karakteri de kullanılır.

buyuksayi : float = 1234567.8910    # 1_234_567.8910 bu gösterim de aynı sonucu verir, birbirine eşittir.
print(f"{buyuksayi:,.1f}")          # ondalık olarak sadece tek basamak kullan

Çıktı:

1,234,567.9

:_

Python'da binlik ayırıcı olarak , virgül yerine | alt çizgi karakteri de kullanılabilir.

ücret = 65000
metin = f"Ürünün fiyatı {ücret:_} Türk Lirası"
print(metin)

Çıktı:

Ürünün fiyatı 65_000 Türk Lirası

.%

Yüzde biçimi

yuzdelik: float = .5678

print(f"{yuzdelik:.2%}")

Çıktı:

56.78%

:b

Bir sayının ikili (Binary) biçimini öğrenmek ya da ekrana yazdırmak için :b ifadesini kullanabiliriz.

hata_no = 12345
print(f"Hata numarası: {hata_no:b}")

Çıktı:

Hata numarası: 11000000111001

:b ifadesinde # karakterini ekleyip çıktıyı inceleyelim;

hata_no = 12345
print(f"Hata numarası: {hata_no:#b}")

Çıktı:

Hata numarası: 0b11000000111001

:o

Bir sayının Sekizlik (Octal) biçimini öğrenmek ya da ekrana yazdırmak için :o ifadesini kullanabiliriz.

hata_no = 12345
print(f"Hata numarası: {hata_no:o}")

Çıktı:

Hata numarası: 30071

:o ifadesinde # karakterini ekleyip çıktıyı inceleyelim;

hata_no = 12345
print(f"Hata numarası: {hata_no:#o}")

Çıktı:

Hata numarası: 0o30071

:x ya da :X

Bir sayının Onaltılık (Hex) biçimini öğrenmek ya da ekrana yazdırmak için :x ya da :X ifadelerini kullanabiliriz.

hata_no = 12345
print(f"Hata numarası: {hata_no:x}")
print(f"Hata numarası: {hata_no:#x}")
print(f"Hata numarası: {hata_no:X}")
print(f"Hata numarası: {hata_no:#X}")

Çıktı:

Hata numarası: 3039
Hata numarası: 0x3039
Hata numarası: 3039
Hata numarası: 0X3039

Onaltılık (Hex) biçimi kullanılırkenx ya da X karakterlerinin önüne sayı değeri yazılırsa bırakılan değer kadar boşluk bırakılır.

hata_no = 12345

print(f"Hata numarası: {hata_no:x}")
print(f"Hata numarası: {hata_no:10x}")
print(f"Hata numarası: {hata_no:X}")
print(f"Hata numarası: {hata_no:10X}")

Çıktı:

Hata numarası: 3039
Hata numarası:       3039
Hata numarası: 3039
Hata numarası:       3039

Değişken ile sayı atama

bilgiler = ["Mustafa", "Halil", "Makine Mühendisi"]
deger = 34

for bilgi in bilgiler:
    print(f"{bilgi:_<{deger}}")
    print(f"{bilgi:_^{deger}}")
    print(f"{bilgi:_>{deger}}")
    print("\n")

Çıktı:

Mustafa___________________________
_____________Mustafa______________
___________________________Mustafa


Halil_____________________________
______________Halil_______________
_____________________________Halil


Makine Mühendisi__________________
_________Makine Mühendisi_________
__________________Makine Mühendisi

datetime %x

from datetime import datetime

now: datetime = datetime.now()
print(f'{now:%x}') 

Çıktı:

08/31/25

datetime %c

from datetime import datetime

now: datetime = datetime.now()
print(f'{now:%c}') 

Çıktı:

Sun Aug 31 14:28:15 2025

datetime %H %M %S

from datetime import datetime

now: datetime = datetime.now()
print(f'{now:%H:%M:%S}') 

Çıktı:

14:32:06

Not:

F-String ile biçimlendirme türlerini kullanırken, aşağıdaki sıralamaya göre yerleşim yapılabilir.

:[Doldurulacak_Karakter][Hizalama_Karakteri (Biçimlendirme_Türü)][Genişlik],.[Ondalik_Ayrimi][Biçim]

Örneğin:

f_sicaklik_gunes = 27_000_000 # Fahrenheit
f_sicaklik_dunya = 58 # Fahrenheit

print(f"Güneşin sıcaklığı {(f_sicaklik_gunes - 32) / 1.8} Celcius derecedir.")
print(f"Dünyanın sıcaklığı {(f_sicaklik_dunya - 32) / 1.8} Celcius derecedir.")

Çıktı:

Güneşin sıcaklığı 14999982.222222222 Celcius derecedir.
Dünyanın sıcaklığı 14.444444444444445 Celcius derecedir.

Yukarıdaki Sıralamaya göre kodu düzenleyelim;

f_sicaklik_gunes = 27_000_000 # Fahrenheit
f_sicaklik_dunya = 58 # Fahrenheit

print(f"Güneşin sıcaklığı {(f_sicaklik_gunes - 32) / 1.8:*15^,.2f} Celcius derecedir.")
print(f"Dünyanın sıcaklığı {(f_sicaklik_dunya - 32) / 1.8:*15^,.2f} Celcius derecedir.")

Çıktı:

Güneşin sıcaklığı *14,999,982.22* Celcius derecedir.
Dünyanın sıcaklığı *****14.44***** Celcius derecedir.
print(f"Güneşin sıcaklığı {(f_sicaklik_gunes - 32) / 1.8:~>15_.1f} Celcius derecedir.")
print(f"Dünyanın sıcaklığı {(f_sicaklik_dunya - 32) / 1.8:~>15_.1f} Celcius derecedir.")

Çıktı:

Güneşin sıcaklığı ~~~14_999_982.2 Celcius derecedir.
Dünyanın sıcaklığı ~~~~~~~~~~~14.4 Celcius derecedir.

String ifadelerle yertutucu kullanımında stringler istenilen kısımdan kesilebilir. Aşağıdaki örnekler konuyu daha net anlatacaktır.

kullanici_1 = "Mustafa Halil"
kullanici_2 = "Sabahattin Ali"
kullanici_3 = "Eyüp Sabri"
kullanici_4 = "Ayşe"

mesaj = f"| {kullanici_1:15} | {kullanici_2:15} |\n| {kullanici_3:15} | {kullanici_4:15} |"

print(mesaj)

Çıktı:

| Mustafa Halil   | Sabahattin Ali  | Eyüp Sabri      | Ayşe            |

Yukarıdaki kod ile, toplam 15 karakterlik yer tutucu kullanılarak kullanıcı adları ve | pipe karakteri yazdırıldı.

Peki ya :15 ifadesinin yanına .3 ifadesi eklense ne olur? Görelim:

mesaj = f"| {kullanici_1:15.3} | {kullanici_2:15.3} | {kullanici_3:15.3} | {kullanici_4:15.3} |"

print(mesaj)

Çıktı:

| Mus             | Sab             | Eyü             | Ayş             |

Görüldüğü gibi her ifadenin ilk 3 karakteri alındı ve toplamda 15'er karakterlik boşluk (space) karakteri ile (yer tutucu) ekrana yazdırıldı.

Kodu değiştirerek .3 ifadesini .5 olarak değiştirip metni iki satıra bölelim.

mesaj = f"| {kullanici_1:15.5} | {kullanici_2:15.5} |\n| {kullanici_3:15.5} | {kullanici_4:15.5} |"

print(mesaj)

Çıktı:

| Musta           | Sabah           |
| Eyüp            | Ayşe            |

Ayşe ve Eyüpisimleri 4'er karakter olduğu için diğer isimler 5 karaktere kırpılırken Ayşe ve Eyüp ismi doğal olarak kırpılmadı.

Kaynaklar