I denne opplæringen vil vi lære om strengformateringsmekanismen. F-strengen er den beste måten å formatere strengen på. Strengens formateringsstil gjør strengen mer lesbar, mer konsis og mindre utsatt for feil. Den er også raskere enn den andre.
Før vi dykker dypt inn i dette emnet, vil vi først diskutere teknikkene som ble brukt før f-strengen.
Gammel strengformatering i Python
Det er to hovedmåter for formatering av strengen: % - formatering og str.format(). Men begge metodene har noen begrensninger. La oss ha en kort introduksjon av disse gitte metodene.
1,% - formatering
Det er en tradisjonell måte å formatere strengen på, men dokumentene anbefaler denne metoden, som inneholder følgende setning.
'Formateringsoperasjonene som er beskrevet her viser en rekke særheter som fører til flere vanlige feil (som svikt i å vise tupler og ordbøker riktig).
Bruke de nyere formaterte strengliteralene eller str.format() grensesnittet hjelper til med å unngå disse feilene.' - Offisiell dokumentasjon .
Hvordan bruke % - formatering
Vi kan utføre innebygd drift ved å bruke %-operatoren. La oss forstå følgende eksempel.
string tokenizer java
student = 'Michel' 'Hello, %s.' % student
Produksjon:
Hello Michel
Vi kan også bruke tuppelen til å lagre de flere variablene. La oss se følgende eksempel.
name = 'Sharma' age = 24 'Hello, %s. You are %s.' % (name, age)
Produksjon:
Hello Sharma You are 24.
Hvorfor %-formatering ikke anbefales
Fordi ettersom variabelen økes og en lengre streng, blir koden vår mye mindre lettleselig. Koden ser rotete ut. La oss 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)')
Produksjon:
Hello, Steve Rogers. Your age is 70. You are a Superhero. You were a member of Marvel.
Som vi kan se i koden ovenfor, ble koden vanskelig å lese og mer utsatt for feilen. Det er derfor denne måten å formatere streng på ikke er bra.
2.str.format()-metoden
Det er en annen populær måte å formatere strengen introdusert i Python 2.6. La oss se hvordan vi kan bruke det.
Hvordan bruke str.format()
Det er en forbedring av %-formatering. Det er som en vanlig innebygd funksjon som kalles på objektet og at objektet blir konvertert til en streng.
La oss se følgende eksempel.
Eksempel -
first_name = 'Mathew' last_name = 'Zukerburg' age = 45 print('Hello, {}. You are {}.'.format(name, age)')
For å få tilgang til ordbokelementet i formatmetoden, kan vi sende nøkkelen i format()-metoden.
person = {'name': 'Peter', 'age': 17} 'Hello, {name}. You are {age}.'.format(name=person['name'], age=person['age'])
Produksjon:
Hello Peter, You are 17
Hvorfor anbefales ikke str.format()-metoden?
Str.format() er mye effektiv enn %-format-metoden, men den kan fortsatt være ganske detaljert når vi arbeider med flere parametere.
F-streng metode
Det er en ny strengformateringsmekanisme introdusert av PEP 498. Den er også kjent som Literal String Interpolation eller mer vanlig som F-strenger (f-tegn foran strengen bokstavelig). Hovedfokuset for denne mekanismen er å gjøre interpoleringen enklere.
Når vi prefikser strengen med bokstaven 'F, blir strengen selve f-strengen. F-strengen kan formateres på omtrent samme måte som str.format() metode. F-strengen tilbyr en praktisk måte å bygge inn Python-uttrykk i strengliteraler for 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.')
Produksjon:
Hello, My name is Tushar and I'm 28 years old.
I koden ovenfor har vi brukt f-strengen for å formatere strengen. Den evaluerer ved kjøretid; vi kan legge inn alle gyldige Python-uttrykk i dem.
Vi kan bruke det i en enkelt uttalelse.
print(f'{2 * 30})'
Produksjon:
60
Imidlertid kunne vi bruke i funksjon.
def upercase(input): return input.uper() name = 'Sachin Tendulkar' f'{upercase(name)} is great.'
Produksjon:
Sachin Tendulkar is great
F-strengen kan også brukes med klasseobjektet. La oss 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}')
Produksjon:
dfa eksempler
Keenu Reevs's superhit movie is Matrix.
Forklaring -
I koden ovenfor har vi brukt __str__() og __repr__(), som representerer et objekt som en streng. Så vi må inkludere minst én av disse metodene i klassedefinisjonen. F-strengen vil bruke __str__() metoden; vi kan også bruke __repr__() ved å inkludere konverteringsflagget ! r.
print(f'{ac}') print(f'{ac}'!r)
Produksjon:
Keenu Reevs's superhit movie is Matrix. Keenu Reevs Matrix Superhit
F-streng i ordbok
Vi må passe på når vi jobber med ordboknøkler inne i f-strengen. Det er et annet sitat for å bruke ordboknøkler og f-streng. La oss forstå følgende eksempel.
Eksempel -
detail = {'name': 'John', 'age': 19} print(f'{detail['name']} is {detail['age']} years old.')
Produksjon:
John is 19 years old.
Metoden nedenfor er ikke tillatt i tilfelle av ordbok.
Eksempel -
detail = {'name': 'John', 'age': 19} print(f'{detail['name']} is {detail['age']} years old.')
Produksjon:
File '', line 2 print(f'{detail['name']} is {detail['age']} years old.') ^ SyntaxError: invalid syntax
Som vi kan se i koden ovenfor, endrer vi et dobbelt sitat til enkle anførselstegn, og det har gitt en feil.
Hastighet
Grunnen til å tilpasse denne formateringsstilen er hastigheten. F-strengen evalueres ved kjøretid i stedet for konstante verdier. Den legger inn uttrykk i strengliteraler, ved å bruke minimal syntaks. Det er raskt fordi det evalueres ved kjøretid, ikke en konstant verdi.
La oss se følgende strengsammenligning.
Eksempel - 1:
import timeit print(timeit.timeit('''name = 'Sachin' age = 74 '%s is %s.' % (name, age)''', number = 10000))
Produksjon:
0.0022497819736599922
Eksempel - 2:
import timeit print(timeit.timeit('''name = 'Mathew' age = 40 '{} is {}.'.format(name, age)''', number = 10000))
Produksjon:
0.0025783719611354172
Eksempel - 3:
import timeit print(timeit.timeit('''name = 'Rockey' age = 74 f'{name} is {age}.'''', number = 10000))
Produksjon:
sammenknytte java-strenger
0.0019360429723747075
Som vi kan observere, er f-strengen på toppen av listen.
Seler
For å få klammeparenteser i koden, bør du bruke de doble anførselstegnene som følger. La oss forstå følgende eksempel.
Eksempel -
f'{{70 + 40}}'
Produksjon:
{70 + 40}
Hvis vi bruker trippel bukseseler, vil det vise enkle bukseseler i strengen vår. La oss forstå følgende eksempel.
Eksempel -
f'{{{90 + 4}}}'
Produksjon:
{94}
Vi kan vise flere tannregulering hvis vi bruker mer enn trippel tannregulering.
Eksempel -
f'{{{{70 + 4}}}}'
Produksjon:
{{70 + 4}}
Omvendt skråstrek
Vi kan bruke omvendt skråstrek i strengdelen av en f-streng. Vi kan imidlertid ikke bruke omvendte skråstreker for å unnslippe i uttrykksdelen av en f-streng. La oss forstå følgende eksempel.
Eksempel -
f'{'Medric Pacalo'}' File '', line 1 f'{'Medric Pacalo'}'
Produksjon:
SyntaxError: f-string expression part cannot include a backslash
Innebygde kommentarer
Vi kan ikke inkludere #-symbolet i uttrykket. Det vil gi en syntaksfeil. La oss forstå følgende eksempel.
Eksempel -
f'Tony is {10 * 73 #Hate this!}.' f'Tonyr is {2 * 37 #Hate this!}.'
Produksjon:
offentlig vs privat java
SyntaxError: f-string expression part cannot include '#'
Konklusjon
Vi kan bruke en metode av tre, men f-strengmetoden gir en mer kortfattet, lesbar og praktisk måte. Det er raskere og mindre utsatt for feil. Vi har forklart nesten alle mulige scenarier off-string og hvorfor man bør vurdere denne tilnærmingen i programmering.