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.