В този урок ще научим за механизма за форматиране на низове. F-низът е най-добрият начин за форматиране на низа. Стилът на форматиране на низа прави низа по-четлив, по-сбит и по-малко склонен към грешки. Освен това е по-бърз от другия.
Преди да се потопим дълбоко в тази тема, първо ще обсъдим техниките, използвани преди низа f.
Старо форматиране на низове в Python
Има два основни начина за форматиране на низа: % - форматиране и str.format(). Но и двата метода имат някои ограничения. Нека представим накратко тези дадени методи.
1.% - форматиране
Това е традиционен начин за форматиране на низа, но документите препоръчват този метод, който съдържа следния израз.
„Описаните тук операции по форматиране показват различни странности, които водят до няколко често срещани грешки (като неправилно показване на кортежи и речници).
Използвайки по-новите форматирани низови литерали или str.format() интерфейсът помага да се избегнат тези грешки.' - Официална документация .
Как се използва % - форматиране
Можем да извършим вградена операция с помощта на %-оператора. Нека разберем следния пример.
кръгъл график
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.str.format() метод
Това е друг популярен начин за форматиране на низ, въведен в Python 2.6. Да видим как можем да го използваме.
Как да използвате str.format()
Това е подобрение на %-форматирането. Това е като нормална вградена функция, извикана към обекта и този обект се преобразува в низ.
Да видим следния пример.
пример -
first_name = 'Mathew' last_name = 'Zukerburg' age = 45 print('Hello, {}. You are {}.'.format(name, age)')
За достъп до елемента на речника вътре в метода format, можем да предадем ключа в метода format().
person = {'name': 'Peter', 'age': 17} 'Hello, {name}. You are {age}.'.format(name=person['name'], age=person['age'])
Изход:
Hello Peter, You are 17
Защо методът str.format() не се препоръчва?
Str.format() е много ефективен от метода %-format, но все още може да бъде доста подробен, когато се занимаваме с множество параметри.
Метод на F-струни
Това е нов механизъм за форматиране на низове, въведен от PEP 498. Известен е също като Литерална интерполация на низове или по-често като F-низове (символ f, предхождащ литерала на низа). Основният фокус на този механизъм е да улесни интерполацията.
Когато поставим пред низа буквата 'F, низът става самият f-низ. F-низът може да бъде форматиран почти по същия начин като str.format() метод. F-низът предлага удобен начин за вграждане на израз на Python в низови литерали за форматиране.
пример -
# 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.
В горния код сме използвали f-низ, за да форматираме низа. Той оценява по време на изпълнение; можем да поставим всички валидни изрази на Python в тях.
Можем да го използваме в едно изявление.
print(f'{2 * 30})'
Изход:
60
Можем обаче да използваме във функция.
def upercase(input): return input.uper() name = 'Sachin Tendulkar' f'{upercase(name)} is great.'
Изход:
bash разделя низ по разделител
Sachin Tendulkar is great
F-низът може да се използва и с обекта клас. Нека разберем следния пример.
пример -
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.
Обяснение -
В горния код сме използвали __str__() и __repr__(), представящи обект като низ. Така че трябва да включим поне един от тези методи в дефиницията на класа. F-низът ще използва метода __str__(); можем също да използваме __repr__(), като включим флага за преобразуване! r.
print(f'{ac}') print(f'{ac}'!r)
Изход:
Keenu Reevs's superhit movie is Matrix. Keenu Reevs Matrix Superhit
F-низ в речника
Трябва да внимаваме, докато работим с речникови ключове вътре в f-низа. Има различен цитат за използване на речникови ключове и f-низ. Нека разберем следния пример.
пример -
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
Както можем да видим в горния код, ние променяме двойни кавички на единични кавички и това е извело грешка.
Скорост
Причината за адаптирането на този стил на форматиране е неговата скорост. F-низът оценява по време на изпълнение, а не постоянни стойности. Той вгражда израз в низови литерали, използвайки минимален синтаксис. Той е бърз, защото оценява по време на изпълнение, а не постоянна стойност.
Нека видим следното сравнение на низове.
Пример - 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))
Изход:
log4j
0.0019360429723747075
Както можем да видим, f-низът е в горната част на списъка.
брекети
За да се появят скоби в кода, трябва да използвате двойните кавички, както следва. Нека разберем следния пример.
пример -
f'{{70 + 40}}'
Изход:
{70 + 40}
Ако използваме тройните скоби, това ще покаже единични скоби в нашия низ. Нека разберем следния пример.
пример -
f'{{{90 + 4}}}'
Изход:
{94}
Можем да покажем повече скоби, ако използваме повече от тройни скоби.
пример -
f'{{{{70 + 4}}}}'
Изход:
{{70 + 4}}
Обратно наклонени черти
Можем да използваме екранирането на обратната наклонена черта в низовата част на f-низ. Не можем обаче да използваме обратни наклонени черти, за да избягаме в изразната част на f-низ. Нека разберем следния пример.
пример -
f'{'Medric Pacalo'}' File '', line 1 f'{'Medric Pacalo'}'
Изход:
SyntaxError: f-string expression part cannot include a backslash
Вградени коментари
Не можем да включим символа # в израза. Ще изведе синтактична грешка. Нека разберем следния пример.
конвертиране на char в низ java
пример -
f'Tony is {10 * 73 #Hate this!}.' f'Tonyr is {2 * 37 #Hate this!}.'
Изход:
SyntaxError: f-string expression part cannot include '#'
Заключение
Можем да използваме всеки един от трите метода, но методът f-string предоставя по-кратък, четим и удобен начин. Той е по-бърз и по-малко склонен към грешки. Ние обяснихме почти всеки възможен сценарий извън низа и защо човек трябва да обмисли този подход в програмирането.