Šajā apmācībā mēs uzzināsim par virkņu formatēšanas mehānismu. F-virkne ir labākais veids, kā formatēt virkni. Virknes formatēšanas stils padara virkni lasāmāku, kodolīgāku un mazāk pakļautu kļūdām. Tas ir arī ātrāks par otru.
Pirms iedziļināties šajā tēmā, mēs vispirms apspriedīsim metodes, kas tika izmantotas pirms f virknes.
Vecā virkņu formatēšana programmā Python
Ir divi galvenie virknes formatēšanas veidi: % - formatēšana un str.format(). Bet abām metodēm ir daži ierobežojumi. Īsi iepazīstināsim ar šīm metodēm.
1.% - formatēšana
Tas ir tradicionāls virknes formatēšanas veids, taču dokumenti iesaka šo metodi, kas ietver šādu paziņojumu.
'Šeit aprakstītajām formatēšanas darbībām ir dažādas dīvainības, kas izraisa vairākas izplatītas kļūdas (piemēram, korekti un vārdnīcas netiek pareizi parādītas).
Izmantojot jaunākus formatētus virknes literāļus vai str.format() interfeiss palīdz izvairīties no šīm kļūdām. - Oficiālā dokumentācija .
Kā lietot % - formatējumu
Mēs varam veikt iebūvēto darbību, izmantojot %-operatoru. Sapratīsim šādu piemēru.
izņemot
student = 'Michel' 'Hello, %s.' % student
Izvade:
Hello Michel
Mēs varam arī izmantot kortedža, lai saglabātu vairākus mainīgos. Apskatīsim šādu piemēru.
name = 'Sharma' age = 24 'Hello, %s. You are %s.' % (name, age)
Izvade:
Hello Sharma You are 24.
Kāpēc % formatēšana nav ieteicama
Tā kā mainīgais tiek palielināts un virkne ir garāka, mūsu kods kļūst daudz grūtāk lasāms. Kods izskatās netīrs. Apskatīsim šādu piemēru.
Piemērs -
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)')
Izvade:
Hello, Steve Rogers. Your age is 70. You are a Superhero. You were a member of Marvel.
Kā redzams iepriekš minētajā kodā, kods kļuva grūti nolasāms un vairāk pakļauts kļūdai. Tāpēc šis virknes formatēšanas veids nav labs.
2.str.format() metode
Tas ir vēl viens populārs veids, kā formatēt virkni, kas ieviesta Python 2.6. Apskatīsim, kā mēs to varam izmantot.
Kā lietot str.format()
Tas ir %-formatēšanas uzlabojums. Tā ir kā parasta iebūvēta funkcija, kas tiek izsaukta objektā, un šis objekts tiek pārveidots par virkni.
Apskatīsim šādu piemēru.
Piemērs -
first_name = 'Mathew' last_name = 'Zukerburg' age = 45 print('Hello, {}. You are {}.'.format(name, age)')
Lai piekļūtu vārdnīcas elementam formāta metodes ietvaros, mēs varam nodot atslēgu format() metodē.
person = {'name': 'Peter', 'age': 17} 'Hello, {name}. You are {age}.'.format(name=person['name'], age=person['age'])
Izvade:
Hello Peter, You are 17
Kāpēc str.format() metode nav ieteicama?
Str.format() ir daudz efektīvāka nekā %-format metode, taču tā joprojām var būt diezgan detalizēta, ja mēs strādājam ar vairākiem parametriem.
F-string metode
Tas ir jauns virkņu formatēšanas mehānisms, ko ieviesa PEP 498. Tas ir pazīstams arī kā Literal String Interpolation vai biežāk kā F-strings. (f rakstzīme pirms virknes literāļa). Šī mehānisma galvenais mērķis ir atvieglot interpolāciju.
Kad virknes priekšā pievienojam burtu F, virkne kļūst par f-virkni. F-virkni var formatēt līdzīgi kā str.format() metodi. F-virkne piedāvā ērtu veidu, kā formatēšanai iegult Python izteiksmi virknes literāļos.
Piemērs -
# 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.')
Izvade:
Hello, My name is Tushar and I'm 28 years old.
Iepriekš minētajā kodā virknes formatēšanai esam izmantojuši f-string. Tas tiek novērtēts izpildlaikā; mēs varam tajos ievietot visas derīgās Python izteiksmes.
Mēs to varam izmantot vienā paziņojumā.
print(f'{2 * 30})'
Izvade:
60
Tomēr mēs varētu izmantot funkciju.
def upercase(input): return input.uper() name = 'Sachin Tendulkar' f'{upercase(name)} is great.'
Izvade:
Sachin Tendulkar is great
F-virkni var izmantot arī ar klases objektu. Sapratīsim šādu piemēru.
slēptās lietotnes
Piemērs -
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}')
Izvade:
Keenu Reevs's superhit movie is Matrix.
Paskaidrojums -
Iepriekš minētajā kodā mēs esam izmantojuši __str__() un __repr__(), kas attēlo objektu kā virkni. Tāpēc mums ir jāiekļauj vismaz viena no šīm metodēm klases definīcijā. F-string izmantos __str__() metodi; mēs varam izmantot arī __repr__(), iekļaujot konversijas karogu ! r.
print(f'{ac}') print(f'{ac}'!r)
Izvade:
Keenu Reevs's superhit movie is Matrix. Keenu Reevs Matrix Superhit
F-string vārdnīcā
Mums ir jābūt uzmanīgiem, strādājot ar vārdnīcas taustiņiem f-string iekšpusē. Ir atšķirīgs citāts, lai izmantotu vārdnīcas taustiņus un f-string. Sapratīsim šādu piemēru.
Piemērs -
detail = {'name': 'John', 'age': 19} print(f'{detail['name']} is {detail['age']} years old.')
Izvade:
John is 19 years old.
Zemāk norādītā metode nav atļauta vārdnīcas gadījumā.
Piemērs -
detail = {'name': 'John', 'age': 19} print(f'{detail['name']} is {detail['age']} years old.')
Izvade:
File '', line 2 print(f'{detail['name']} is {detail['age']} years old.') ^ SyntaxError: invalid syntax
Kā redzams iepriekš minētajā kodā, mēs mainām dubultpēdiņu uz vienpēdiņām, un tas ir radījis kļūdu.
Ātrums
Šī formatēšanas stila pielāgošanas iemesls ir tā ātrums. F-virkne tiek novērtēta izpildlaikā, nevis nemainīgās vērtībās. Tas iegulst izteiksmi virknes literāļos, izmantojot minimālu sintaksi. Tas ir ātrs, jo tas tiek novērtēts izpildlaikā, nevis nemainīgā vērtībā.
Apskatīsim šādu virkņu salīdzinājumu.
Piemērs — 1:
import timeit print(timeit.timeit('''name = 'Sachin' age = 74 '%s is %s.' % (name, age)''', number = 10000))
Izvade:
0.0022497819736599922
Piemērs — 2:
import timeit print(timeit.timeit('''name = 'Mathew' age = 40 '{} is {}.'.format(name, age)''', number = 10000))
Izvade:
0.0025783719611354172
Piemērs — 3:
import timeit print(timeit.timeit('''name = 'Rockey' age = 74 f'{name} is {age}.'''', number = 10000))
Izvade:
java programmēšanas valodas apmācība
0.0019360429723747075
Kā mēs varam novērot, f-string atrodas saraksta augšdaļā.
Bikšturi
Lai kodā parādītos iekavas, izmantojiet pēdiņas, kā norādīts tālāk. Sapratīsim šādu piemēru.
Piemērs -
f'{{70 + 40}}'
Izvade:
{70 + 40}
Ja mēs izmantojam trīskāršās lencēs, mūsu virknē tiks parādītas atsevišķas skavas. Sapratīsim šādu piemēru.
Piemērs -
f'{{{90 + 4}}}'
Izvade:
{94}
Mēs varam parādīt vairāk breketes, ja izmantojam vairāk nekā trīs breketes.
Piemērs -
iegūt savienojumu
f'{{{{70 + 4}}}}'
Izvade:
{{70 + 4}}
Slīpssvītras
F-virknes virknes daļā varam izmantot atpakaļslīpssvītru. Tomēr mēs nevaram izmantot atpakaļvērstās slīpsvītras, lai izspiestu f-virknes izteiksmes daļu. Sapratīsim šādu piemēru.
Piemērs -
f'{'Medric Pacalo'}' File '', line 1 f'{'Medric Pacalo'}'
Izvade:
SyntaxError: f-string expression part cannot include a backslash
Iekļautie komentāri
Izteiksmē nevar iekļaut simbolu #. Tas radīs sintakses kļūdu. Sapratīsim šādu piemēru.
Piemērs -
f'Tony is {10 * 73 #Hate this!}.' f'Tonyr is {2 * 37 #Hate this!}.'
Izvade:
SyntaxError: f-string expression part cannot include '#'
Secinājums
Mēs varam izmantot jebkuru no trim metodēm, taču f-string metode nodrošina kodolīgāku, lasāmāku un ērtāku veidu. Tas ir ātrāks un mazāk pakļauts kļūdām. Mēs esam izskaidrojuši gandrīz visus iespējamos scenārijus, kas nav saistīti ar virkni, un kāpēc šī pieeja būtu jāņem vērā programmēšanas procesā.