logo

F reťazec v Pythone

V tomto návode sa dozvieme o mechanizme formátovania reťazcov. F-string je najlepší spôsob formátovania reťazca. Vďaka štýlu formátovania reťazca je reťazec čitateľnejší, stručnejší a menej náchylný na chyby. Je tiež rýchlejší ako druhý.

Predtým, ako sa ponoríme hlboko do tejto témy, najprv rozoberieme techniky, ktoré sa používali pred strunou f.

Staré formátovanie reťazcov v Pythone

Existujú dva hlavné spôsoby formátovania reťazca: % - formátovanie a str.format(). Obe metódy však majú určité obmedzenia. Poďme si stručne predstaviť tieto dané metódy.

1,% - formátovanie

Je to tradičný spôsob formátovania reťazca, ale dokumenty odporúčajú túto metódu, ktorá obsahuje nasledujúce vyhlásenie.

„Operácie formátovania, ktoré sú tu opísané, vykazujú rôzne zvláštnosti, ktoré vedú k niekoľkým bežným chybám (napríklad nesprávnemu zobrazeniu n-tic a slovníkov).

Pomocou novších formátovaných reťazcových literálov alebo str.format() rozhranie pomáha vyhnúť sa týmto chybám.“ - Oficiálna dokumentácia .

Ako používať % - formátovanie

Zabudovanú operáciu môžeme vykonať pomocou operátora %. Poďme pochopiť nasledujúci príklad.

práca na počítači
 student = 'Michel' 'Hello, %s.' % student 

Výkon:

 Hello Michel 

N-ticu môžeme použiť aj na uloženie viacerých premenných. Pozrime sa na nasledujúci príklad.

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

Výkon:

 Hello Sharma You are 24. 

Prečo sa formátovanie % neodporúča

Pretože so zvyšovaním premennej a dlhším reťazcom sa náš kód stáva oveľa horšie čitateľným. Kód vyzerá chaoticky. Pozrime sa na nasledujúci príklad.

Príklad -

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

Výkon:

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

Ako môžeme vidieť vo vyššie uvedenom kóde, kód sa stal ťažko čitateľným a náchylnejším na chyby. Preto tento spôsob formátovania reťazca nie je dobrý.

2.str.format() metóda

Je to ďalší populárny spôsob formátovania reťazca zavedený v Pythone 2.6. Pozrime sa, ako to môžeme využiť.

Ako používať str.format()

Je to vylepšenie %-formátovania. Je to ako normálna vstavaná funkcia volaná na objekt a tento objekt sa konvertuje na reťazec.

Pozrime sa na nasledujúci príklad.

Príklad -

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

Na prístup k prvku slovníka v metóde format môžeme odovzdať kľúč v metóde format().

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

Výkon:

 Hello Peter, You are 17 

Prečo sa neodporúča metóda str.format()?

Str.format() je oveľa efektívnejšia ako metóda %-format, ale stále môže byť dosť podrobná, keď sa zaoberáme viacerými parametrami.

reťazec java indexof

Metóda F-string

Je to nový mechanizmus formátovania reťazcov, ktorý zaviedol PEP 498. Je tiež známy ako doslovná interpolácia reťazcov alebo bežnejšie ako F-reťazce (znak f pred reťazcovým literálom). Primárnym cieľom tohto mechanizmu je uľahčiť interpoláciu.

Keď reťazec predpíšeme písmenom 'F, reťazec sa stane samotným f-reťazcom. F-reťazec môže byť naformátovaný v podstate rovnako ako str.format() metóda. F-reťazec ponúka pohodlný spôsob, ako vložiť výraz Python do reťazcových literálov na formátovanie.

Príklad -

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

Výkon:

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

Vo vyššie uvedenom kóde sme použili f-reťazec na formátovanie reťazca. Vyhodnocuje sa za behu; môžeme do nich vložiť všetky platné výrazy Pythonu.

Môžeme ho použiť v jedinom príkaze.

 print(f'{2 * 30})' 

Výkon:

 60 

Mohli by sme však použiť vo funkcii.

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

Výkon:

 Sachin Tendulkar is great 

F-reťazec možno použiť aj s objektom triedy. Poďme pochopiť nasledujúci príklad.

Príklad -

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

Výkon:

 Keenu Reevs's superhit movie is Matrix. 

vysvetlenie -

Vo vyššie uvedenom kóde sme použili __str__() a __repr__(), ktoré predstavujú objekt ako reťazec. Preto musíme do definície triedy zahrnúť aspoň jednu z týchto metód. F-reťazec použije metódu __str__(); môžeme tiež použiť __repr__() zahrnutím príznaku konverzie! r.

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

Výkon:

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

F-string v Slovníku

Pri práci so slovníkovými kľúčmi vo vnútri f-reťazca musíme byť opatrní. Existuje iná cenová ponuka na použitie slovníkových kľúčov a f-reťazca. Poďme pochopiť nasledujúci príklad.

Príklad -

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

Výkon:

 John is 19 years old. 

Nižšie uvedená metóda nie je povolená v prípade slovníka.

Príklad -

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

Výkon:

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

Ako vidíme vo vyššie uvedenom kóde, zmenili sme dvojité úvodzovky na jednoduché úvodzovky a vyvolalo to chybu.

Rýchlosť

Dôvodom prispôsobenia tohto štýlu formátovania je jeho rýchlosť. F-reťazec sa vyhodnocuje skôr za behu ako konštantné hodnoty. Vkladá výraz do reťazcových literálov s použitím minimálnej syntaxe. Je rýchly, pretože sa vyhodnocuje za behu, nie konštantná hodnota.

Pozrime sa na nasledujúce porovnanie reťazcov.

Príklad – 1:

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

Výkon:

 0.0022497819736599922 

Príklad – 2:

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

Výkon:

 0.0025783719611354172 

Príklad – 3:

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

Výkon:

log4j
 0.0019360429723747075 

Ako môžeme pozorovať, f-string je na vrchole zoznamu.

Rovnátka

Aby sa v kóde objavili zložené zátvorky, mali by ste použiť dvojité úvodzovky nasledovne. Poďme pochopiť nasledujúci príklad.

Príklad -

 f'{{70 + 40}}' 

Výkon:

 {70 + 40} 

Ak použijeme trojité zátvorky, v našom reťazci sa zobrazia jednoduché zátvorky. Poďme pochopiť nasledujúci príklad.

Príklad -

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

Výkon:

 {94} 

Ak použijeme viac ako trojité rovnátka, môžeme zobraziť čím viac.

abstraktné metódy

Príklad -

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

Výkon:

 {{70 + 4}} 

Spätné lomky

Môžeme použiť spätné lomítko v reťazcovej časti f-stringu. Vo výrazovej časti f-string však nemôžeme použiť spätné lomky na únik. Poďme pochopiť nasledujúci príklad.

Príklad -

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

Výkon:

 SyntaxError: f-string expression part cannot include a backslash 

Vložené komentáre

Do výrazu nemôžeme zahrnúť symbol #. Vyvolá to chybu syntaxe. Poďme pochopiť nasledujúci príklad.

Príklad -

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

Výkon:

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

Záver

Môžeme použiť ktorúkoľvek z troch metód, ale metóda f-string poskytuje stručnejší, čitateľnejší a pohodlnejší spôsob. Je to rýchlejšie a menej náchylné na chyby. Vysvetlili sme takmer každý možný scenár mimo reťazca a prečo by sme mali zvážiť tento prístup pri programovaní.