Почему перед этой строкой стоит буква f? Введение в f-строки и форматирование строк

Как добавить свою переменную в строку в python? Если у меня есть чье-то имя, как мне его распечатать с дополнительной информацией, например приветственным сообщением?


определять Форматирование строк
существительное
Причудливый способ заставить строки/текст выглядеть так, как вы хотите, будь то с переменными, новыми строками, пробелами, заглавными буквами и т. д.
Пример: «Форматирование строки на выходе этого простого приложения командной строки великолепно, оно имеет цвета и все такое!»


Форматирование строк прошло долгий путь за последние несколько лет. Давайте совершим небольшое путешествие по памяти и посмотрим на старые способы форматирования строк, прокрутим вниз, чтобы увидеть несколько примеров f-строки.

1. Начиная с основ.

В Python все является объектом, включая строки. Это обеспечивает дополнительную гибкость, например: "a" * 4 == "aaaa"то есть вы можете «конкатенировать» строки путем сложения и умножения.

В старые добрые времена мы так и поступали. Возьмем, к примеру, классическое приложение hello world на python2.



name = input("What's your name? ")
print "Hello " + name

В этом примере мы используем самую простую доступную версию форматирования строк. Объединение (добавление) двух строк с помощью + символ.

Если вы сохраните этот код в hello_name.py и беги python3 hello_name.pyвы увидите вывод как Hello Henryгде Генри заменяется тем, что вы вводите.

Это отлично подходит для базовых сценариев и имеет смысл при чтении, но что, если мы хотим сделать что-то вроде "Hello " + name + ", looks like the weather will be " + weather_temp + " " + weather_scale + " degrees today.". Это все еще возможно, но определенно не очень легко читать.

Что, если мы хотим взять число вроде 123.45678 и распечатать как $123.46? Этот метод явно весьма ограничен, когда речь идет о форматировании строк.

2. Магия %.

Итак, вернемся к нашему примеру. Скажем, у нас есть число с плавающей запятой (число с десятичными знаками, а не целое), и мы хотим напечатать его как валюту, с запятыми и округлением. как нам это сделать?

amount = float(input("How much? "))  
print("This much? " + amount)

Если мы введем 1234.56789мы возвращаемся "This much? 1234.56789". Итак, как мы напечатаем это как сумму в долларах и центах?

Мы можем использовать нечто, называемое «оператором форматирования строки», или %. Вместо добавления строки в конце мы можем просто поместить символ %, за которым следует тип (например, d для целого числа, f для числа с плавающей запятой, s для строки и т. д.), а затем указать переменную для замены. Это обеспечивает (немного) более читаемый код.

Тогда наш пример выше будет таким:

amount = float(input("How much? "))  
print("This much? %f" % amount)

Но это все еще не помогает нам преобразовать 1234.56789 к $1,234.57. Для этого нам нужно использовать «флаги конверсии». Например, если мы форматируем число с плавающей запятой, мы можем заменить %f с %.2fи это округлит число с плавающей запятой до 2 знаков после запятой.

amount = float(input("How much? "))  
print("This much? $%.2f" % amount)

Итак, теперь наш вывод $1234.57но у нас до сих пор нет запятой для разделителя тысяч…

3. Вы не можете написать «форматирование строки» без форматирования!

Итак, все в python является объектом, объекты могут иметь методы (функции), так почему бы нам просто не добавить метод к строковому объекту, чтобы помочь нам форматировать строки?

Добро пожаловать string.format()

Это был большой шаг вперед для Python. Мы не только получили более читаемый способ форматирования строк (подробнее об этом в сносках), мы также получили более сложные правила форматирования.

Итак, вернемся к нашему примеру. Скажем, у нас есть число с плавающей запятой (число с десятичными знаками, а не целое), и мы хотим напечатать его как валюту, с запятыми и округлением. как нам это сделать?

amount = float(input("How much? "))  
print("This much? ${0:,.2f}".format(amount))

Наш вывод теперь This much? $1,234.57, но как? Таким образом, основной синтаксис формата заключается в том, что он принимает первый аргумент (значение после скобок, поэтому .format(first, second) имеет два аргумента, «первый» и «второй»), и помещает его в первый индекс (обозначается как 0), поэтому x = 123, "The number is {0}".format(x) возвращается The number is 123.

, говорит Python отформатировать число с запятыми, поэтому 1200000 становится 1 200 000 (если вы создаете международное приложение, помните, что в некоторых странах символы , и . меняются местами).

Итак, .format может делать все, что мы хотим. Тогда почему ты так любишь фа-струны?

4. Настоящая причина, по которой стринги изменят вашу жизнь

Вопреки распространенному мнению, разработка не направлена ​​(и не должна) на выполнение работы. Речь идет о выполнении работы Что жи таким образом, чтобы будущие разработчики могли понять а также продлевать.

String.format имеет все необходимые функции. Python 2.7 обладает всеми необходимыми функциями. На самом деле, C обладает всеми необходимыми функциями для решения практически любой задачи. Когда python обновился до версии 3, в язык были внесены некоторые радикальные, ломающие изменения, и хотя некоторые из них были связаны с производительностью, а некоторые — с функциональностью, мой личный фаворит, f-strings, был в первую очередь предназначен для прочность, удобочитаемость а также приспособляемость.

F-строки не привносят никаких новых функций, но они значительно повышают удобочитаемость и адаптируемость (они также повышают производительность, но для меня это побочный эффект).

Сначала рассмотрим простой пример:

name = "Jenny"
company = "Acme Inc."
print(f"Hi {name}, welcome to {company}.")

>>> 'Hi Jenny, welcome to Acme Inc'

Просто добавив f перед строкой, мы смогли ввести любую переменную, которая у нас есть в текущей строке. сфера, и вывести его в виде строки. Это не совсем революционно, но революционно то, насколько легко это понять.

В современном мире код не пишется один раз для выполнения функции, он пишется, тестируется, проверяется, модифицируется, расширяется и однажды может быть заменен. Читаемость является ключом к этому, и f-строки обеспечили огромный скачок в читабельности. Если бы вы вообще ничего не знали о python и посмотрели предыдущий пример, держу пари, вы могли бы догадаться, как выглядел вывод. Никогда не недооценивайте ценность удобочитаемости. С нашими простыми примерами это кажется слишком простым, но давайте рассмотрим более сложный пример, создание SQL-запроса.

 col1 = 'bar'
 col2 = 'baz'
 query = f'SELECT * FROM foo WHERE {col1} = ? AND {col2} = ?'
 cursor.execute(query, params)

Этот запрос возвращает все строки, в которых значения в столбцах «bar» и «baz» равны значениям, заданным в «params». Это не так захватывающе, но гораздо более ценно и более вероятно в корпоративной среде. Если мы перепишем это с % оператор, или .format() функция, быстро становится труднее читать.

Форматирование, доступное для f-строк, похоже на .format, поэтому я не буду включать его в этот документ, но надеюсь, что убедил вас в ценности f-строк. Для тестирования, удобочитаемости, расширяемости и многого другого.

Забавные факты

  1. Вы можете использовать как строчную, так и заглавную F, и форматирование строки будет одинаковым. f"The result is {result}" такой же как F"The result is {result}".

  2. Если вы хотите отформатировать строки в несколько строк, вы можете либо поставить f перед каждой строкой с переменной:

print(
  f"Hi {name}"
  "welcome to my post"
  f"you're {num_days} late"
)

Или вы можете просто использовать многострочные строки Python (обозначаемые тройными кавычками или тройными двойными кавычками):

print(
  f"""Hi {name}
  welcome to my post
  you're {num_days} late"""
)

Умные факты

  1. Форматирование строк является составным, то есть вы можете форматировать строки внутри строк. Скажем, вам нужно переменное количество десятичных знаков
decimals = 3
amount = float(input("How much? "))  
print(f"This much? ${amount:,.{decimals}f}")

С вводом 12312.123123вывод этого скрипта This much? $12,312.123.

Примечание. Пожалуйста, не делайте этого, это действительно трудно читать.

  1. Скажем, вы хотите использовать ключ dict внутри f-строки или любую другую кавычку, вы можете безопасно сделать это, если правильно чередуете " а также '.

Например.

data = {"x": 123}
print(f'The result is {data["x"]}')

или эквивалентно:

data = {"x": 123}
print(f"The result is {data['x']}")

Подпишись на меня в Твиттере (@hjegeorge) или же Середина для получения дополнительных сообщений и напишите мне, если вы хотите узнать больше о python, науке о данных, корпоративных веб-приложениях, devOps или о чем-либо еще!

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *