logo

F řetězec v Pythonu

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.