V tomto tutoriálu se seznámíme s mechanismem formátování řetězců. F-string je nejlepší způsob formátování řetězce. Styl formátování řetězce činí řetězec čitelnějším, stručnějším a méně náchylným k chybám. Je také rychlejší než druhý.
Než se ponoříme hlouběji do tohoto tématu, nejprve probereme techniky, které byly používány před strunou f.
Staré formátování řetězců v Pythonu
Existují dva hlavní způsoby formátování řetězce: % - formátování a str.format(). Ale obě metody mají určitá omezení. Pojďme si tyto uvedené metody krátce představit.
1,% - formátování
Je to tradiční způsob formátování řetězce, ale dokumenty doporučují tento způsob, který obsahuje následující prohlášení.
'Operace formátování zde popsané vykazují různé zvláštnosti, které vedou k několika běžným chybám (jako je nesprávné zobrazení n-tic a slovníků).
Pomocí novějších formátovaných řetězcových literálů nebo str.format() rozhraní pomáhá vyhnout se těmto chybám.' - Oficiální dokumentace .
Jak používat % - formátování
Vestavěnou operaci můžeme provést pomocí operátoru %. Pojďme pochopit následující příklad.
rozdíl data excelu
student = 'Michel' 'Hello, %s.' % student
Výstup:
Hello Michel
Můžeme také použít n-tici k uložení více proměnných. Podívejme se na následující příklad.
name = 'Sharma' age = 24 'Hello, %s. You are %s.' % (name, age)
Výstup:
Hello Sharma You are 24.
Proč se nedoporučuje %-formátování
Protože se zvětšováním proměnné a delším řetězcem se náš kód stává mnohem hůře čitelným. Kód vypadá zmateně. Podívejme se na následující příklad.
Pří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ýstup:
Hello, Steve Rogers. Your age is 70. You are a Superhero. You were a member of Marvel.
Jak můžeme vidět ve výše uvedeném kódu, kód se stal obtížně čitelným a náchylnějším k chybám. Proto tento způsob formátování řetězce není dobrý.
Metoda 2.str.format().
Je to další oblíbený způsob formátování řetězce představený v Pythonu 2.6. Pojďme se podívat, jak to můžeme využít.
Jak používat str.format()
Je to vylepšení formátování v %. Je to jako normální vestavěná funkce volaná na objekt a tento objekt převáděný na řetězec.
Podívejme se na následující příklad.
Příklad -
first_name = 'Mathew' last_name = 'Zukerburg' age = 45 print('Hello, {}. You are {}.'.format(name, age)')
Pro přístup k prvku slovníku uvnitř metody format můžeme předat klíč v metodě format().
person = {'name': 'Peter', 'age': 17} 'Hello, {name}. You are {age}.'.format(name=person['name'], age=person['age'])
Výstup:
Hello Peter, You are 17
Proč se metoda str.format() nedoporučuje?
Str.format() je mnohem účinnější než metoda %-format, ale stále může být docela upovídaná, když se zabýváme více parametry.
Metoda F-string
Je to nový mechanismus formátování řetězců zavedený PEP 498. Je také známý jako doslovná interpolace řetězců nebo běžněji jako F-řetězce (znak f před řetězcovým literálem). Primárním cílem tohoto mechanismu je usnadnit interpolaci.
Když před řetězec přidáme písmeno 'F, řetězec se stane samotným f-řetězcem. F-string může být naformátován v podstatě stejně jako str.format() metoda. F-string nabízí pohodlný způsob, jak vložit výraz Python do řetězcových literálů pro formátování.
Pří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ýstup:
Hello, My name is Tushar and I'm 28 years old.
Ve výše uvedeném kódu jsme použili f-string k formátování řetězce. Vyhodnocuje se za běhu; můžeme do nich vložit všechny platné výrazy Pythonu.
Můžeme to použít v jediném příkazu.
print(f'{2 * 30})'
Výstup:
60
Mohli bychom však použít ve funkci.
def upercase(input): return input.uper() name = 'Sachin Tendulkar' f'{upercase(name)} is great.'
Výstup:
Sachin Tendulkar is great
F-string lze také použít s objektem třídy. Pojďme pochopit následující příklad.
Pří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ýstup:
Keenu Reevs's superhit movie is Matrix.
Vysvětlení -
Hru holub pro android
Ve výše uvedeném kódu jsme použili __str__() a __repr__(), které představují objekt jako řetězec. Musíme tedy do definice třídy zahrnout alespoň jednu z těchto metod. F-řetězec použije metodu __str__(); můžeme také použít __repr__() zahrnutím příznaku konverze ! r.
print(f'{ac}') print(f'{ac}'!r)
Výstup:
Keenu Reevs's superhit movie is Matrix. Keenu Reevs Matrix Superhit
F-string ve slovníku
Při práci se slovníkovými klíči uvnitř f-řetězce musíme být opatrní. Pro použití slovníkových klíčů a f-řetězce existuje jiná citace. Pojďme pochopit následující příklad.
Příklad -
detail = {'name': 'John', 'age': 19} print(f'{detail['name']} is {detail['age']} years old.')
Výstup:
John is 19 years old.
Níže uvedená metoda není povolena v případě slovníku.
Příklad -
detail = {'name': 'John', 'age': 19} print(f'{detail['name']} is {detail['age']} years old.')
Výstup:
File '', line 2 print(f'{detail['name']} is {detail['age']} years old.') ^ SyntaxError: invalid syntax
Jak vidíme ve výše uvedeném kódu, změnili jsme dvojitou uvozovku na jednoduché uvozovky a vyvolalo to chybu.
Rychlost
Důvodem přizpůsobení tohoto stylu formátování je jeho rychlost. F-řetězec se vyhodnocuje spíše za běhu než konstantní hodnoty. Vkládá výraz do řetězcových literálů s použitím minimální syntaxe. Je rychlý, protože vyhodnocuje za běhu, nikoli konstantní hodnotu.
Podívejme se na následující srovnání řetězců.
Příklad – 1:
import timeit print(timeit.timeit('''name = 'Sachin' age = 74 '%s is %s.' % (name, age)''', number = 10000))
Výstup:
0.0022497819736599922
Příklad – 2:
import timeit print(timeit.timeit('''name = 'Mathew' age = 40 '{} is {}.'.format(name, age)''', number = 10000))
Výstup:
0.0025783719611354172
Příklad – 3:
import timeit print(timeit.timeit('''name = 'Rockey' age = 74 f'{name} is {age}.'''', number = 10000))
Výstup:
applet applet
0.0019360429723747075
Jak můžeme pozorovat, f-string je na vrcholu seznamu.
Rovnátka
Aby se v kódu objevily složené závorky, měli byste použít dvojité uvozovky následovně. Pojďme pochopit následující příklad.
Příklad -
f'{{70 + 40}}'
Výstup:
{70 + 40}
Pokud použijeme trojité závorky, zobrazí se v našem řetězci jednoduché závorky. Pojďme pochopit následující příklad.
Příklad -
f'{{{90 + 4}}}'
Výstup:
{94}
Pokud použijeme více než trojitých rovnátek, můžeme zobrazit více rovnátek.
Příklad -
f'{{{{70 + 4}}}}'
Výstup:
{{70 + 4}}
Zpětná lomítka
V řetězcové části f-řetězce můžeme použít zpětné lomítko. Nemůžeme však použít zpětná lomítka k úniku ve výrazové části f-string. Pojďme pochopit následující příklad.
jak aktualizovat v Javě
Příklad -
f'{'Medric Pacalo'}' File '', line 1 f'{'Medric Pacalo'}'
Výstup:
SyntaxError: f-string expression part cannot include a backslash
Inline komentáře
Do výrazu nemůžeme zahrnout symbol #. Vyvolá to chybu syntaxe. Pojďme pochopit následující příklad.
Příklad -
f'Tony is {10 * 73 #Hate this!}.' f'Tonyr is {2 * 37 #Hate this!}.'
Výstup:
SyntaxError: f-string expression part cannot include '#'
Závěr
Můžeme použít jednu ze tří metod, ale metoda f-string poskytuje stručnější, čitelnější a pohodlnější způsob. Je rychlejší a méně náchylný k chybám. Vysvětlili jsme téměř každý možný scénář mimo řetězec a proč bychom měli tento přístup při programování zvážit.