V tej vadnici bomo spoznali mehanizem oblikovanja nizov. Niz f je najboljši način za oblikovanje niza. Zaradi sloga oblikovanja niza je niz bolj berljiv, bolj jedrnat in manj dovzeten za napake. Je tudi hitrejši od drugega.
Preden se poglobimo v to temo, bomo najprej razpravljali o tehnikah, ki so bile uporabljene pred nizom f.
Staro oblikovanje nizov v Pythonu
Obstajata dva glavna načina za oblikovanje niza: % - oblikovanje in str.format(). Vendar imata obe metodi nekaj omejitev. Oglejmo si kratek uvod v te dane metode.
1.% - oblikovanje
To je tradicionalen način oblikovanja niza, vendar dokumenti priporočajo to metodo, ki vsebuje naslednji stavek.
'Operacije oblikovanja, opisane tukaj, kažejo različne posebnosti, ki vodijo do več pogostih napak (kot je nepravilen prikaz tupl in slovarjev).
Uporaba novejših oblikovanih nizovnih literalov ali str.format() vmesnik pomaga preprečiti te napake.' - Uradna dokumentacija .
Kako uporabljati % - oblikovanje
Z uporabo %-operatorja lahko izvedemo vgrajeno operacijo. Razumejmo naslednji primer.
seznam pikado
student = 'Michel' 'Hello, %s.' % student
Izhod:
Hello Michel
Tuple lahko uporabimo tudi za shranjevanje več spremenljivk. Poglejmo naslednji primer.
name = 'Sharma' age = 24 'Hello, %s. You are %s.' % (name, age)
Izhod:
Hello Sharma You are 24.
Zakaj %-oblikovanje ni priporočljivo
Ker se spremenljivka poveča in niz postane daljši, postane naša koda veliko težje berljiva. Koda je videti neurejena. Poglejmo naslednji primer.
Primer -
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)')
Izhod:
Hello, Steve Rogers. Your age is 70. You are a Superhero. You were a member of Marvel.
Kot lahko vidimo v zgornji kodi, je postala koda težko berljiva in bolj nagnjena k napakam. Zato ta način oblikovanja niza ni dober.
2.str.format() metoda
To je še en priljubljen način za oblikovanje niza, predstavljen v Pythonu 2.6. Poglejmo, kako ga lahko uporabimo.
Kako uporabljati str.format()
Je izboljšava %-formatiranja. To je kot običajna vgrajena funkcija, ki se kliče na predmet in se ta objekt pretvori v niz.
Poglejmo naslednji primer.
Primer -
first_name = 'Mathew' last_name = 'Zukerburg' age = 45 print('Hello, {}. You are {}.'.format(name, age)')
Za dostop do elementa slovarja znotraj metode formata lahko posredujemo ključ metodi format().
person = {'name': 'Peter', 'age': 17} 'Hello, {name}. You are {age}.'.format(name=person['name'], age=person['age'])
Izhod:
Hello Peter, You are 17
Zakaj metoda str.format() ni priporočljiva?
Metoda str.format() je veliko učinkovitejša od metode %-format, vendar je lahko še vedno precej podrobna, ko imamo opravka z več parametri.
Metoda F-strune
To je nov mehanizem za oblikovanje nizov, ki ga je uvedel PEP 498. Znan je tudi kot dobesedna interpolacija nizov ali pogosteje kot F-nizi (znak f pred dobesednim nizom). Glavni cilj tega mehanizma je olajšati interpolacijo.
Ko pred nizom dodamo črko 'F, postane niz sam f-niz. Niz f je mogoče oblikovati približno enako kot str.format() metoda. F-niz ponuja priročen način za vdelavo izraza Python v literale nizov za oblikovanje.
Primer -
# 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.')
Izhod:
Hello, My name is Tushar and I'm 28 years old.
V zgornji kodi smo za oblikovanje niza uporabili f-niz. Ocenjuje med izvajanjem; vanje lahko vstavimo vse veljavne izraze Python.
Lahko ga uporabimo v enem stavku.
print(f'{2 * 30})'
Izhod:
60
Vendar pa bi lahko uporabili v funkciji.
def upercase(input): return input.uper() name = 'Sachin Tendulkar' f'{upercase(name)} is great.'
Izhod:
Sachin Tendulkar is great
Niz f bi lahko uporabili tudi s predmetom razreda. Razumejmo naslednji primer.
Primer -
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}')
Izhod:
javascript onload
Keenu Reevs's superhit movie is Matrix.
Pojasnilo -
V zgornji kodi smo uporabili __str__() in __repr__(), ki predstavljata predmet kot niz. Zato moramo v definicijo razreda vključiti vsaj eno od teh metod. F-niz bo uporabil metodo __str__(); lahko uporabimo tudi __repr__() z vključitvijo zastavice za pretvorbo! r.
print(f'{ac}') print(f'{ac}'!r)
Izhod:
Keenu Reevs's superhit movie is Matrix. Keenu Reevs Matrix Superhit
F-niz v slovarju
Pri delu s slovarskimi ključi znotraj f-niza moramo biti previdni. Za uporabo slovarskih ključev in f-niza obstaja drugačen citat. Razumejmo naslednji primer.
Primer -
detail = {'name': 'John', 'age': 19} print(f'{detail['name']} is {detail['age']} years old.')
Izhod:
John is 19 years old.
Spodnja metoda ni dovoljena v primeru slovarja.
Primer -
detail = {'name': 'John', 'age': 19} print(f'{detail['name']} is {detail['age']} years old.')
Izhod:
File '', line 2 print(f'{detail['name']} is {detail['age']} years old.') ^ SyntaxError: invalid syntax
Kot lahko vidimo v zgornji kodi, spremenimo dvojni narekovaj v enojni narekovaj, kar je povzročilo napako.
Hitrost
Razlog za prilagoditev tega sloga oblikovanja je njegova hitrost. F-niz ovrednoti med izvajanjem in ne konstantne vrednosti. Vdela izraz znotraj nizovnih literalov z uporabo minimalne sintakse. Je hiter, ker ocenjuje med izvajanjem in ne konstantne vrednosti.
Poglejmo naslednjo primerjavo nizov.
Primer - 1:
import timeit print(timeit.timeit('''name = 'Sachin' age = 74 '%s is %s.' % (name, age)''', number = 10000))
Izhod:
0.0022497819736599922
Primer - 2:
import timeit print(timeit.timeit('''name = 'Mathew' age = 40 '{} is {}.'.format(name, age)''', number = 10000))
Izhod:
0.0025783719611354172
Primer - 3:
import timeit print(timeit.timeit('''name = 'Rockey' age = 74 f'{name} is {age}.'''', number = 10000))
Izhod:
sql izbira več tabel
0.0019360429723747075
Kot lahko opazimo, je f-niz na vrhu seznama.
Naramnice
Če želite, da se v kodi prikažejo oklepaji, uporabite dvojne narekovaje, kot sledi. Razumejmo naslednji primer.
Primer -
f'{{70 + 40}}'
Izhod:
{70 + 40}
Če uporabimo trojne oklepaje, bodo prikazani enojni oklepaji v našem nizu. Razumejmo naslednji primer.
Primer -
f'{{{90 + 4}}}'
Izhod:
{94}
Več oklepajev lahko prikažemo, če uporabimo več kot trojne oklepaje.
Primer -
f'{{{{70 + 4}}}}'
Izhod:
{{70 + 4}}
Poševnice nazaj
Ubežne poševnice nazaj lahko uporabimo v delu niza f-niza. Vendar ne moremo uporabiti poševnic nazaj za umik v izraznem delu f-niza. Razumejmo naslednji primer.
Primer -
f'{'Medric Pacalo'}' File '', line 1 f'{'Medric Pacalo'}'
Izhod:
SyntaxError: f-string expression part cannot include a backslash
Vgrajeni komentarji
V izraz ne moremo vključiti simbola #. Vrgel bo sintaktično napako. Razumejmo naslednji primer.
Primer -
f'Tony is {10 * 73 #Hate this!}.' f'Tonyr is {2 * 37 #Hate this!}.'
Izhod:
niz nadomesti vse jave
SyntaxError: f-string expression part cannot include '#'
Zaključek
Uporabimo lahko katero koli metodo od treh, vendar metoda f-string zagotavlja bolj jedrnat, berljiv in priročen način. Je hitrejši in manj nagnjen k napakam. Razložili smo skoraj vse možne scenarije izven niza in zakaj bi morali upoštevati ta pristop pri programiranju.