logo

Șirul F în Python

În acest tutorial, vom afla despre mecanismul de formatare a șirurilor. F-string este cea mai bună modalitate de a formata șirul. Stilul de formatare al șirului face șirul mai lizibil, mai concis și mai puțin predispus la erori. De asemenea, este mai rapid decât celălalt.

Înainte de a aprofunda acest subiect, vom discuta mai întâi despre tehnicile folosite înainte de șirul f.

Formatare veche a șirurilor în Python

Există două moduri principale de formatare a șirului: % - formatare și str.format(). Dar ambele metode au unele limitări. Să facem o scurtă introducere a acestor metode date.

1.% - formatare

Este o modalitate tradițională de formatare a șirului, dar documentele recomandă această metodă, care conține următoarea declarație.

„Operațiunile de formatare descrise aici prezintă o varietate de ciudatenii care duc la mai multe erori comune (cum ar fi neafișarea corectă a tuplurilor și a dicționarelor).

Folosind literalele șir formatate mai noi sau str.format() interfața ajută la evitarea acestor erori.' - Documentatie oficiala .

Cum se utilizează formatarea %

Putem efectua operații încorporate folosind operatorul %. Să înțelegem următorul exemplu.

decodați javascript base64
 student = 'Michel' 'Hello, %s.' % student 

Ieșire:

 Hello Michel 

De asemenea, putem folosi tuplu pentru a stoca mai multe variabile. Să vedem următorul exemplu.

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

Ieșire:

 Hello Sharma You are 24. 

De ce nu este recomandată formatarea %

Pentru că pe măsură ce variabila crește și un șir mai lung, codul nostru devine mult mai puțin ușor de citit. Codul pare dezordonat. Să vedem următorul exemplu.

Exemplu -

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

Ieșire:

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

După cum putem vedea în codul de mai sus, codul a devenit greu de citit și mai predispus la eroare. De aceea, acest mod de formatare a șirului nu este bun.

2.metoda str.format().

Este o altă modalitate populară de a formata șirul introdus în Python 2.6. Să vedem cum îl putem folosi.

Cum se utilizează str.format()

Este o îmbunătățire a formatării %. Este ca o funcție încorporată normală numită pe obiect și acel obiect este convertit într-un șir.

Să vedem următorul exemplu.

Exemplu -

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

Pentru a accesa elementul dicționar din cadrul metodei format, putem trece cheia în metoda format().

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

Ieșire:

 Hello Peter, You are 17 

De ce metoda str.format() nu este recomandată?

str.format() este mult mai eficientă decât metoda %-format, dar poate fi totuși destul de verbosă atunci când avem de-a face cu mai mulți parametri.

Metoda F-string

Este un nou mecanism de formatare a șirurilor introdus de PEP 498. Este cunoscut și sub numele de Interpolare literală a șirurilor sau mai frecvent ca șiruri F. (caracterul f care precede literalul șir). Obiectivul principal al acestui mecanism este de a facilita interpolarea.

Când prefixăm șirul cu litera „F, șirul devine însuși șirul f. Șirul f poate fi formatat în același mod ca și str.format() metodă. Șirul F oferă o modalitate convenabilă de a încorpora expresia Python în literalele șir pentru formatare.

Exemplu -

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

Ieșire:

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

În codul de mai sus, am folosit șirul f pentru a formata șirul. Se evaluează în timpul execuției; putem pune toate expresiile Python valide în ele.

Îl putem folosi într-o singură declarație.

modele de software java
 print(f'{2 * 30})' 

Ieșire:

 60 

Cu toate acestea, am putea folosi în funcție.

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

Ieșire:

 Sachin Tendulkar is great 

Șirul f poate fi folosit și cu obiectul clasei. Să înțelegem următorul exemplu.

Exemplu -

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

Ieșire:

 Keenu Reevs's superhit movie is Matrix. 

Explicație -

În codul de mai sus, am folosit __str__() și __repr__(), reprezentând un obiect ca șir. Deci trebuie să includem cel puțin una dintre aceste metode în definiția clasei. Sirul f va folosi metoda __str__(); putem folosi, de asemenea, __repr__() prin includerea steagului de conversie! r.

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

Ieșire:

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

F-string în dicţionar

Trebuie să avem grijă când lucrăm cu cheile de dicționar în interiorul șirului f. Există un citat diferit pentru a utiliza cheile de dicționar și șirul f. Să înțelegem următorul exemplu.

Exemplu -

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

Ieșire:

 John is 19 years old. 

Metoda de mai jos nu este permisă în cazul dicționarului.

Exemplu -

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

Ieșire:

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

După cum putem vedea în codul de mai sus, schimbăm ghilimelele duble în ghilimele simple și a generat o eroare.

Viteză

Motivul adaptării acestui stil de formatare este viteza acestuia. Șirul f evaluează în timpul execuției mai degrabă decât valori constante. Înglobează expresia în interiorul literalelor șir, folosind sintaxa minimă. Este rapid pentru că evaluează în timpul execuției, nu o valoare constantă.

Să vedem următoarea comparație de șiruri.

Exemplu - 1:

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

Ieșire:

 0.0022497819736599922 

Exemplu - 2:

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

Ieșire:

 0.0025783719611354172 

Exemplu - 3:

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

Ieșire:

.egal cu java
 0.0019360429723747075 

După cum putem observa, șirul f se află în partea de sus a listei.

Bretele

Pentru a face să apară acolade în cod, ar trebui să utilizați ghilimele duble după cum urmează. Să înțelegem următorul exemplu.

Exemplu -

 f'{{70 + 40}}' 

Ieșire:

 {70 + 40} 

Dacă folosim acolade triple, va afișa acolade simple în șirul nostru. Să înțelegem următorul exemplu.

Exemplu -

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

Ieșire:

 {94} 

Putem afișa mai multe bretele dacă folosim mai mult decât triple bretele.

Exemplu -

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

Ieșire:

 {{70 + 4}} 

Bare oblice inverse

Putem folosi evadarile backslash în porțiunea șir a unui șir f. Cu toate acestea, nu putem folosi barele oblice inverse pentru a scăpa în partea de expresie a unui șir f. Să înțelegem următorul exemplu.

Exemplu -

comenzi linux care
 f'{'Medric Pacalo'}' File '', line 1 f'{'Medric Pacalo'}' 

Ieșire:

 SyntaxError: f-string expression part cannot include a backslash 

Comentarii inline

Nu putem include simbolul # în expresie. Va arunca o eroare de sintaxă. Să înțelegem următorul exemplu.

Exemplu -

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

Ieșire:

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

Concluzie

Putem folosi orice metodă din trei, dar metoda f-string oferă o modalitate mai concisă, mai lizibilă și mai convenabilă. Este mai rapid și mai puțin predispus la erori. Am explicat aproape fiecare scenariu posibil off-string și de ce ar trebui să ia în considerare această abordare în programare.