logo

Рядок F у Python

У цьому підручнику ми дізнаємося про механізм форматування рядків. F-рядок є найкращим способом форматування рядка. Стиль форматування рядка робить рядок більш читабельним, більш лаконічним і менш схильним до помилок. Це також швидше, ніж інші.

Перш ніж заглибитися в цю тему, ми спочатку обговоримо методи, які використовувалися до рядка f.

Старе форматування рядків у Python

Існує два основних способи форматування рядка: % - форматування і str.format(). Але обидва методи мають деякі обмеження. Давайте коротко розповімо про ці методи.

myflixer

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

Вихід:

введення рядка в java
 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.' 

Вихід:

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

Вихід:

 0.0019360429723747075 

Як ми бачимо, f-рядок знаходиться вгорі списку.

Брекети

Щоб у коді з’явилися фігурні дужки, слід використовувати подвійні лапки таким чином. Давайте розберемося в наступному прикладі.

приклад -

 f'{{70 + 40}}' 

Вихід:

 {70 + 40} 

Якщо ми використовуємо потрійні дужки, у нашому рядку відображатимуться одинарні дужки. Давайте розберемося в наступному прикладі.

приклад -

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

Вихід:

 {94} 

Ми можемо відобразити більше дужок, якщо використовуємо більше ніж потрійні дужки.

приклад -

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

Вихід:

 {{70 + 4}} 

Зворотні косі риски

Ми можемо використовувати зворотні косі риски в частині рядка f-рядка. Однак ми не можемо використовувати зворотні косі риски для екранування в частині виразу f-рядка. Давайте розберемося в наступному прикладі.

подвійний до рядка java

приклад -

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

Висновок

Ми можемо використовувати будь-який один із трьох методів, але метод f-string забезпечує більш стислий, читабельний і зручний спосіб. Це швидше і менш схильний до помилок. Ми пояснили майже кожен можливий сценарій поза рядком і чому слід розглянути цей підхід у програмуванні.