logo

F String Pythonban

Ebben az oktatóanyagban megismerjük a karakterlánc formázási mechanizmusát. Az f-string a legjobb módja a karakterlánc formázásának. A karakterlánc formázási stílusa olvashatóbbá, tömörebbé és kevésbé tévedhetővé teszi a karakterláncot. Gyorsabb is, mint a másik.

Mielőtt mélyen belemerülnénk ebbe a témába, először megvitatjuk az f karakterlánc előtt használt technikákat.

Régi karakterlánc formázás a Pythonban

A karakterlánc formázásának két fő módja van: % - formázás és str.format(). De mindkét módszernek vannak bizonyos korlátai. Röviden bemutatjuk ezeket a megadott módszereket.

1.% - formázás

Ez egy hagyományos módja a karakterlánc formázásának, de a dokumentumok ezt a módszert ajánlják, amely a következő utasítást tartalmazza.

'Az itt leírt formázási műveletek számos furcsaságot mutatnak, amelyek számos gyakori hibához vezetnek (például a sorok és a szótárak nem megfelelő megjelenítéséhez).

Az újabb formázott karakterlánc-literálok vagy a str.format() felület segít elkerülni ezeket a hibákat.' - Hivatalos dokumentáció .

A % - formázás használata

A %-operátor segítségével beépített műveleteket végezhetünk. Értsük meg a következő példát.

25/100
 student = 'Michel' 'Hello, %s.' % student 

Kimenet:

 Hello Michel 

A tuple-t is használhatjuk a több változó tárolására. Lássuk a következő példát.

 name = 'Sharma' age = 24 'Hello, %s. You are %s.' % (name, age) 

Kimenet:

 Hello Sharma You are 24. 

Miért nem ajánlott a %-os formázás?

Mivel a változó növelésével és hosszabb karakterlánccal a kódunk sokkal kevésbé könnyen olvashatóvá válik. A kód rendetlennek tűnik. Lássuk a következő példát.

Példa -

 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)') 

Kimenet:

 Hello, Steve Rogers. Your age is 70. You are a Superhero. You were a member of Marvel. 

Amint a fenti kódban láthatjuk, a kód nehezen olvashatóvá vált, és hajlamosabb lett a hibára. Ezért nem jó a karakterlánc formázásának ez a módja.

2.str.format() metódus

Ez egy másik népszerű módja a Python 2.6-ban bevezetett karakterlánc formázásának. Lássuk, hogyan tudjuk használni.

Az str.format() használata

Ez a %-os formázás továbbfejlesztése. Ez olyan, mint egy normál beépített függvény, amelyet az objektumra hívnak, és az objektumot stringgé alakítják.

Lássuk a következő példát.

Példa -

 first_name = 'Mathew' last_name = 'Zukerburg' age = 45 print('Hello, {}. You are {}.'.format(name, age)') 

A format metóduson belüli szótárelem eléréséhez a kulcsot a format() metódusban adhatjuk át.

 person = {'name': 'Peter', 'age': 17} 'Hello, {name}. You are {age}.'.format(name=person['name'], age=person['age']) 

Kimenet:

 Hello Peter, You are 17 

Miért nem ajánlott az str.format() metódus?

Az str.format() sokkal hatékonyabb, mint a %-format metódus, de még mindig elég bőbeszédű lehet, ha több paraméterrel foglalkozunk.

F-string módszer

Ez egy új karakterlánc-formázó mechanizmus, amelyet a PEP 498 vezetett be. Literal String Interpolation néven vagy gyakrabban F-stringként is ismert. (f karakter a string literál előtt). Ennek a mechanizmusnak az elsődleges célja az interpoláció megkönnyítése.

Ha a karakterláncot az 'F betűvel írjuk elő, a karakterlánc maga lesz az f-karakterlánc. Az f karakterlánc ugyanúgy formázható, mint a str.format() módszer. Az F-karakterlánc kényelmes módot kínál a Python-kifejezés beágyazására karakterlánc-literálokba formázás céljából.

Példa -

 # 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.') 

Kimenet:

 Hello, My name is Tushar and I'm 28 years old. 

A fenti kódban az f-stringet használtuk a karakterlánc formázásához. Futás közben értékeli; az összes érvényes Python-kifejezést beletehetjük.

Egyetlen utasításban használhatjuk.

 print(f'{2 * 30})' 

Kimenet:

 60 

Használhatnánk azonban függvényben.

 def upercase(input): return input.uper() name = 'Sachin Tendulkar' f'{upercase(name)} is great.' 

Kimenet:

virtuális memória
 Sachin Tendulkar is great 

Az f-string az osztályobjektummal is használható. Értsük meg a következő példát.

Példa -

 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}') 

Kimenet:

 Keenu Reevs's superhit movie is Matrix. 

Magyarázat -

A fenti kódban a __str__() és __repr__() karakterláncot használtuk, amelyek egy objektumot karakterláncként ábrázolnak. Tehát legalább egy ilyen metódust bele kell foglalnunk az osztálydefinícióba. Az f-karakterlánc a __str__() metódust fogja használni; a __repr__()-t is használhatjuk a konverziós jelző beillesztésével! r.

 print(f'{ac}') print(f'{ac}'!r) 

Kimenet:

 Keenu Reevs's superhit movie is Matrix. Keenu Reevs Matrix Superhit 

F-string a szótárban

Vigyáznunk kell, amikor az f karakterláncon belüli szótárbillentyűkkel dolgozunk. A szótári kulcsok és az f-karakterlánc használatára más idézet vonatkozik. Értsük meg a következő példát.

Példa -

 detail = {'name': 'John', 'age': 19} print(f'{detail['name']} is {detail['age']} years old.') 

Kimenet:

 John is 19 years old. 

Az alábbi módszer szótár esetén nem megengedett.

Példa -

 detail = {'name': 'John', 'age': 19} print(f'{detail['name']} is {detail['age']} years old.') 

Kimenet:

 File '', line 2 print(f'{detail['name']} is {detail['age']} years old.') ^ SyntaxError: invalid syntax 

Amint a fenti kódban láthatjuk, a dupla idézetet egyszeres idézőjelre változtatjuk, és az hibát dobott.

Sebesség

A formázási stílus adaptálásának oka a gyorsaság. Az f-karakterlánc futásidőben értékeli ki az állandó értékek helyett. A kifejezést a karakterlánc-literálokba ágyazza, minimális szintaxist használva. Gyors, mert futás közben értékeli ki, nem állandó értéket.

Lássuk a következő karakterlánc-összehasonlítást.

Példa - 1:

 import timeit print(timeit.timeit('''name = 'Sachin' age = 74 '%s is %s.' % (name, age)''', number = 10000)) 

Kimenet:

 0.0022497819736599922 

Példa - 2:

 import timeit print(timeit.timeit('''name = 'Mathew' age = 40 '{} is {}.'.format(name, age)''', number = 10000)) 

Kimenet:

 0.0025783719611354172 

Példa - 3:

 import timeit print(timeit.timeit('''name = 'Rockey' age = 74 f'{name} is {age}.'''', number = 10000)) 

Kimenet:

python program bináris kereséshez
 0.0019360429723747075 

Amint láthatjuk, az f karakterlánc a lista tetején található.

Kapcsos zárójel

Ahhoz, hogy a kódban kapcsos zárójelek jelenjenek meg, használja az idézőjeleket az alábbiak szerint. Értsük meg a következő példát.

Példa -

 f'{{70 + 40}}' 

Kimenet:

 {70 + 40} 

Ha a hármas kapcsos zárójelet használjuk, akkor egyetlen kapcsos zárójelet jelenít meg a karakterláncunkban. Értsük meg a következő példát.

Példa -

 f'{{{90 + 4}}}' 

Kimenet:

 {94} 

A több fogszabályozót akkor tudjuk megjeleníteni, ha több mint hármas fogszabályzót használunk.

Példa -

 f'{{{{70 + 4}}}}' 

Kimenet:

 {{70 + 4}} 

Hátsó perjelek

Használhatjuk a backslash escape-ket egy f-string karakterlánc-részében. Az f karakterlánc kifejezési részében azonban nem használhatunk fordított perjelet a kilépéshez. Értsük meg a következő példát.

Példa -

 f'{'Medric Pacalo'}' File '', line 1 f'{'Medric Pacalo'}' 

Kimenet:

 SyntaxError: f-string expression part cannot include a backslash 

Soron belüli megjegyzések

A kifejezésben nem szerepeltethetjük a # szimbólumot. Szintaktikai hibát fog dobni. Értsük meg a következő példát.

konvertálás stringből int-be java-ban

Példa -

 f'Tony is {10 * 73 #Hate this!}.' f'Tonyr is {2 * 37 #Hate this!}.' 

Kimenet:

 SyntaxError: f-string expression part cannot include '#' 

Következtetés

A három közül bármelyik módszert használhatjuk, de az f-string módszer tömörebb, olvashatóbb és kényelmesebb módszert biztosít. Gyorsabb és kevésbé hibás. Szinte minden lehetséges forgatókönyvet elmagyaráztunk, és miért érdemes ezt a megközelítést figyelembe venni a programozás során.