logo

F-merkkijono Pythonissa

Tässä opetusohjelmassa opimme merkkijonojen muotoilumekanismista. F-merkkijono on paras tapa muotoilla merkkijono. Merkkijonon muotoilutyyli tekee merkkijonosta luettavamman, tiiviimmän ja vähemmän altis virheille. Se on myös nopeampi kuin toinen.

Ennen kuin sukeltaa syvälle tähän aiheeseen, keskustelemme ensin tekniikoista, joita käytettiin ennen f-merkkijonoa.

Vanha merkkijonomuotoilu Pythonissa

On kaksi päätapaa muotoilla merkkijono: % - muotoilu ja str.format(). Mutta molemmilla tavoilla on joitain rajoituksia. Otetaanpa lyhyt esittely näistä annetuista menetelmistä.

1,% - muotoilu

Se on perinteinen tapa muotoilla merkkijono, mutta asiakirjat suosittelevat tätä menetelmää, joka sisältää seuraavan lausunnon.

'Tässä kuvatuissa muotoilutoiminnoissa on useita omituisia omituisuuksia, jotka johtavat useisiin yleisiin virheisiin (kuten lukujen ja sanakirjojen näyttämisen epäonnistuminen).

Käyttämällä uudempia muotoiltuja merkkijonoliteraaleja tai str.format() käyttöliittymä auttaa välttämään nämä virheet.' - Virallinen dokumentaatio .

Kuinka käyttää % - muotoilua

Voimme suorittaa sisäänrakennetun toiminnan %-operaattorilla. Ymmärretään seuraava esimerkki.

nukkua js:ssä
 student = 'Michel' 'Hello, %s.' % student 

Lähtö:

 Hello Michel 

Voimme myös käyttää monikkoa useiden muuttujien tallentamiseen. Katsotaanpa seuraava esimerkki.

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

Lähtö:

 Hello Sharma You are 24. 

Miksi %-muotoilua ei suositella?

Koska muuttujan kasvaessa ja merkkijonon pidentyessä koodistamme tulee paljon vaikeammin luettava. Koodi näyttää sekavalta. Katsotaanpa seuraava esimerkki.

Esimerkki -

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

Lähtö:

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

Kuten yllä olevasta koodista näemme, koodista tuli vaikea lukea ja virhe alttiimpi. Siksi tämä tapa muotoilla merkkijono ei ole hyvä.

2.str.format()-metodi

Se on toinen suosittu tapa muotoilla Python 2.6:ssa käyttöön otettu merkkijono. Katsotaan kuinka voimme käyttää sitä.

Kuinka käyttää str.format()

Se on parannus %-muotoiluun. Se on kuin tavallinen sisäänrakennettu funktio, jota kutsutaan objektille ja että objekti muunnetaan merkkijonoksi.

Katsotaanpa seuraava esimerkki.

Esimerkki -

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

Päästäksemme sanakirjaelementtiin format-menetelmän sisällä, voimme välittää avaimen format()-menetelmässä.

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

Lähtö:

 Hello Peter, You are 17 

Miksi str.format()-menetelmää ei suositella?

Str.format() on paljon tehokkaampi kuin %-format-menetelmä, mutta se voi silti olla melko monisanainen, kun käsittelemme useita parametreja.

F-merkkijono menetelmä

Se on PEP 498:n tuoma uusi merkkijonojen muotoilumekanismi. Se tunnetaan myös nimellä Literal String Interpolation tai yleisemmin F-merkkijonoina. (f-merkki, joka edeltää merkkijonoliteraalia). Tämän mekanismin ensisijaisena tavoitteena on tehdä interpoloinnista helpompaa.

Kun lisäämme merkkijonon etuliitteen kirjaimella 'F, merkkijonosta tulee itse f-merkkijono. F-merkkijono voidaan muotoilla suunnilleen samalla tavalla kuin str.format() menetelmä. F-merkkijono tarjoaa kätevän tavan upottaa Python-lauseke merkkijonoliteraaleihin muotoilua varten.

Esimerkki -

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

Lähtö:

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

Yllä olevassa koodissa olemme käyttäneet f-merkkijonoa merkkijonon muotoiluun. Se arvioi ajon aikana; voimme laittaa kaikki kelvolliset Python-lausekkeet niihin.

Voimme käyttää sitä yhdessä lauseessa.

 print(f'{2 * 30})' 

Lähtö:

pandan keskihajonta
 60 

Voisimme kuitenkin käyttää toiminnassa.

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

Lähtö:

 Sachin Tendulkar is great 

F-merkkijonoa voidaan käyttää myös luokkaobjektin kanssa. Ymmärretään seuraava esimerkki.

Esimerkki -

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

Lähtö:

 Keenu Reevs's superhit movie is Matrix. 

Selitys -

Yllä olevassa koodissa olemme käyttäneet __str__() ja __repr__(), jotka edustavat objektia merkkijonona. Joten meidän on sisällytettävä vähintään yksi näistä menetelmistä luokan määritelmään. F-merkkijono käyttää __str__()-metodia; voimme myös käyttää __repr__() sisällyttämällä muunnoslipun ! r.

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

Lähtö:

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

F-merkkijono sanakirjassa

Meidän on oltava varovaisia ​​käyttäessämme sanakirjanäppäimiä f-merkkijonon sisällä. Sanakirjanäppäimien ja f-merkkijonon käyttö on erilainen. Ymmärretään seuraava esimerkki.

Esimerkki -

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

Lähtö:

 John is 19 years old. 

Alla oleva menetelmä ei ole sallittu sanakirjan tapauksessa.

Esimerkki -

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

Lähtö:

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

Kuten yllä olevasta koodista näemme, vaihdamme kaksoislainauksen yksittäisiin lainausmerkkeihin, ja se on aiheuttanut virheen.

Nopeus

Syy tämän muotoilutyylin mukauttamiseen on sen nopeus. F-merkkijono arvioi ajon aikana vakioarvojen sijaan. Se upottaa ilmaisun merkkijonoliteraaleihin käyttämällä minimaalista syntaksia. Se on nopea, koska se arvioi ajon aikana, ei vakioarvoa.

Katsotaanpa seuraava merkkijonovertailu.

Esimerkki - 1:

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

Lähtö:

 0.0022497819736599922 

Esimerkki - 2:

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

Lähtö:

 0.0025783719611354172 

Esimerkki - 3:

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

Lähtö:

alaviitteet
 0.0019360429723747075 

Kuten voimme havaita, f-merkkijono on luettelon yläosassa.

Aaltosulkeet

Jos haluat saada aaltosulkeet näkyviin koodissa, sinun tulee käyttää lainausmerkkejä seuraavasti. Ymmärretään seuraava esimerkki.

Esimerkki -

 f'{{70 + 40}}' 

Lähtö:

 {70 + 40} 

Jos käytämme kolminkertaisia ​​aaltosulkeita, merkkijonossamme näytetään yksittäiset aaltosulkeet. Ymmärretään seuraava esimerkki.

Esimerkki -

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

Lähtö:

govinda näyttelijä
 {94} 

Voimme näyttää enemmän henkselit, jos käytämme enemmän kuin kolminkertaisia ​​olkaimet.

Esimerkki -

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

Lähtö:

 {{70 + 4}} 

Kenoviivat

Voimme käyttää kenoviivan erotuksia f-merkkijonon merkkijono-osassa. Emme kuitenkaan voi käyttää kenoviivaa pakenemaan f-merkkijonon lausekeosassa. Ymmärretään seuraava esimerkki.

Esimerkki -

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

Lähtö:

 SyntaxError: f-string expression part cannot include a backslash 

Sisäiset kommentit

Emme voi sisällyttää #-symbolia lausekkeeseen. Se heittää syntaksivirheen. Ymmärretään seuraava esimerkki.

Esimerkki -

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

Lähtö:

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

Johtopäätös

Voimme käyttää mitä tahansa kolmesta menetelmästä, mutta f-string-menetelmä tarjoaa tiiviimmän, luettavamman ja kätevämmän tavan. Se on nopeampi ja vähemmän altis virheille. Olemme selittäneet lähes kaikki mahdolliset skenaariot off-stringistä ja miksi tätä lähestymistapaa tulisi harkita ohjelmoinnissa.