Python 3 вийшов вже давно, але деякі люди та навіть цілі компанії все ще використовують другу версію. В той час до третьої версії додається все більше цікавих фіч: async/await, відсутність проблем з юнікодом та інше. Сьогодні ми поговоримо про одну з таких кілер-фіч, що була додана в Python 3.6 — f-strings
.
Як завжди, детально прочитати про них можна почитати у відповідному PEP. Ось базовий приклад їх використання:
Python 3.6.1 (...)
Type "help", "copyright", "credits" or "license" for more...
>>> name = 'Albert'
>>> f'Hello, {name}!'
'Hello, Albert!'
f-strings
або «форматовані рядки» це ще один спосіб форматування тексту. Можливо, вони вже вам не сподобалися. Я теж не відразу відчув всю їх силу. Вам може здатися, що це лише непотрібний синтаксичний цукор для string.format()
, але це не так.
Python вже є купа способів для форматування рядків, але присутність одного, інтуїтивного способу йде лише на користь для мови програмування. Тим паче, що до цього не було такого ж простого та потужного інструменту як f-strings
.
Як вони працюють
На перший погляд вам може здатися що це лише неявний виклик .format()
з передачею локального та глобального простору імен. Але це не так, і така реалізація була відхилена в процесі розробки. Натомість, ви можете думати про це ось так:
>>> f'Hello, {name}!'
# те саме що й
>>> 'Hello, ' + format(name) + '!'
Вбудована функція format
викликає в об'єкта магічний метод __format__
, що дозволяє різним об'єктам контролювати як вони будуть відформатовані. Також до цієї функції можна передавати аргументи-специфікатори.
>>> import datetime
>>> today = datetime.date.today()
>>> f'The year {today:%Y}'
'The year 2017'
# те саме що й
>>> 'The year ' + format(today, '%Y')
Оскільки вираз всередині фігурних дужок виконується в тому ж контексті, де розміщений форматований рядок, то ось такі конструкції теж працюють:
>>> data = dict(foo='bar')
>>> f'The answer is {data["foo"]}'
'The answer is bar'
>>> class Circle(object):
... color = 'red'
...
>>> circle = Circle()
>>> f'The circle is {circle.color}'
'The circle is red'
І навіть конструкції куди складніше, включаючи літерали, виклики функцій і навіть лямбди. Вони вам, скоріше за все, і не знадобляться, але все може бути:
>>> i = 10
>>> word = 'grease'
>>> f'Math: {i + 1}'
'Math: 11'
>>> f'Upper case: {word.upper()}'
'Upper case: GREASE'
>>> f'{(lambda x: x*2)(3)}'
'6'
І навіть більше в Python 3.6
Попри на всю крутість форматованих рядків, в Python 3.6 додали й інші цікаві фічі. Однією з них є нові словники, що працюють швидше й запам'ятовують порядок вставки ключів! Також там є асинхронні генератори, можливість використовувати асинхронні конструкції в генераторах списків та багато іншого.
Python 3.6 за умовчуванням доступний в Ubuntu 16.10+. Також його можна встановити самому в інших ОС, це просто.
Ще немає коментарів