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 kullanır
: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 |

Kaynaklar