logo

F String en Python

En aquest tutorial, aprendrem sobre el mecanisme de format de cadena. La cadena f és la millor manera de formatar la cadena. L'estil de format de la cadena fa que la cadena sigui més llegible, més concisa i menys propensa a errors. També és més ràpid que l'altre.

Abans d'aprofundir en aquest tema, primer parlarem de les tècniques que es van utilitzar abans de la cadena f.

Format de cadena antiga en Python

Hi ha dues maneres principals de formatar la cadena: % - format i str.format(). Però ambdós mètodes tenen algunes limitacions. Anem a fer una breu introducció d'aquests mètodes donats.

1.% - formatació

És una forma tradicional de formatar la cadena, però els documents recomanen aquest mètode, que conté la següent declaració.

'Les operacions de format que es descriuen aquí mostren una varietat de peculiaritats que donen lloc a diversos errors comuns (com ara no mostrar correctament les tuples i els diccionaris).

Utilitzant els literals de cadena amb format més recents o el str.format() la interfície ajuda a evitar aquests errors.' - Documentació oficial .

Com utilitzar el format % -

Podem realitzar una operació integrada mitjançant l'operador %. Entenem l'exemple següent.

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

Sortida:

 Hello Michel 

També podem utilitzar la tupla per emmagatzemar les múltiples variables. Vegem el següent exemple.

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

Sortida:

 Hello Sharma You are 24. 

Per què no es recomana el format %

Perquè a mesura que augmenta la variable i una cadena més llarga, el nostre codi es fa molt menys fàcil de llegir. El codi sembla desordenat. Vegem el següent exemple.

Exemple -

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

Sortida:

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

Com podem veure al codi anterior, el codi es va fer difícil de llegir i més propens a l'error. És per això que aquesta manera de formatar la cadena no és bona.

Mètode 2.str.format().

És una altra manera popular de formatar la cadena introduïda a Python 2.6. A veure com el podem utilitzar.

Com utilitzar str.format()

És una millora en el format %. És com una funció integrada normal cridada a l'objecte i aquest objecte es converteix en una cadena.

Vegem el següent exemple.

Exemple -

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

Per accedir a l'element del diccionari dins del mètode format, podem passar la clau al mètode format().

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

Sortida:

 Hello Peter, You are 17 

Per què no es recomana el mètode str.format()?

El str.format() és molt eficient que el mètode %-format, però encara pot ser bastant detallat quan tractem amb els paràmetres múltiples.

Mètode de la cadena F

És un nou mecanisme de format de cadenes introduït pel PEP 498. També es coneix com a interpolació literal de cadenes o més comunament com a cadenes F (caràcter f que precedeix el literal de cadena). L'objectiu principal d'aquest mecanisme és facilitar la interpolació.

Quan prefixem la cadena amb la lletra 'F, la cadena es converteix en la pròpia cadena f. La cadena f es pot formatar de la mateixa manera que la str.format() mètode. La cadena F ofereix una manera còmoda d'incrustar l'expressió Python dins de literals de cadena per al format.

Exemple -

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

Sortida:

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

Al codi anterior, hem utilitzat la cadena f per formatar la cadena. S'avalua en temps d'execució; podem posar-hi totes les expressions de Python vàlides.

El podem utilitzar en una sola declaració.

 print(f'{2 * 30})' 

Sortida:

 60 

Tanmateix, podríem utilitzar en funció.

camí establert en java
 def upercase(input): return input.uper() name = 'Sachin Tendulkar' f'{upercase(name)} is great.' 

Sortida:

 Sachin Tendulkar is great 

La cadena f també es pot utilitzar amb l'objecte de classe. Entenem l'exemple següent.

Exemple -

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

Sortida:

 Keenu Reevs's superhit movie is Matrix. 

Explicació -

Al codi anterior, hem utilitzat __str__() i __repr__(), que representen un objecte com una cadena. Per tant, hem d'incloure almenys un d'aquests mètodes a la definició de classe. La cadena f utilitzarà el mètode __str__(); també podem utilitzar el __repr__() incloent la bandera de conversió! r.

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

Sortida:

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

F-string al diccionari

Hem de tenir cura mentre treballem amb tecles de diccionari dins de la cadena f. Hi ha una cita diferent per utilitzar tecles de diccionari i cadena f. Entenem l'exemple següent.

Exemple -

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

Sortida:

 John is 19 years old. 

El mètode següent no està permès en el cas del diccionari.

Exemple -

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

Sortida:

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

Com podem veure al codi anterior, canviem una cometa doble per cometes simples i ha generat un error.

Velocitat

El motiu per adaptar aquest estil de format és la seva velocitat. La cadena f s'avalua en temps d'execució en lloc de valors constants. Incrusta l'expressió dins de literals de cadena, utilitzant una sintaxi mínima. És ràpid perquè s'avalua en temps d'execució, no un valor constant.

Vegem la següent comparació de cadenes.

Exemple - 1:

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

Sortida:

 0.0022497819736599922 

Exemple - 2:

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

Sortida:

 0.0025783719611354172 

Exemple - 3:

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

Sortida:

patró de disseny del mètode de fàbrica
 0.0019360429723747075 

Com podem observar, la cadena f està a la part superior de la llista.

Tirants

Per fer aparèixer claus al codi, hauríeu d'utilitzar les cometes dobles de la següent manera. Entenem l'exemple següent.

executa l'intèrpret d'ordres de l'script

Exemple -

 f'{{70 + 40}}' 

Sortida:

 {70 + 40} 

Si fem servir les claus triples, mostrarà claus simples a la nostra cadena. Entenem l'exemple següent.

Exemple -

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

Sortida:

 {94} 

Podem mostrar més claus si fem servir més de tres claus.

Exemple -

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

Sortida:

 {{70 + 4}} 

Barres invertides

Podem utilitzar les escapades de barra invertida a la part de cadena d'una cadena f. Tanmateix, no podem utilitzar barres invertides per escapar a la part d'expressió d'una cadena f. Entenem l'exemple següent.

Exemple -

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

Sortida:

 SyntaxError: f-string expression part cannot include a backslash 

Comentaris en línia

No podem incloure el símbol # a l'expressió. Llançarà un error de sintaxi. Entenem l'exemple següent.

Exemple -

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

Sortida:

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

Conclusió

Podem utilitzar qualsevol mètode de cada tres, però el mètode de cadena f proporciona una manera més concisa, llegible i còmoda. És més ràpid i menys propens a errors. Hem explicat gairebé tots els escenaris possibles fora de cadena i per què cal tenir en compte aquest enfocament a la programació.