Так что пару месяцев назад, я написал всеобъемлющий блог на Mypy. Сегодня я планирую сделать то же самое с F-струнами, положив все, что знаю о них в единый источник знаний. Это потрясающая функция Python, и я надеюсь, что вы получите чему-то новое об этом ✨
Показатель
- Что такое F-string?
- Простые примеры
- Краткая история форматирования строки
- Почему F-струны
- Больше примеров
- Прокладки/усечение
- Выравнивание
- Округление номеров
- Преобразование типов
- Добавление запятых в большие номера
- Специальный синтаксис
- ! S,! R и! a
- {x= } синтаксис
- Форматирование данных
- Вложенный форматирование
- Пользовательское форматирование с использованием __format__
- Ограничения
- Вывод
Что такое F-string?
” F-strings »- это функция, добавленная в Python в версии 3.6, и это, по сути, но новый, более лаконичный способ встроить значения внутри строк.
Они называются F-струнами из-за синтаксиса: вы положите F
Перед литералом строки, как так:
string = f'this is an f-string'
Простые примеры
Вот несколько основных примеров о том, как использовать F-Strings, чтобы начать:
>>> name, birth_year = 'Tushar', 2000 >>> print(f'I am {name}, and I was born in {birth_year}') I am Tushar, and I was born in 2000 >>> import datetime; now = datetime.datetime.now() >>> print(f'I am {now.year - birth_year} years old') I am 21 years old >>> age = now.year - birth_year >>> print(f'I am {"an adult" if age >= 18 else "a child"}.') I am an adult. >>>
Краткая история форматирования строки
Форматирование строки в Python дается давно. Оригинальное форматирование с использованием %
Знак существовал в Python с момента версии 1.x (и даже до этого в C, который находится в том, где происходит вдохновение этой функции). Это позволило вам делать большинство строк форматирования очень легко, хотя синтаксис был немного необычным: он использует %
Флаги в вашей строке, которые заменяются значениями, в которых вы проходите. Вот пример:
>>> city = 'London' >>> print('She lives in %s since %d' % (city, 2000)) She lives in London since 2000 >>>
Там есть куча этих %
Узоры, и каждый из них имеет значение:
% s
– Нить%c
– символ (ASCII/Unicode)%d
– цифры (целое число)% f
– Поплавки% x
– шестнадцатеричное число и т. Д.
Каждое из них можно модифицировать с большим количеством информации, таких как прокладки и выравнивание, например:
% 9s
означает строку длины 9.% -7d
означает целое число длины 7, но выровненный левый Отказ
>>> print('%15f seconds' % 31.415926) 31.415926 seconds >>> print('%-15f seconds' % 31.415926) 31.415926 seconds >>>
В конце концов, люди поняли, что %
Синтаксис заимствован у C, может быть не самый читаемый способ форматирования строк. Таким образом, в Python 3.0 (наряду 2,6) был добавлен новый метод ул ...| Тип данных:
str.format Отказ Это было не только более очевидно в том, что он делал, он добавил кучу новых функций, таких как динамические типы данных, выравнивание центра, форматирование на основе индекса и указание персонажей для заполнения. Вот несколько примеров:
>>> month = 'May' >>> print('I was born in {}.'.format(month)) I was born in May >>> blog_title = 'What the f-string?' >>> print('{title:-^30}'.format(title=blog_title)) ------What the f-string?------ >>> print('{:_<15f} seconds'.format(31.415926)) 31.415926______ seconds >>> print('{:>15f} seconds'.format(31.415926)) 31.415926 seconds
Обратите внимание, что если вы не укажете символ выравнивания, используя <
, >
или ^
, это будет всегда по умолчанию для левого выравнивания. Это отличается от %
– Формат, как это по умолчанию для правильного выравнивания для чисел.
Вместе с str.format
Метод, есть также встроенный формат
Функция, которая делает то же самое.
Для намного больше информации о %
ФОРМАТ и str.format
и все их (много) особенности, направляйтесь к pyformat.info. . Это очень полезно в качестве ссылки на функции и синтаксис.
Почему F-струны?
Одна вещь, которую вы должны знать, это то, что str.format ()
Можете уже сделать (почти) все, что может сделать F-струны. Вам может быть интересно, – почему F-Strings созданы в первую очередь? И зачем Я заботиться о них? “
Ну, это по двум причинам:
- Это путь более интуитивно понятным , и
- Это Поиск более читаемое Отказ
Вот сравнение:
>>> name, age = 'Mark', 31 >>> # str.format version >>> print('Hi, I'm {0} and I'm {1} years old.'.format(name, age) Hi, I'm Mark and I'm 31 years old. >>> # f-string version >>> print(f'Hi, I'm {name} and I'm {age} years old.') Hi, I'm Mark and I'm 31 years old.
Эти два свойства, будучи интуитивным и читаемым, являются частью основной философии Python (см. Zen of Python ).
Больше примеров
Теперь несколько примеров во всем, что вы можете сделать с F-струнами.
Прокладки/усечение
>>> pi = 3.141592 >>> print(f'{pi}') 3.141592 >>> print(f'{pi:10}') # padding to make length 10 3.141592 >>> print(f'{pi:010}') # padding with zeroes 003.141592 >>> print(f'{pi:.3}') # 3 digits total, ignoring decimal 3.14 >>> string = "Hello! this is a string" >>> print(f'{string:.6}') # 6 characters 'Hello!'
Выравнивание
>>> heading = 'Test' >>> print(f'{heading:>20}') Test >>> print(f'{heading:~>20}') # specify alignment for custom padding ~~~~~~~~~~~~~~~~Test >>> print(f'{heading:_<20}') Test________________ >>> print(f'{heading:=^20}') ========Test======== >>>
Округление номеров
>>> num = 2.136 >>> print(f'{num}') 2.136 >>> print(f'{num:.3}') # Rounded up 2.14 >>> print(f'{num:.2}') # Rounded down 2.1 >>>
Преобразование типов
>>> print(f'{42:c}') # int to ascii * >>> print(f'{604:f}') # int to float 604.000000 >>> print(f'{84:.2f}%') 84.00% >>> print(f'{604:x}') # int to hex 25c >>> print(f'{604:b}') # int to binary 1001011100 >>> print(f'{604:0>16b}') # int to binary, with zero-padding 0000001001011100 >>>
Добавление запятых в большие номера
>>> large_num = 12_345_678 # int syntax supports underscores :D >>> print(f'{large_num}') 12345678 >>> print(f'{large_num:,}') 12,345,678
Специальный синтаксис
Есть несколько специальных синтаксисов, которые не существуют в оригинале %
ФОРМАТ:
! S! R и! a
>>> from datetime import datetime >>> datetime.now() # repr value datetime.datetime(2021, 7, 6, 2, 21, 56, 698285) >>> print(datetime.now()) # str value 2021-07-06 02:22:02.772826 >>> print(f'{datetime.now()}') # str value by default 2021-07-06 02:22:14.357562 >>> print(f'{datetime.now()!r}') # repr value datetime.datetime(2021, 7, 6, 2, 22, 17, 709937) >>> print(f'{datetime.now()!s}') # str value 2021-07-06 02:22:20.081837 >>> sparkles = '✨' >>> print(f'{sparkles}') ✨ >>> print(f'{sparkles!a}') # ascii-safe value '\u2728'
Форматирование данных
>>> from datetime import datetime >>> print(f'{datetime.now():%A, %B %d %Y}') Tuesday, July 06 2021
Для получения дополнительной информации о %
Коды специально для объектов DateTime, проверьте документацию для datetime.strftime
или проверить strftime.org Отказ
{x= } синтаксис
Это новый синтаксис, который был добавлен в Python 3.8, и он поможет вам быстро распечатать значение переменной, обычно для целей отладки. По сути, f '{abc =}'
такой же, как f'abc = {abc! r} '
Отказ
>>> x, y = 3, 5 >>> print(f'{x=}') x=3 >>> print(f'{x = }') x = 3 >>> x, y = y, x+y >>> print(f'{x=} {y=}') x=5 y=8 >>> string = 'test'.center(10, '*') >>> print(f'{string = }') string = '***test***' >>> print(f'{10 * 2 = }') 10 * 2 = 20 >>>
Вложенный форматирование
Так как мы иногда можем иметь довольно сложные спецификации формата, такие как ~ ^ 30s
или 0> 12, .2F
Имеет смысл иметь возможность извлечь их в переменные. И это именно то, что вложенное форматирование Позвольте нам сделать.
Некоторые вещи, которые вы можете сделать с
- Переменная длина прокладки
>>> string = 'Python' >>> size = 20 >>> print(f'{string:{size}}') ~~~~~~~Python~~~~~~~ >>>
- Помещая в формате SPEC в виде переменной или в виде нескольких переменных:
from math import pi digits = int(input('Enter number of digits of pi: ')) length = int(input('Enter string length: ')) alignment = input('Enter alignment (<, > or ^): ') padding_char = input('Enter padding character: ') print(f'{pi:{padding_char}{alignment}{length}.{digits}}')
Вывод:
Enter number of digits of pi: 8 Enter string length: 30 Enter alignment (<, > or ^): ^ Enter padding character: _ __________3.1415927___________
Пользовательское форматирование с использованием __format__
Вы можете определить пользовательские обработки формата в своих собственных объектах, переопределяя __Format__
Метод на объекте Fixter. Это позволяет определять (в основном) произвольную семантику форматирования.
Вот пример, с более разумными именами для форматирования DateTime:
from datetime import datetime class BetterDatetime(datetime): substitutions = { '%day': '%A', '%date': '%d', '%monthname': '%B', '%month': '%m', '%year': '%Y' } def __format__(self, format_spec): for token, replacement in self.substitutions.items(): format_spec = format_spec.replace(token, replacement) return super().__format__(format_spec) print(f'Today is {BetterDatetime.now():%day, %date %monthname %year}') # Output: Today is Monday, 8 July 2021
Ограничения
Как удивительно, как F-Strings, они не являются всеми и конец – все форматирование строк в Python. (Но они очень близко!)
Некоторые нитепики с моей стороны о F-струнах:
Вы не можете отделить шаблон строки из встроенных данных. В str.format вы можете хранить сами строки как шаблоны в отдельном файле, как
текст
Отказ Тогда вы можете импортироватьтекст
и использоватьtext.format (user = ...)
. Вы не можете сделать это с F-струнами.F-струны работают только в Python 3.6+, а
{x =}
Синтаксис работает только в Python 3.8+Также нет реальной замены для
str.format_map
Способ с использованием F-струн.
Вывод
Все вообще, F-Strings потрясающие, и все должны их использовать: P
В любое, если у вас есть какие-либо вопросы или предложения, бросьте их ниже. Я хотел бы услышать от вас ✨
Оригинал: “https://dev.to/tusharsadhwani/what-the-f-strings-391c”