Починаючи з версії 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-рядки - вони гнучкі і швидкі.
Коментарі
Дописати коментар