logo

F-streng i Python

I denne øvelse lærer vi om strengformateringsmekanismen. F-strengen er den bedste måde at formatere strengen på. Strengens formateringsstil gør strengen mere læsbar, mere kortfattet og mindre tilbøjelig til at fejle. Den er også hurtigere end den anden.

Før vi dykker dybt ned i dette emne, vil vi først diskutere de teknikker, der blev brugt før f-strengen.

Gammel strengformatering i Python

Der er to hovedmåder til formatering af strengen: % - formatering og str.format(). Men begge metoder har nogle begrænsninger. Lad os få en kort introduktion af disse givne metoder.

1,% - formatering

Det er en traditionel måde at formatere strengen på, men dokumenterne anbefaler denne metode, som indeholder følgende sætning.

'De her beskrevne formateringsoperationer udviser en række særheder, der fører til flere almindelige fejl (såsom manglende visning af tupler og ordbøger korrekt).

Brug af de nyere formaterede strengliteraler eller str.format() interface hjælper med at undgå disse fejl.' - Officiel dokumentation .

Sådan bruger du % - formatering

Vi kan udføre indbygget drift ved hjælp af %-operatoren. Lad os forstå følgende eksempel.

np std
 student = 'Michel' 'Hello, %s.' % student 

Produktion:

 Hello Michel 

Vi kan også bruge tuple til at gemme de flere variable. Lad os se følgende eksempel.

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

Produktion:

 Hello Sharma You are 24. 

Hvorfor %-formatering ikke anbefales

For efterhånden som variablen øges og en længere streng, bliver vores kode meget mindre letlæselig. Koden ser rodet ud. Lad os se følgende eksempel.

Eksempel -

 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 ovenstående kode, blev koden svær at læse og mere udsat for fejlen. Det er derfor, denne måde at formatere streng på ikke er god.

2.str.format() metode

Det er en anden populær måde at formatere strengen introduceret i Python 2.6. Lad os se, hvordan vi kan bruge det.

Sådan bruges str.format()

Det er en forbedring af %-formatering. Det er som en normal indbygget funktion, der kaldes på objektet, og det objekt bliver konverteret til en streng.

Lad os se følgende eksempel.

Eksempel -

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

For at få adgang til ordbogselementet inde i formatmetoden kan vi sende nøglen 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 

Hvorfor anbefales str.format()-metoden ikke?

Str.format() er meget effektiv end %-format-metoden, men den kan stadig være ret omfattende, når vi beskæftiger os med de mange parametre.

F-strengs metode

Det er en ny strengformateringsmekanisme introduceret af PEP 498. Den er også kendt som Literal String Interpolation eller mere almindeligt som F-strenge (f-tegn foran strengen literal). Det primære fokus for denne mekanisme er at gøre interpolationen lettere.

Når vi præfikser strengen med bogstavet 'F, bliver strengen selve f-strengen. F-strengen kan formateres på samme måde som str.format() metode. F-strengen tilbyder en bekvem måde at indlejre Python-udtryk i streng-literals til formatering.

Eksempel -

 # 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 ovenstående kode har vi brugt f-strengen til at formatere strengen. Det evaluerer ved kørsel; vi kan sætte alle gyldige Python-udtryk i dem.

Vi kan bruge det i en enkelt erklæring.

 print(f'{2 * 30})' 

Produktion:

 60 

Vi kunne dog bruge i funktion.

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

Produktion:

 Sachin Tendulkar is great 

F-strengen kunne også bruges med klasseobjektet. Lad os forstå følgende eksempel.

Eksempel -

 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:

scanner næste
 Keenu Reevs's superhit movie is Matrix. 

Forklaring -

I ovenstående kode har vi brugt __str__() og __repr__(), der repræsenterer et objekt som en streng. Så vi skal inkludere mindst én af disse metoder i klassedefinitionen. F-strengen vil bruge metoden __str__(); vi kan også bruge __repr__() ved at inkludere konverteringsflaget ! r.

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

Produktion:

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

F-streng i ordbog

Vi skal passe på, mens vi arbejder med ordbogsnøgler inde i f-strengen. Der er et andet citat til at bruge ordbogsnøgler og f-streng. Lad os forstå følgende eksempel.

Eksempel -

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

Produktion:

 John is 19 years old. 

Nedenstående metode er ikke tilladt i tilfælde af ordbog.

Eksempel -

 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 ovenstående kode, ændrer vi et dobbelt citat til enkelte anførselstegn, og det har givet en fejl.

Fart

Grunden til at tilpasse denne formateringsstil er dens hastighed. F-strengen evalueres ved kørsel i stedet for konstante værdier. Det indlejrer udtryk i strengliteraler ved at bruge minimal syntaks. Det er hurtigt, fordi det evaluerer ved kørsel, ikke en konstant værdi.

Lad os se følgende strengsammenligning.

Eksempel - 1:

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

Produktion:

 0.0022497819736599922 

Eksempel - 2:

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

Produktion:

 0.0025783719611354172 

Eksempel - 3:

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

Produktion:

java system.out.println
 0.0019360429723747075 

Som vi kan se, er f-strengen øverst på listen.

Seler

For at få klammeparenteser til at se ud i koden, skal du bruge de dobbelte anførselstegn som følger. Lad os forstå følgende eksempel.

Eksempel -

 f'{{70 + 40}}' 

Produktion:

 {70 + 40} 

Hvis vi bruger de tredobbelte bøjler, vil den vise enkelte bøjler i vores streng. Lad os forstå følgende eksempel.

Eksempel -

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

Produktion:

 {94} 

Vi kan vise de flere seler, hvis vi bruger mere end tredobbelte seler.

Eksempel -

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

Produktion:

 {{70 + 4}} 

Omvendt skråstreg

Vi kan bruge backslash escapes i strengdelen af ​​en f-streng. Vi kan dog ikke bruge omvendte skråstreg til at undslippe i udtryksdelen af ​​en f-streng. Lad os forstå følgende eksempel.

Eksempel -

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

Produktion:

 SyntaxError: f-string expression part cannot include a backslash 

Inline kommentarer

Vi kan ikke inkludere #-symbolet i udtrykket. Det vil give en syntaksfejl. Lad os forstå følgende eksempel.

Eksempel -

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

Produktion:

java erstatte alt
 SyntaxError: f-string expression part cannot include '#' 

Konklusion

Vi kan bruge en hvilken som helst metode ud af tre, men f-streng-metoden giver en mere kortfattet, læsbar og bekvem måde. Det er hurtigere og mindre udsat for fejl. Vi har forklaret næsten alle mulige scenarier off-string, og hvorfor man bør overveje denne tilgang i programmering.