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.

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ı 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 {95:.2f} Türk Lirası"
print(metin)

Çıktı:

Fiyat 59.00 Türk Lirası

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ı

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

Örnekler

:<

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. Peki ya, :< ifadesinden sonra bir sayı değeri 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ç. F-string biçiminin yanına 20 sayısını yazmakla (:<20) , deger ifadesinin toplamda 20 karakterlik yer işgal etmesi ve değer'in bu alanda sola hizalanmasını istemiş olduk.

Bu kez de 30 karekterlik yer işgal edip, değeri 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

.^

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

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

Çıktı:

______Mustafa_______
_______Halil________
__Makine Mühendisi__

.<

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

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

Çıktı:

Mustafa_____________
Halil_______________
Makine Mühendisi____

Değişken ile sayı atama

Yukarıdaki biçimlendirme türlerinin kaçar karakter yer tutacağını, değişken kullanarak ta belirtebiliriz. İçiçe köşeli parantez kullanımına dikkat edin.

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

.f ve .%

ondalik: float =  1234.5678
yuzdelik: float = .5678

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

Çıktı:

1234.57
56.78%

,.f

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

Çıktı:

1,234,567.9

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.

Kaynaklar