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í.