Î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.