f-рядки у Python

Починаючи з версії 3.6 в Python з'явився новий тип рядків - f-рядки, які буквально означають «formatted string». Ці рядки покращують розуміння коду, а також працюють швидше ніж інші способи форматування. F-рядки задаються за допомогою литерала «f» перед лапками.

 >>> "звичайна рядок"
 >>> f "f-рядок"

 f-рядки - це п'ятий спосіб (sic!) форматування рядків в Python, який дуже схожий на використання методу format ().

Згадаймо всі 5 способів форматування.

 5 СПОСОБІВ ФОРМАТУВАННЯ РЯДКІВ

 1. Конкатенація. Брутальний спосіб форматування, в якому ми просто склеюємо кілька рядків з допомогою операції складання:

 >>> name = "Дмитро"
 >>> age = 25
 >>> print ( "Мене звуть" + name + ". Мені" + str (age) + "років.")
 >>> Мене звуть Дмитро. Мені 25 років.
 
2.% -форматування. Найпопулярніший спосіб, який перейшов в Python з мови С. Передавати значення в рядок можна через списки і кортежі, а також і за допомогою словника. У другому випадку значення поміщаються не по позиції, а відповідно до іменами.

 >>> name = "Дмитро"
 >>> age = 25
 >>> print ( "Мене звуть% s. Мені% d років."% (Name, age))
 >>> Мене звуть Дмитро. Мені 25 років.
 >>> print ( "Мене звуть% (name) s. Мені% (age) d років."% { "Name": name, "age": age})
 >>> Мене звуть Дмитро. Мені 25 років.

3. Template-рядки. Цей спосіб з'явився в Python 2.4, як заміна %-форматуванню (PEP 292), але популярним так і не став. Підтримує передачу значень по імені і використовує $ -сінтаксіс як в PHP.

 >>> from string import Template
 >>> name = "Дмитро"
 >>> age = 25
 >>> s = Template ( 'Мене звуть $ name. Мені $ age років.')
 >>> print (s.substitute (name = name, age = age))
 >>> Мене звуть Дмитро. Мені 25 років.
 
4. Форматування за допомогою методу format (). Цей спосіб з'явився в Python 3 в якості заміни %-форматуванню Він також підтримує передачу значень по позиції і по імені.

 >>> name = "Дмитро"
 >>> age = 25
 >>> print ( "Мене звуть {}. Мені {} років.". Format (name, age)
 >>> Мене звуть Дмитро. Мені 25 років.
 >>> print ( "Мене звуть {name} Мені {age} років.". Format (age = age, name = name)
 >>> Мене звуть Дмитро. Мені 25 років.

5. f-рядки. Форматування, яке з'явилося в Python 3.6 (PEP 498). Цей спосіб схожий на форматування за допомогою методу format (), але гнучкіше, читабельність і швидше.

 >>> name = "Дмитро"
 >>> age = 25
 >>> print (f "Мене звуть {name} Мені {age} років.")
 >>> Мене звуть Дмитро. Мені 25 років.
 
Занурення в F-РЯДКИ
f-рядки роблять дуже просту річ - вони беруть значення змінних, які є в поточній області видимості, і підставляють їх в рядок. У самому рядку вам лише потрібно вказати ім'я цієї змінної в фігурних дужках.

 >>> name = "Дмитро"
 >>> age = 25
 >>> print (f "Мене звуть {name} Мені {age} років.")
 >>> Мене звуть Дмитро. Мені 25 років.
 
f-рядки також підтримують розширене форматування чисел:

 >>> from math import pi
 >>> print (f "Значення числа pi: {pi: .2f}")
 >>> Значення числа pi: 3.14

 За допомогою f-рядків можна форматувати дату без виклику методу strftime ():

 >>> from datetime import datetime as dt
 >>> now = dt.now ()
 >>> print (f "Поточний час {now:% d.% M.% Y% H:% M}")
 >>> Поточний час 24.02.2017 15:51

Вони підтримують базові арифметичні операції. Так, прямо в рядках:

 >>> x = 10
 >>> y = 5
 >>> print (f "{x} x {y} / 2 = {x * y / 2}")
 >>> 10 x 5/2 = 25.0

 Дозволяють звертатися до значень списків за індексом:

 >>> planets = [ "Меркурій", "Венера", "Земля", "Марс"]
 >>> print (f "Ми живемо на планеті {planets [2]}")
 >>> Ми живем на планеті Земля

А також до елементів словника по ключу:

 >>> planet = { "name": "Земля", "radius": 6378000}
 >>> print (f "Планета {planet [ 'name']}. Радіус {planet [ 'radius'] / 1000} км.")
 >>> Планета Земля. Радіус 6378.0 км.

Причому ви можете використовувати як рядкові, так і числові ключі. Точно також як в звичайному Python коді:

 >>> digits = {0: 'нуль', 'one': 'один'}
 >>> print (f "0 - {digits [0]}, 1 - {digits [ 'one']}")
 >>> 0 - нуль, 1 - один

Ви можете викликати в f-рядках методи об'єктів:

 >>> name = "Дмитро"
 >>> print (f "Ім'я: {name.upper ()}")
 >>> Ім'я: ДМИТРО
 
А також викликати функції:

 >>> print (f "13/3 = {round (13/3)}")
 >>> 13/3 = 4
 
f-рядки дуже гнучкий і потужний інструмент для створення найрізноманітніших шаблонів.

 З усіма можливими f-рядків ви можете ознайомитись в PEP498.

 ПРОДУКТИВНІСТЬ
 F-рядки не тільки гнучкі, але і швидкі. І для порівняння продуктивності різних підходів до форматування я підготував два шаблони:

- простий, в який потрібно вставити всього два значення: рядок і число;
- складний, дані для якого збираються з різних змінних, а всередині відбувається перетворення дати, дійсного числа, а також округлення.

Фінальний простий рядок виглядає так:

 Привіт, мене звуть Дмитро. Мені 27 років.

 Складний рядок на виході такий:

 
 Сьогодні 24.02.2017.
 Ми живемо на планеті Земля. Її радіус 6378 км., А маса 5.973e + 24
 Період обертання планети навколо Сонця 365 днів.

 Далі я написав 5 функцій, кожна з яких повертає рядок отформатированную одним із способів, а після запустив кожну функцію багато разів. Приклад всіх функцій і тестового скрипта можете завантажити тут.


Далі я написав 5 функцій, кожна з яких повертає рядок отформатированную одним із способів, а після запустив кожну функцію багато разів. Приклад всіх функцій і тестового скрипта можете завантажити тут.

 Після недовгого тестування я отримав наступні результати:
 На простих прикладах f-рядки показують найкращі результати.
 На 25% швидше% -форматірованія і методу format ().

 
 На складних шаблонах f-рядки поводяться також як % -форматування
 (Різниця на користь% -форматування не перевищує величину похибки).
 А ось щодо методу format () f-рядки швидше на 27%.

 ВИСНОВОК
 Якщо ви використовуєте Python 3.6 і старше, то саме час використовувати f-рядки - вони гнучкі і швидкі.


Коментарі