logo

F String i Python

I den här handledningen kommer vi att lära oss om strängformateringsmekanismen. F-strängen är det bästa sättet att formatera strängen. Strängens formateringsstil gör strängen mer läsbar, mer koncis och mindre benägen för fel. Den är också snabbare än den andra.

Innan vi dyker djupt in i detta ämne kommer vi först att diskutera teknikerna som användes innan f-strängen.

Gammal strängformatering i Python

Det finns två huvudsakliga sätt att formatera strängen: % - formatering och str.format(). Men båda metoderna har vissa begränsningar. Låt oss ha en kort introduktion av dessa givna metoder.

1,% - formatering

Det är ett traditionellt sätt att formatera strängen, men dokumenten rekommenderar denna metod, som innehåller följande uttalande.

'Formateringsoperationerna som beskrivs här uppvisar en mängd egenheter som leder till flera vanliga fel (som att misslyckas med att visa tupler och ordböcker korrekt).

Använda de nyare formaterade strängliteralerna eller str.format() gränssnittet hjälper till att undvika dessa fel.' - Officiell dokumentation .

Hur man använder % - formatering

Vi kan utföra inbyggd drift med %-operatorn. Låt oss förstå följande exempel.

xor cpp
 student = 'Michel' 'Hello, %s.' % student 

Produktion:

 Hello Michel 

Vi kan också använda tupeln för att lagra de multipla variablerna. Låt oss se följande exempel.

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

Produktion:

 Hello Sharma You are 24. 

Varför %-formatering rekommenderas inte

Eftersom variabeln ökas och en längre sträng blir vår kod mycket mindre lättläst. Koden ser rörig ut. Låt oss se följande exempel.

Exempel -

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

Produktion:

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

Som vi kan se i ovanstående kod blev koden svår att läsa och mer utsatt för felet. Det är därför det här sättet att formatera strängar inte är bra.

2.str.format() metod

Det är ett annat populärt sätt att formatera strängen som introducerades i Python 2.6. Låt oss se hur vi kan använda det.

Hur man använder str.format()

Det är en förbättring av %-formatering. Det är som en vanlig inbyggd funktion som anropas på objektet och att objektet konverteras till en sträng.

Låt oss se följande exempel.

Exempel -

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

För att komma åt ordbokselementet i formatmetoden kan vi skicka nyckeln i format()-metoden.

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

Produktion:

 Hello Peter, You are 17 

Varför rekommenderas inte metoden str.format()?

Str.format() är mycket effektiv än metoden %-format men den kan fortfarande vara ganska utförlig när vi hanterar flera parametrar.

F-strängsmetod

Det är en ny strängformateringsmekanism som introducerades av PEP 498. Den är också känd som Literal String Interpolation eller mer allmänt som F-strängar (f-tecken före strängen literal). Det primära fokus för denna mekanism är att göra interpoleringen lättare.

När vi prefixar strängen med bokstaven 'F, blir strängen själva f-strängen. F-strängen kan formateras på ungefär samma sätt som str.format() metod. F-strängen erbjuder ett bekvämt sätt att bädda in Python-uttryck i strängliteraler för formatering.

Exempel -

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

Produktion:

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

I ovanstående kod har vi använt f-strängen för att formatera strängen. Den utvärderar vid körning; vi kan lägga in alla giltiga Python-uttryck i dem.

Vi kan använda det i ett enda uttalande.

 print(f'{2 * 30})' 

Produktion:

 60 

Men vi skulle kunna använda i funktion.

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

Produktion:

 Sachin Tendulkar is great 

F-strängen kan också användas med klassobjektet. Låt oss förstå följande exempel.

Exempel -

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

Produktion:

 Keenu Reevs's superhit movie is Matrix. 

Förklaring -

I ovanstående kod har vi använt __str__() och __repr__(), som representerar ett objekt som en sträng. Så vi måste inkludera minst en av dessa metoder i klassdefinitionen. F-strängen kommer att använda metoden __str__(); vi kan också använda __repr__() genom att inkludera konverteringsflaggan ! r.

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

Produktion:

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

F-sträng i ordbok

Vi måste vara försiktiga när vi arbetar med ordboksnycklar inuti f-strängen. Det finns ett annat citat för att använda ordboksnycklar och f-sträng. Låt oss förstå följande exempel.

Exempel -

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

Produktion:

 John is 19 years old. 

Nedanstående metod är inte tillåten för ordbok.

Exempel -

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

Produktion:

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

Som vi kan se i ovanstående kod ändrar vi ett dubbelcitat till enkla citattecken, och det har orsakat ett fel.

Fart

Anledningen till att anpassa denna formateringsstil är dess hastighet. F-strängen utvärderas vid körning snarare än konstanta värden. Det bäddar in uttryck i strängliteraler, med minimal syntax. Det är snabbt eftersom det utvärderas vid körning, inte ett konstant värde.

Låt oss se följande strängjämförelse.

Exempel - 1:

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

Produktion:

 0.0022497819736599922 

Exempel - 2:

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

Produktion:

 0.0025783719611354172 

Exempel - 3:

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

Produktion:

enum tostring java
 0.0019360429723747075 

Som vi kan observera är f-strängen högst upp på listan.

Tandställning

För att få klammerparenteser i koden bör du använda dubbla citattecken enligt följande. Låt oss förstå följande exempel.

Exempel -

 f'{{70 + 40}}' 

Produktion:

 {70 + 40} 

Om vi ​​använder trippelhängslen kommer det att visa enkla hängslen i vår sträng. Låt oss förstå följande exempel.

Exempel -

vackraste leendet
 f'{{{90 + 4}}}' 

Produktion:

 {94} 

Vi kan visa fler hängslen om vi använder mer än tre hängslen.

Exempel -

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

Produktion:

 {{70 + 4}} 

Omvända snedstreck

Vi kan använda backslash escapes i strängdelen av en f-sträng. Vi kan dock inte använda omvända snedstreck för att escape i uttrycksdelen av en f-sträng. Låt oss förstå följande exempel.

Exempel -

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

Produktion:

 SyntaxError: f-string expression part cannot include a backslash 

Inline-kommentarer

Vi kan inte inkludera #-symbolen i uttrycket. Det kommer att ge ett syntaxfel. Låt oss förstå följande exempel.

Exempel -

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

Produktion:

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

Slutsats

Vi kan använda vilken metod som helst av tre, men f-strängsmetoden ger ett mer kortfattat, läsbart och bekvämt sätt. Det är snabbare och mindre benäget att göra fel. Vi har förklarat nästan alla möjliga scenarier utanför strängen och varför man bör överväga detta tillvägagångssätt i programmering.