Форматовані рядки та інші кілер-фічі в Python 3.6

3 хв. читання

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+. Також його можна встановити самому в інших ОС, це просто.

Помітили помилку? Повідомте автору, для цього достатньо виділити текст з помилкою та натиснути Ctrl+Enter
Codeguida 5.8K
Приєднався: 8 місяців тому
Коментарі (0)

    Ще немає коментарів

Щоб залишити коментар необхідно авторизуватися.

Вхід / Реєстрація