logo

F-snaar in Python

In deze tutorial leren we over het tekenreeksformatteringsmechanisme. De f-string is de beste manier om de string op te maken. De opmaakstijl van de tekenreeks maakt de tekenreeks leesbaarder, beknopter en minder foutgevoelig. Het is ook sneller dan de andere.

Voordat we diep op dit onderwerp ingaan, zullen we eerst de technieken bespreken die vóór de f-snaar werden gebruikt.

Oude tekenreeksopmaak in Python

Er zijn twee manieren om de tekenreeks op te maken: % - opmaak en str.format(). Maar beide methoden hebben enkele beperkingen. Laten we een korte introductie geven van deze gegeven methoden.

1.% - opmaak

Het is een traditionele manier om de tekenreeks op te maken, maar de documentatie beveelt deze methode aan, die de volgende verklaring bevat.

'De hier beschreven opmaakbewerkingen vertonen een verscheidenheid aan eigenaardigheden die tot verschillende veelvoorkomende fouten leiden (zoals het niet correct weergeven van tupels en woordenboeken).

Met behulp van de nieuwere geformatteerde letterlijke tekenreeksen of de str.format() interface helpt deze fouten te voorkomen.' - Officiële documentatie .

Hoe % - opmaak te gebruiken

We kunnen een ingebouwde bewerking uitvoeren met behulp van de %-operator. Laten we het volgende voorbeeld begrijpen.

java localdatetime
 student = 'Michel' 'Hello, %s.' % student 

Uitgang:

 Hello Michel 

We kunnen de tuple ook gebruiken om de meerdere variabelen op te slaan. Laten we het volgende voorbeeld bekijken.

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

Uitgang:

 Hello Sharma You are 24. 

Waarom %-opmaak niet wordt aanbevolen

Omdat naarmate de variabele wordt vergroot en een langere reeks wordt gebruikt, onze code veel minder gemakkelijk leesbaar wordt. De code ziet er rommelig uit. Laten we het volgende voorbeeld bekijken.

Voorbeeld -

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

Uitgang:

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

Zoals we in de bovenstaande code kunnen zien, werd de code moeilijk leesbaar en gevoeliger voor fouten. Daarom is deze manier om tekenreeksen op te maken niet goed.

2.str.format() methode

Het is een andere populaire manier om de string te formatteren die in Python 2.6 is geïntroduceerd. Laten we kijken hoe we het kunnen gebruiken.

Hoe str.format() te gebruiken

Het is een verbetering ten opzichte van de %-opmaak. Het is als een normale ingebouwde functie die op het object wordt aangeroepen en dat object wordt geconverteerd naar een string.

Laten we het volgende voorbeeld bekijken.

Voorbeeld -

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

Om toegang te krijgen tot het woordenboekelement binnen de format-methode, kunnen we de sleutel doorgeven in de format()-methode.

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

Uitgang:

 Hello Peter, You are 17 

Waarom wordt de methode str.format() niet aanbevolen?

De str.format() is veel efficiënter dan de %-format methode, maar kan nog steeds behoorlijk uitgebreid zijn als we met de meerdere parameters omgaan.

F-snaarmethode

Het is een nieuw tekenreeksformatteringsmechanisme geïntroduceerd door de PEP 498. Het staat ook bekend als Letterlijke String Interpolatie of beter bekend als F-strings (f-teken dat voorafgaat aan de letterlijke tekenreeks). De primaire focus van dit mechanisme is om de interpolatie eenvoudiger te maken.

Wanneer we de string vooraf laten gaan door de letter 'F', wordt de string de f-string zelf. De f-string kan op vrijwel dezelfde manier worden geformatteerd als de str.format() methode. De F-string biedt een handige manier om Python-expressie in te sluiten in letterlijke tekenreeksen voor opmaak.

Voorbeeld -

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

Uitgang:

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

In de bovenstaande code hebben we de f-string gebruikt om de string op te maken. Het evalueert tijdens runtime; we kunnen alle geldige Python-expressies erin plaatsen.

osi-referentiemodel in netwerken

We kunnen het in één enkele verklaring gebruiken.

 print(f'{2 * 30})' 

Uitgang:

 60 

We zouden het echter in functie kunnen gebruiken.

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

Uitgang:

 Sachin Tendulkar is great 

De f-string kan ook worden gebruikt met het klasseobject. Laten we het volgende voorbeeld begrijpen.

Voorbeeld -

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

Uitgang:

 Keenu Reevs's superhit movie is Matrix. 

Uitleg -

In de bovenstaande code hebben we de __str__() en __repr__() gebruikt, die een object als een string voorstellen. We moeten dus ten minste één van deze methoden in de klassendefinitie opnemen. De f-string gebruikt de methode __str__(); we kunnen ook de __repr__() gebruiken door de conversievlag op te nemen! R.

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

Uitgang:

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

F-snaar in woordenboek

We moeten voorzichtig zijn bij het werken met woordenboektoetsen binnen de f-string. Er is een ander citaat om woordenboeksleutels en f-string te gebruiken. Laten we het volgende voorbeeld begrijpen.

Voorbeeld -

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

Uitgang:

 John is 19 years old. 

Onderstaande methode is niet toegestaan ​​in het geval van een woordenboek.

Voorbeeld -

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

Uitgang:

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

Zoals we in de bovenstaande code kunnen zien, veranderen we dubbele aanhalingstekens in enkele aanhalingstekens, en er treedt een fout op.

Snelheid

De reden voor het aanpassen van deze opmaakstijl is de snelheid. De f-string evalueert tijdens runtime in plaats van constante waarden. Het integreert expressie in letterlijke tekenreeksen, met behulp van minimale syntaxis. Het is snel omdat het tijdens runtime evalueert, en niet een constante waarde.

Laten we de volgende tekenreeksvergelijking bekijken.

Voorbeeld 1:

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

Uitgang:

 0.0022497819736599922 

Voorbeeld - 2:

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

Uitgang:

 0.0025783719611354172 

Voorbeeld - 3:

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

Uitgang:

modem versus router
 0.0019360429723747075 

Zoals we kunnen zien, staat de f-snaar bovenaan de lijst.

Beugel

Om accolades in de code te laten verschijnen, moet u de dubbele aanhalingstekens als volgt gebruiken. Laten we het volgende voorbeeld begrijpen.

Voorbeeld -

 f'{{70 + 40}}' 

Uitgang:

 {70 + 40} 

Als we de drievoudige accolades gebruiken, worden er enkele accolades in onze string weergegeven. Laten we het volgende voorbeeld begrijpen.

Voorbeeld -

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

Uitgang:

 {94} 

We kunnen het aantal accolades weergeven als we meer dan drievoudige accolades gebruiken.

Voorbeeld -

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

Uitgang:

 {{70 + 4}} 

Backslashes

We kunnen de backslash-escapes gebruiken in het stringgedeelte van een f-snaar. We kunnen echter geen backslashes gebruiken om te ontsnappen in het expressiegedeelte van een f-string. Laten we het volgende voorbeeld begrijpen.

Voorbeeld -

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

Uitgang:

 SyntaxError: f-string expression part cannot include a backslash 

Inline-opmerkingen

We kunnen het #-symbool niet in de expressie opnemen. Er wordt een syntaxisfout gegenereerd. Laten we het volgende voorbeeld begrijpen.

Voorbeeld -

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

Uitgang:

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

Conclusie

We kunnen elke van de drie methoden gebruiken, maar de f-string-methode biedt een beknoptere, leesbare en handigere manier. Het is sneller en minder foutgevoelig. We hebben bijna elk mogelijk scenario off-string uitgelegd en waarom je deze aanpak bij het programmeren zou moeten overwegen.

Java-schakelaar