logo

F eilutė Python

Šioje pamokoje sužinosime apie eilučių formatavimo mechanizmą. F-styga yra geriausias būdas formatuoti eilutę. Dėl eilutės formatavimo stiliaus eilutė tampa lengviau skaitoma, glaustesnė ir mažesnė klaidų tikimybė. Jis taip pat yra greitesnis už kitą.

Prieš gilindamiesi į šią temą, pirmiausia aptarsime metodus, kurie buvo naudojami prieš f eilutę.

Senas stygų formatavimas Python

Yra du pagrindiniai eilutės formatavimo būdai: % – formatavimas ir str.format(). Tačiau abu metodai turi tam tikrų apribojimų. Trumpai pristatykime šiuos pateiktus metodus.

1.% – formatavimas

Tai tradicinis eilutės formatavimo būdas, tačiau dokumentai rekomenduoja šį metodą, kuriame yra šis teiginys.

„Čia aprašytose formatavimo operacijose yra įvairių keistenybių, dėl kurių atsiranda keletas įprastų klaidų (pvz., nepavyksta tinkamai parodyti eilučių ir žodynų).

Naudojant naujesnius suformatuotus eilučių literalus arba str.format() sąsaja padeda išvengti šių klaidų. - Oficiali dokumentacija .

Kaip naudoti % - formatavimą

Galime atlikti įmontuotą operaciją naudodami %-operatorių. Supraskime šį pavyzdį.

kartoti sąrašą Java
 student = 'Michel' 'Hello, %s.' % student 

Išvestis:

 Hello Michel 

Taip pat galime naudoti eilutę, kad išsaugotume kelis kintamuosius. Pažiūrėkime toliau pateiktą pavyzdį.

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

Išvestis:

 Hello Sharma You are 24. 

Kodėl %-formatavimas nerekomenduojamas

Kadangi padidinus kintamąjį ir ilgesnę eilutę, mūsų kodas tampa daug lengviau skaitomas. Kodas atrodo netvarkingas. Pažiūrėkime toliau pateiktą pavyzdį.

Pavyzdys -

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

Išvestis:

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

Kaip matome aukščiau pateiktame kode, kodas tapo sunkiai įskaitomas ir labiau linkęs į klaidą. Štai kodėl šis eilutės formatavimo būdas nėra geras.

2.str.format() metodas

Tai dar vienas populiarus būdas formatuoti eilutę, įdiegtą Python 2.6. Pažiūrėkime, kaip galime tai panaudoti.

Kaip naudoti str.format()

Tai yra %-formatavimo patobulinimas. Tai tarsi įprasta įmontuota funkcija, kuri iškviečiama objektą ir tas objektas konvertuojamas į eilutę.

Pažiūrėkime toliau pateiktą pavyzdį.

Pavyzdys -

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

Norėdami pasiekti žodyno elementą formato metodu, raktą galime perduoti formatu () metodu.

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

Išvestis:

 Hello Peter, You are 17 

Kodėl str.format() metodas nerekomenduojamas?

Str.format() yra daug efektyvesnis nei %-format metodas, tačiau jis vis tiek gali būti gana žodinis, kai susiduriame su keliais parametrais.

F-stygos metodas

Tai naujas eilučių formatavimo mechanizmas, įdiegtas PEP 498. Jis taip pat žinomas kaip Literal String Interpolation arba dažniau kaip F-stygos. (f simbolis, einantis prieš eilutės literalą). Pagrindinis šio mechanizmo tikslas yra palengvinti interpoliaciją.

Kai prie eilutės pridedame raidę „F“, eilutė tampa pačia f eilute. F eilutė gali būti suformatuota panašiai kaip ir str.format() metodas. F-styga siūlo patogų būdą įterpti Python išraišką eilučių literaluose formatavimui.

Pavyzdys -

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

Išvestis:

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

Aukščiau pateiktame kode eilutei formatuoti naudojome f eilutę. Jis vertinamas vykdymo metu; į juos galime įdėti visas galiojančias Python išraiškas.

Galime jį panaudoti viename teiginyje.

 print(f'{2 * 30})' 

Išvestis:

 60 

Tačiau galėtume naudoti funkciją.

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

Išvestis:

 Sachin Tendulkar is great 

F-stygą taip pat galima naudoti su klasės objektu. Supraskime šį pavyzdį.

Pavyzdys -

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

Išvestis:

eilutė į simbolius java
 Keenu Reevs's superhit movie is Matrix. 

Paaiškinimas -

Aukščiau pateiktame kode naudojome __str__() ir __repr__(), vaizduojančius objektą kaip eilutę. Taigi į klasės apibrėžimą turime įtraukti bent vieną iš šių metodų. F-styga naudos __str__() metodą; taip pat galime naudoti __repr__() įtraukdami konversijos vėliavėlę! r.

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

Išvestis:

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

F-styga žodyne

Turime būti atsargūs dirbdami su žodyno klavišais f eilutės viduje. Yra skirtinga citata naudoti žodyno klavišus ir f eilutę. Supraskime šį pavyzdį.

Pavyzdys -

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

Išvestis:

 John is 19 years old. 

Žemiau pateiktas metodas neleidžiamas žodyno atveju.

Pavyzdys -

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

Išvestis:

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

Kaip matome aukščiau esančiame kode, dvigubą citatą pakeičiame į vieną kabutę, todėl įvyko klaida.

Greitis

Šio formatavimo stiliaus pritaikymo priežastis yra jo greitis. F eilutė įvertinama vykdymo metu, o ne pastoviomis reikšmėmis. Jis įterpia išraišką eilutės literaluose, naudodamas minimalią sintaksę. Tai greita, nes vertinama vykdymo metu, o ne pastovi vertė.

Pažiūrėkime šį eilučių palyginimą.

Pavyzdys – 1:

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

Išvestis:

 0.0022497819736599922 

Pavyzdys – 2:

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

Išvestis:

 0.0025783719611354172 

Pavyzdys – 3:

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

Išvestis:

java yra pavyzdys
 0.0019360429723747075 

Kaip matome, f eilutė yra sąrašo viršuje.

Petnešos

Norėdami, kad kode būtų skliaustai, turėtumėte naudoti dvigubas kabutes, kaip nurodyta toliau. Supraskime šį pavyzdį.

Pavyzdys -

 f'{{70 + 40}}' 

Išvestis:

 {70 + 40} 

Jei naudosime trigubus breketus, mūsų eilutėje bus rodomi pavieniai skliaustai. Supraskime šį pavyzdį.

Pavyzdys -

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

Išvestis:

 {94} 

Galime parodyti daugiau breketų, jei naudojame daugiau nei trigubus breketus.

Pavyzdys -

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

Išvestis:

 {{70 + 4}} 

Pasvirieji brūkšniai

F-stygos eilutės dalyje galime naudoti pasvirąjį brūkšnį. Tačiau negalime naudoti pasvirųjų brūkšnių, kad pabėgtume f eilutės išraiškos dalyje. Supraskime šį pavyzdį.

Pavyzdys -

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

Išvestis:

 SyntaxError: f-string expression part cannot include a backslash 

Įterpti komentarai

Į išraišką negalime įtraukti simbolio #. Tai išmes sintaksės klaidą. Supraskime šį pavyzdį.

Pavyzdys -

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

Išvestis:

css wrap tekstas
 SyntaxError: f-string expression part cannot include '#' 

Išvada

Galime naudoti bet kurį vieną iš trijų metodų, tačiau f-string metodas suteikia glaustesnį, skaitomesnį ir patogesnį būdą. Tai greitesnė ir mažiau linkusi į klaidas. Mes paaiškinome beveik visus galimus scenarijus ir kodėl reikėtų atsižvelgti į šį požiūrį programuojant.