У овом водичу ћемо научити о механизму обликовања стрингова. Ф-стринг је најбољи начин за форматирање стринга. Стил обликовања стринга чини стринг читљивијим, сажетијим и мање склоним грешкама. Такође је бржи од другог.
Пре него што уђемо дубоко у ову тему, прво ћемо разговарати о техникама које су коришћене пре ф стринга.
Старо форматирање стрингова у Питхон-у
Постоје два главна начина за форматирање стринга: % - форматирање и стр.формат(). Али обе методе имају нека ограничења. Хајде да укратко представимо ове дате методе.
1.% - форматирање
То је традиционални начин форматирања стринга, али документи препоручују овај метод, који садржи следећу изјаву.
„Операције форматирања које су овде описане показују различите необичне карактеристике које доводе до неколико уобичајених грешака (као што је неисправно приказивање торки и речника).
Користећи новије форматиране стринг литерале или стр.формат() интерфејс помаже да се избегну ове грешке.' - Службена документација .
Како се користи % - форматирање
Можемо извршити уграђену операцију помоћу %-оператора. Хајде да разумемо следећи пример.
цео број у поређењу са Јава
student = 'Michel' 'Hello, %s.' % student
Излаз:
Hello Michel
Такође можемо користити тупле за чување више променљивих. Погледајмо следећи пример.
name = 'Sharma' age = 24 'Hello, %s. You are %s.' % (name, age)
Излаз:
Hello Sharma You are 24.
Зашто се %-форматирање не препоручује
Јер како се променљива повећава и дужи низ, наш код постаје много теже читљив. Код изгледа неуредно. Погледајмо следећи пример.
Пример -
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)')
Излаз:
Hello, Steve Rogers. Your age is 70. You are a Superhero. You were a member of Marvel.
Као што видимо у горњем коду, код је постао тежак за читање и подложнији грешци. Зато овакав начин форматирања стринга није добар.
2.стр.формат() метода
То је још један популаран начин за форматирање стринга уведен у Питхон 2.6. Хајде да видимо како то можемо користити.
Како се користи стр.формат()
То је побољшање %-форматирања. То је као нормална уграђена функција која се позива на објекат и тај објекат се претвара у стринг.
Погледајмо следећи пример.
Пример -
first_name = 'Mathew' last_name = 'Zukerburg' age = 45 print('Hello, {}. You are {}.'.format(name, age)')
Да бисмо приступили елементу речника унутар методе формат, можемо проследити кључ у методу формат().
person = {'name': 'Peter', 'age': 17} 'Hello, {name}. You are {age}.'.format(name=person['name'], age=person['age'])
Излаз:
Hello Peter, You are 17
Зашто се метод стр.формат() не препоручује?
Ст.формат() је много ефикасан од методе %-формат, али може бити прилично опсежан када се бавимо вишеструким параметрима.
Ф-стринг Метод
То је нови механизам за форматирање стрингова који је увео ПЕП 498. Такође је познат као интерполација литералног низа или чешће као Ф-стрингови (ф карактер који претходи литералу стринга). Примарни фокус овог механизма је да олакша интерполацију.
Када стрингу додамо префикс словом 'Ф, стринг постаје сам ф-стринг. Ф-стринг се може форматирати на исти начин као стр.формат() методом. Ф-стринг нуди згодан начин да се Питхон израз угради у литерале стрингова за форматирање.
Пример -
# 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.')
Излаз:
Hello, My name is Tushar and I'm 28 years old.
У горњем коду смо користили ф-стринг да форматирамо стринг. Процењује у току рада; у њих можемо ставити све важеће Пајтонове изразе.
Можемо га користити у једној изјави.
print(f'{2 * 30})'
Излаз:
60
Међутим, могли бисмо да користимо у функцији.
def upercase(input): return input.uper() name = 'Sachin Tendulkar' f'{upercase(name)} is great.'
Излаз:
Sachin Tendulkar is great
Ф-стринг се такође може користити са објектом класе. Хајде да разумемо следећи пример.
Пример -
стринг у низу ц
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}')
Излаз:
Keenu Reevs's superhit movie is Matrix.
Објашњење -
У горњем коду смо користили __стр__() и __репр__(), који представљају објекат као стринг. Дакле, морамо укључити барем једну од тих метода у дефиницију класе. Ф-стринг ће користити метод __стр__(); такође можемо да користимо __репр__() тако што ћемо укључити заставицу конверзије! р.
print(f'{ac}') print(f'{ac}'!r)
Излаз:
Keenu Reevs's superhit movie is Matrix. Keenu Reevs Matrix Superhit
Ф-стринг у речнику
Морамо да водимо рачуна док радимо са тастерима речника унутар ф-стринга. Постоји другачији цитат за коришћење кључева речника и ф-стринга. Хајде да разумемо следећи пример.
Пример -
detail = {'name': 'John', 'age': 19} print(f'{detail['name']} is {detail['age']} years old.')
Излаз:
John is 19 years old.
Доњи метод није дозвољен у случају речника.
Пример -
detail = {'name': 'John', 'age': 19} print(f'{detail['name']} is {detail['age']} years old.')
Излаз:
File '', line 2 print(f'{detail['name']} is {detail['age']} years old.') ^ SyntaxError: invalid syntax
Као што можемо да видимо у горњем коду, променили смо двоструки наводник у једноструке наводнике и то је изазвало грешку.
Брзина
Разлог за прилагођавање овог стила форматирања је његова брзина. Ф-стринг вреднује у време извођења, а не константне вредности. Уграђује израз унутар стринг литерала, користећи минималну синтаксу. Брз је јер процењује током извршавања, а не константну вредност.
Хајде да видимо следеће поређење низова.
Пример - 1:
import timeit print(timeit.timeit('''name = 'Sachin' age = 74 '%s is %s.' % (name, age)''', number = 10000))
Излаз:
0.0022497819736599922
Пример - 2:
import timeit print(timeit.timeit('''name = 'Mathew' age = 40 '{} is {}.'.format(name, age)''', number = 10000))
Излаз:
0.0025783719611354172
Пример - 3:
import timeit print(timeit.timeit('''name = 'Rockey' age = 74 f'{name} is {age}.'''', number = 10000))
Излаз:
импорт сцаннер јава
0.0019360429723747075
Као што можемо приметити, ф-стринг је на врху листе.
Протеза
Да би се у коду појавиле заграде, требало би да користите двоструке наводнике на следећи начин. Хајде да разумемо следећи пример.
Пример -
f'{{70 + 40}}'
Излаз:
животни циклус развоја софтвера
{70 + 40}
Ако користимо троструке заграде, приказаће појединачне заграде у нашем низу. Хајде да разумемо следећи пример.
Пример -
f'{{{90 + 4}}}'
Излаз:
{94}
Можемо приказати више заграда ако користимо више од троструких заграда.
Пример -
f'{{{{70 + 4}}}}'
Излаз:
{{70 + 4}}
Обрнуте косе црте
Можемо да користимо излазне косе црте у делу стринга ф низа. Међутим, не можемо да користимо обрнуте косе црте за избегавање у делу израза ф-низа. Хајде да разумемо следећи пример.
Пример -
f'{'Medric Pacalo'}' File '', line 1 f'{'Medric Pacalo'}'
Излаз:
SyntaxError: f-string expression part cannot include a backslash
Инлине цомментс
Не можемо укључити симбол # у израз. Избациће синтаксичку грешку. Хајде да разумемо следећи пример.
Пример -
f'Tony is {10 * 73 #Hate this!}.' f'Tonyr is {2 * 37 #Hate this!}.'
Излаз:
SyntaxError: f-string expression part cannot include '#'
Закључак
Можемо да користимо било коју методу од три, али ф-стринг метода пружа сажетији, читљивији и погоднији начин. Бржи је и мање подложан грешкама. Објаснили смо скоро сваки могући сценарио ван низа и зашто би требало размотрити овај приступ у програмирању.