Bu derste dize biçimlendirme mekanizmasını öğreneceğiz. F-string, dizeyi biçimlendirmenin en iyi yoludur. Dizenin biçimlendirme stili, dizeyi daha okunabilir, daha kısa ve hataya daha az eğilimli hale getirir. Ayrıca diğerine göre daha hızlıdır.
Bu konunun derinliklerine dalmadan önce f dizesinden önce kullanılan teknikleri ele alacağız.
Python'da Eski Dize Biçimlendirmesi
Dizeyi biçimlendirmenin iki ana yolu vardır: % - biçimlendirme ve str.format(). Ancak her iki yöntemin de bazı sınırlamaları vardır. Bu verilen yöntemlere kısa bir giriş yapalım.
1,% - biçimlendirme
Bu, dizeyi biçimlendirmenin geleneksel bir yoludur, ancak belgeler aşağıdaki ifadeyi içeren bu yöntemi önerir.
'Burada açıklanan biçimlendirme işlemleri, birçok yaygın hataya (demetlerin ve sözlüklerin doğru şekilde görüntülenememesi gibi) yol açan çeşitli tuhaflıklar sergiliyor.
Daha yeni biçimlendirilmiş dize değişmezlerini veya str.format() arayüz bu hataların önlenmesine yardımcı olur.' - Resmi Belgeler .
% - biçimlendirme nasıl kullanılır?
%-operatörünü kullanarak yerleşik işlemi gerçekleştirebiliriz. Aşağıdaki örneği anlayalım.
Avl ağaçları
student = 'Michel' 'Hello, %s.' % student
Çıktı:
Hello Michel
Birden fazla değişkeni depolamak için tuple'ı da kullanabiliriz. Aşağıdaki örneği görelim.
name = 'Sharma' age = 24 'Hello, %s. You are %s.' % (name, age)
Çıktı:
Hello Sharma You are 24.
Neden %-biçimlendirme önerilmez?
Çünkü değişken artırıldıkça ve dize uzunluğu arttıkça kodumuz çok daha az okunabilir hale gelir. Kod dağınık görünüyor. Aşağıdaki örneği görelim.
Örnek -
first_name = 'Steve' last_name = 'Rogers' age = 70 profession = 'Superhero' group = 'Marvel? print(''Hello, %s %s. Your age is %s. You are a %s. You were a member of %s.' %(first_name, last_name, age, profession)')
Çıktı:
Hello, Steve Rogers. Your age is 70. You are a Superhero. You were a member of Marvel.
Yukarıdaki kodda gördüğümüz gibi kodun okunması zorlaştı ve hataya daha açık hale geldi. Bu nedenle dizeyi biçimlendirmenin bu yolu iyi değil.
2.str.format() yöntemi
Python 2.6'da tanıtılan dizeyi biçimlendirmenin başka bir popüler yoludur. Gelin bunu nasıl kullanabileceğimize bakalım.
str.format() nasıl kullanılır?
%-biçimlendirmede bir gelişmedir. Bu, nesne üzerinde çağrılan normal bir yerleşik işlev gibidir ve bu nesne bir dizgeye dönüştürülür.
Aşağıdaki örneği görelim.
Örnek -
first_name = 'Mathew' last_name = 'Zukerburg' age = 45 print('Hello, {}. You are {}.'.format(name, age)')
Format yönteminin içindeki sözlük öğesine erişmek için anahtarı format() yöntemine aktarabiliriz.
java liste yöntemleri
person = {'name': 'Peter', 'age': 17} 'Hello, {name}. You are {age}.'.format(name=person['name'], age=person['age'])
Çıktı:
Hello Peter, You are 17
Neden str.format() yöntemi önerilmez?
str.format() yöntemi, %-format yönteminden çok daha verimlidir ancak birden fazla parametreyle uğraştığımızda yine de oldukça ayrıntılı olabilir.
F-string Yöntemi
PEP 498 tarafından tanıtılan yeni bir dize biçimlendirme mekanizmasıdır. Aynı zamanda Değişmez Dizi İnterpolasyonu veya daha yaygın olarak F dizeleri olarak da bilinir. (dize değişmezinden önceki f karakteri). Bu mekanizmanın birincil odağı enterpolasyonu kolaylaştırmaktır.
Dizenin önüne 'F' harfini koyduğumuzda, dize f-dizgesinin kendisi haline gelir. F-string'i, f-string'i ile hemen hemen aynı şekilde biçimlendirilebilir. str.format() yöntem. F-string, Python ifadesini biçimlendirme için string değişmezlerinin içine yerleştirmenin kullanışlı bir yolunu sunar.
Örnek -
# Python3 program introducing f-string val = 'Geeks' print(f'{val}for{val} is a portal for {val}.') name = 'Tushar' age = 23 print(f'Hello, My name is {name} and I'm {age} years old.')
Çıktı:
Hello, My name is Tushar and I'm 28 years old.
Yukarıdaki kodda, dizeyi biçimlendirmek için f dizesini kullandık. Çalışma zamanında değerlendirir; tüm geçerli Python ifadelerini bunlara koyabiliriz.
Tek bir ifadede kullanabiliriz.
print(f'{2 * 30})'
Çıktı:
60
Ancak fonksiyonda kullanabiliriz.
def upercase(input): return input.uper() name = 'Sachin Tendulkar' f'{upercase(name)} is great.'
Çıktı:
Sachin Tendulkar is great
F-string, sınıf nesnesiyle de kullanılabilir. Aşağıdaki örneği anlayalım.
Örnek -
class Actor: def __init__(self, first_name, last_name, movie): self.first_name = first_name self.last_name = last_name self.movie = movie def __str__(self): return f'{self.first_name} {self.last_name}'s superhit movie is {self.movie}.' def __repr__(self): return f'{self.first_name} {self.last_name} {self.movie}. Superhi!' ac = Actor('Keenu', 'Reevs', 'Matrix') print(f'{ac}')
Çıktı:
Keenu Reevs's superhit movie is Matrix.
Açıklama -
Yukarıdaki kodda, bir nesneyi dize olarak temsil eden __str__() ve __repr__()'yi kullandık. Bu yüzden bu yöntemlerden en az birini sınıf tanımına dahil etmemiz gerekiyor. F-string __str__() yöntemini kullanacaktır; dönüşüm bayrağını ekleyerek __repr__() işlevini de kullanabiliriz! R.
print(f'{ac}') print(f'{ac}'!r)
Çıktı:
Keenu Reevs's superhit movie is Matrix. Keenu Reevs Matrix Superhit
Sözlükte F-string
F-string'in içindeki sözlük anahtarlarıyla çalışırken dikkatli olmalıyız. Sözlük tuşlarını ve f-string'i kullanmak için farklı bir alıntı var. Aşağıdaki örneği anlayalım.
Örnek -
detail = {'name': 'John', 'age': 19} print(f'{detail['name']} is {detail['age']} years old.')
Çıktı:
John is 19 years old.
Sözlük durumunda aşağıdaki yönteme izin verilmez.
Örnek -
detail = {'name': 'John', 'age': 19} print(f'{detail['name']} is {detail['age']} years old.')
Çıktı:
File '', line 2 print(f'{detail['name']} is {detail['age']} years old.') ^ SyntaxError: invalid syntax
Yukarıdaki kodda gördüğümüz gibi çift tırnak işaretini tek tırnak işaretine çevirdiğimizde hata oluştu.
Hız
Bu biçimlendirme stilinin uyarlanmasının nedeni hızıdır. F-string, sabit değerler yerine çalışma zamanında değerlendirme yapar. Minimal sözdizimi kullanarak ifadeyi dize değişmezlerinin içine yerleştirir. Hızlıdır çünkü sabit bir değer değil, çalışma zamanında değerlendirme yapar.
Aşağıdaki dize karşılaştırmasına bakalım.
Örnek 1:
import timeit print(timeit.timeit('''name = 'Sachin' age = 74 '%s is %s.' % (name, age)''', number = 10000))
Çıktı:
0.0022497819736599922
Örnek - 2:
import timeit print(timeit.timeit('''name = 'Mathew' age = 40 '{} is {}.'.format(name, age)''', number = 10000))
Çıktı:
0.0025783719611354172
Örnek - 3:
import timeit print(timeit.timeit('''name = 'Rockey' age = 74 f'{name} is {age}.'''', number = 10000))
Çıktı:
bir dizeyi tarihe dönüştürme
0.0019360429723747075
Gördüğümüz gibi f-string listenin başında yer alıyor.
ekleme sıralama algoritması
diş telleri
Kod içerisinde parantezlerin görünmesini sağlamak için çift tırnak işaretlerini aşağıdaki gibi kullanmalısınız. Aşağıdaki örneği anlayalım.
Örnek -
f'{{70 + 40}}'
Çıktı:
{70 + 40}
Eğer üçlü parantezleri kullanırsak, dizimizde tekli parantezleri gösterecektir. Aşağıdaki örneği anlayalım.
Örnek -
f'{{{90 + 4}}}'
Çıktı:
{94}
Üçlü parantezden daha fazlasını kullanırsak daha fazla parantezi görüntüleyebiliriz.
Örnek -
f'{{{{70 + 4}}}}'
Çıktı:
{{70 + 4}}
Ters eğik çizgiler
Bir f-dizgesinin dize kısmında ters eğik çizgi kaçışlarını kullanabiliriz. Ancak f-string'in ifade kısmında kaçış için ters eğik çizgi kullanamayız. Aşağıdaki örneği anlayalım.
Örnek -
f'{'Medric Pacalo'}' File '', line 1 f'{'Medric Pacalo'}'
Çıktı:
SyntaxError: f-string expression part cannot include a backslash
Satır içi yorumlar
İfadeye # sembolünü dahil edemiyoruz. Söz dizimi hatası verecektir. Aşağıdaki örneği anlayalım.
Örnek -
f'Tony is {10 * 73 #Hate this!}.' f'Tonyr is {2 * 37 #Hate this!}.'
Çıktı:
SyntaxError: f-string expression part cannot include '#'
Çözüm
Üç yöntemden herhangi birini kullanabiliriz ancak f-string yöntemi daha kısa, okunabilir ve kullanışlı bir yol sağlar. Daha hızlıdır ve hataya daha az eğilimlidir. Dizi dışı hemen hemen her olası senaryoyu ve programlamada bu yaklaşımın neden dikkate alınması gerektiğini açıkladık.