English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Основной учебник Python

Контроль потока в Python

Функции в Python

Типы данных в Python

Файловые операции в Python

Объекты и классы в Python

Дата и время в Python

Высокий уровень знаний Python

Руководство по Python

Метод format() строки в Python: примеры использования и руководство

Методы строк Python

Метод format() строки форматирует указанное значение и вставляет его в строку с占位никами.
Маркеры используются для определения места параметра с помощью curly { }. Подробнее о маркерах можно узнать в разделе "Маркеры".
Метод format() возвращает отформатированную строку.

Синтаксис метода format():

template.format(p0, p1, ..., k0=v0, k1=v1, ...)

Здесь p0, p1, ... являются позиционными параметрами и k0, k1, ... имеют значения ключевых параметров v0, v1, ...

И, template - это смесь форматных кодов и маркеров параметров.

Параметры строки format()

Метод format() принимает любое количество параметров. Однако, они делятся на два типа:

  • Позиционные параметры - Список параметров, которые можно доступа через индекс параметра {index}

  • Ключевые параметры - Список параметров типа ключ=значение, где можно использовать ключ параметра {key} для доступа к параметру

Возврат значения строки format()

Метод format() возвращает отформатированную строку.

Как работает строка format()?

format() читает тип переданных ему параметров и форматирует их в соответствии с определенными в строке форматными кодами.

Для позиционных параметров

Здесь параметр 0 является строкой "Adam", параметр 1 является浮инговой числом 230.2346.

Внимание: В Python список параметров начинается с 0.

Строка "Hello {0}, your balance is {1:9.3f}" является шаблонной строкой. В ней содержатся коды форматирования.

Скобки curly { } служат просто маркерами для места параметра. В примере {0} является маркером для "Adam", {1:9.3f} является маркером для 230.2346.

Поскольку шаблонные строки указывают параметры format() как {0} и {1}, поэтому эти параметры являются позиционными параметрами. Их также можно указывать без номеров, потому что {} и Python внутри них преобразуют их в числа.

Внутри

  • Поскольку "Adam" является 0 шт.Параметр, поэтому его ставят на место {0}. Поскольку {0} не содержит других кодов форматирования, он не выполняет других операций.

  • Однако, первый параметр 230.2346 не такой. Здесь {1:9.3f} ставит 230.2346 на его место и выполняет операцию 9.3f.

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

  • Часть перед "." (9) минимальная ширина/заполнение, которую можно использовать для числа (230.2346). В этом случае, 230.2346 как минимум занимает 9 позиций, включая ".".
    Если не указан параметр выравнивания, то его выравнивают по правому краю других пробелов. (Для строк это выравнивание по левому краю.)

  • Часть после “.” (3) truncates десятичное значение (2346) до заданного значения. В этом случае, после 3346 truncates 2346.
    Оставшиеся цифры (46) будут округлены, вывод 235.

Для ключевых параметров

Мы используем примеры выше, чтобы показать различия между ключевыми и позиционными параметрами.

Здесь мы используем не только параметры, но и значения ключей в качестве параметров. То есть name="Adam" и blc=230.2346.

Поскольку эти параметрыreferenced по их ключам как {name} и {blc:9.3f}, их называют ключевыми или именованными параметрами.

Внутри

  • Знак подстановки {name} заменяется значением name - “Adam”. Поскольку он не содержит других кодов форматирования, он поместил “Adam”.

  • Для параметра blc = 230.2346, знакам подстановки {blc:9.3f} будет заменено значение 230.2346. Но перед заменой его, как в предыдущем примере, он выполняет операцию 9.3f.
    Вывод 230.235. Десятичное значение truncate после 3 цифр,其余 значения округляются. Кроме того, общая ширина распределена на 9, и слева оставлено два пробела.

Базовый формат с использованием format()

Метод format() позволяет использовать простые знаки подстановки для форматирования.

Пример 1: базовый формат по умолчанию, позиционные и ключевые параметры

# Значение по умолчанию
print("Привет {}, ваш баланс составляет {}.".format("Adam", 230.2346))
# Позиционные параметры
print("Привет {0}, ваш баланс составляет {1}.".format("Adam", 230.2346))
# Ключевые параметры
print("Привет {name}, ваш баланс составляет {blc}.".format(name="Adam", blc=230.2346))
# Комбинированные параметры
print("Привет {0}, ваш баланс составляет {blc}.".format("Adam", blc=230.2346))

Когда вы запустите этот программа, все выводы будут одинаковыми:

Привет, Адам, ваш баланс составляет 230.2346.
Привет, Адам, ваш баланс составляет 230.2346.
Привет, Адам, ваш баланс составляет 230.2346.
Привет, Адам, ваш баланс составляет 230.2346.

Внимание:Для комбинированных параметров ключевые параметры должны всегда следовать после позиционных параметров.

Форматирование чисел с помощью format()

Вы можете использовать следующие знаки форматирования для настройки формата чисел:

тип формата чисел
ТипЗначение
dдекимальное целое
cсоответствующий символ Unicode
bбинарный формат
oФормат восьмеричного числа
xФормат шестнадцатеричного числа (нижний регистр)
XФормат шестнадцатеричного числа (заглавные буквы)
nКак и с «d». Исключение: использование разделителя чисел текущей языковой среды
eИндексное представление. (нижний регистр e)
EСимвол индекса (заглавные буквы E)
fОтображение фиксированной точки (по умолчанию: 6)
FКак и с «f». Исключение: «inf» отображается как «INF» и «nan» как «NAN»
gОбщий формат. Округляйте числа до p значащих цифр. (по умолчанию: 6)
GКак и с «g». Исключение: если количество很大, переключитесь на «E».
%Процент. Умножьте на 100 и завершите символом %.

Пример 2: простое форматирование чисел

# Параметр целого числа
print("Число:{:d}".format(123))
# Параметр с плавающей запятой
print("Число с плавающей запятой:{:f}".format(123.4567898))
# Форматирование в восьмеричном, двоичном и шестнадцатеричном формате
print("bin: {0:b}, oct: {0:o}, hex: {0:x}".format(12))

Когда вы запустите этот программ, вывод будет:

Число: 123
Число с плавающей запятой:123.456790
bin: 1100, oct: 14, hex: c

Пример 3: форматирование чисел с помощью int и float

# Целое число с минимальной шириной
print("{:5d}".format(12))
# Ширина не действует на числа длиннее заполнения
print("{:2d}".format(1234))
# Заполнение чисел с плавающей запятой
print("{:8.3f}".format(12.2346))
# Минимальная ширина целого числа 0
print("{:05d}".format(12))
# Заполнение чисел нулями
print("{:08.3f}".format(12.2346))

Когда вы запустите этот программ, вывод будет:

   121234  12.235000120012.235

Здесь:

  • В первом предложении {:5d} использует целые числа и указывает минимальную ширину 5. Поскольку не указан способ выравнивания, он выравнивается вправо.

  • Во втором предложении вы можете видеть, что ширина (2) меньше числа (1234), поэтому слева не нужно оставлять никаких пробелов, и число не будет обрезано.

  • В отличие от целых чисел, числа с плавающей запятой имеют целую и дробную части. И определено, что минимальная ширина этого числа включает в себя обе части, включая «.».

  • В третьем предложении {:8.3f} урезает дробную часть до 3 знаков, оканчивая последние два знака с округлением. И теперь это число 12.235, общая ширина 8, и 2 места сохраняются слева.

  • Если нужно заполнить оставшиеся места нулями, поместите ноль перед форматирователем. Это подходит для целых чисел и чисел с плавающей запятой: {:05d} и {:08.3f}.

Пример 4: Форматирование чисел с знаком

# Отображать знак +
print("{:+f} {:+f}".format(12.23, -12.23))
# Отображать только знак -
print("{:-f} {:-f}".format(12.23, -12.23))
# Отображать пробел перед знаком +
print("{: f} {: f}".format(12.23, -12.23))

Когда вы запустите этот программ, вывод будет:

+12.230000 -12.230000
12.230000 -12.230000 12.230000 -12.230000

Форматирование чисел

Когда указывается определенная ширина числа, операторы < и > используются для выравнивания. ^>=

Форматирование чисел
ТипЗначение
<Левое выравнивание оставшееся пространство
^Центрировать оставшееся пространство
>Справа выравнивать оставшееся пространство
=Форсировать знак (+)(-) на крайнем левом месте

Пример 5: Форматирование чисел с левым, правым и центральным выравниванием

# Целое число с правым выравниванием
print("{:5d}".format(12))
# Центрированное浮ательное число
print("{:^10.3f}".format(12.2346))
# Целое число с левым выравниванием и заполнением нулями
print("{:<05d}".format(12))
# Центрированное浮ательное число
print("{:=8.3f}".format(-12.2346))

Когда вы запустите этот программ, вывод будет:

   12  12.235  12000- 12.235

Внимание:Для третьего примера, левое выравнивание с заполнением нулями может привести к проблемам, этот пример возвращает 12000 вместо 12.

Форматирование строки с использованием format()

Как числа, строки можно форматировать с использованием format() аналогичным образом.

Пример 6: Форматирование строки с заполнением и выравниванием

# Строка с левым заполнением
print("{:5}".format("cat"))
# Строка с правым заполнением
print("{:>5}".format("cat"))
# Строка с центрированным заполнением
print("{:^5}".format("cat"))
# Строка с центрированным заполнением
# и '*' как символы заполнения
print("{:*^5}".format("cat"))

Когда вы запустите этот программ, вывод будет:

cat  cat cat *cat*

Пример 7: Использование format() для обрезания строки

# Обрезание строки до 3 символов
print("{:.3}".format("caterpillar"))
# Обрезание строки до 3 символов
# и заполнение
print("{:5.3}".format("caterpillar"))
# Обрезание строки до 3 символов,
# Заполнение и центрирование
print("{:^5.3}".format("caterpillar"))

Когда вы запустите этот программ, вывод будет:

catcat    cat

Форматирование членов класса и словаря с использованием format()

Pythoninternallygetattr() используется в виде " .age" для членов класса. И он использует __getitem__() для поиска членов字典 в виде "[index]".

Пример 8: форматирование членов класса с использованием format()

# define Person class
class Person:
    age = 23
    name = "Adam"
# Форматирование age
print("{p.name}'年龄 is: {p.age}".format(p=Person()))

Когда вы запустите этот программ, вывод будет:

Adam's 年龄 is: 23

Здесь объект Person передается как ключевые параметры p.

В шаблонных строках, .name и .age используются для доступа к name и age Person.

Пример 9: форматирование членов словаря с использованием format()

# Определение класса Person
person = {'age': 23, 'name': 'Adam'}
# Форматирование age
print("{p[name]}'s age is: {p[age]}".format(p=person))

Когда вы запустите этот программ, вывод будет:

Adam's age is: 23

Как и в классе, словарь person передается как ключевые параметры p.

В шаблонных строках, [name] и [age] используются для доступа к name и age人员的.

Есть более простой способ использовать Python для форматирования строк с помощью str.format(**mapping).

# Определение класса Person
person = {'age': 23, 'name': 'Adam'}
# Форматирование age
print("{name}'s age is: {age}".format(**person))

** - это параметр форматирования (минимальная ширина поля).

Использование format() в качестве параметра форматирования

Вы также можете динамически передавать коды форматирования, такие как точность, выравнивание, символ заполнения в качестве позиционных или ключевых параметров.

Пример 10: динамическая форматировка с использованием format()

# Динамическая строковая шаблонизация
string = "{:{fill}{align}{width}}"
# Передача кода форматирования в качестве параметра
print(string.format('cat', fill='*', align='^', width=5))
# Динамический шаблон форматирования с плавающей запятой
num = "{:{align}{width}.{precision}f}"
# Передача кода форматирования в качестве параметра
print(num.format(123.236, align='<', width=8, precision=2))

При запуске этого программы, вывод будет:

**cat**123.24

Здесь:

  • В первом примере "cat" является позиционным аргументом для форматирования. Аналогично, fill='*' и align='^' и width=5 являются ключевыми параметрами.

  • В шаблонной строке эти ключевые параметры не являются обычными строками для печати, а являются реальными кодами форматирования fill, align и width.
    Параметры заменяются соответствующими именованными占ачами, и строка "cat" устанавливается в соответствующем формате.

  • Аналогично, во втором примере, 123.236 является позиционным аргументом, а align, width и precision передаются в шаблонную строку в качестве кода форматирования.

Другие параметры форматирования с format()

format() также поддерживает специфические для типа параметры форматирования, такие как форматирование даты и времени и форматирование комплексных чисел.

Внутри format() вызывается __format__() от datetime, а format() доступ к свойствам комплексного числа.

Вы можете легко перезаписать метод __format__() любого объекта для пользовательской настройки форматирования.

Пример 11: Использование format() и перезаписи __format__() для специфического форматирования типа

import datetime
# Форматирование даты и времени
date = datetime.datetime.now()
print("Текущее время: {:%Y/%m/%d %H:%M:%S}".format(date))
# Форматирование комплексных чисел
complexNumber = 1+2j
print("Реальная часть: {0.real} и мнимая часть: {0.imag}".format(complexNumber))
# Создание пользовательской функции __format__
class Person:
    def __format__(self, format):
        if(format == "age"):
            return "23"
        return "None"
print("Возраст Адама: {:age}".format(Person()))

При запуске этого программы, вывод будет:

Текущее время: 2020/04/17 14:33:02
Реальная часть: 1.0 и мнимая часть: 2.0
Возраст Адама: 23

Здесь:

  • Для datetime:
    Текущая дата и время передаются в метод format() в качестве параметра местоположения.
    И, внутренне используя метод __format__(), format() может получить год, месяц, день, час, минуту и секунду.

  • Для комплексных чисел:
    1 + 2j внутренне преобразуется в объект ComplexNumber.
    Затем доступ к свойствам real и imag, числа форматируются.

  • Переопределение __format__():
    Как и datetime, вы можете переопределить свой метод __format__() для自定义 форматирования, когда вы обращаетесь к {age}, формат возвращает возраст

Вы также можете использовать функции __str__() и __repr__() объектов, используя сокращенный форматный символ format().

Как и __format__(), вы можете легко переопределить методы __str__() и __repr__() объектов.

Пример 12: Использование __str()__ и __repr()__ сокращенно до !r и !s с помощью format()

# __str__() и __repr__() сокращены до !r и !s
print("Цитаты: {0!r}, Без цитат: {0!s}".format("cat"))
# __str__() и __repr__() реализации класса
class Person:
    def __str__(self):
        return "STR"
    def __repr__(self):
        return "REPR"
print("repr: {p!r}, str: {p!s}".format(p=Person()))

При запуске этого программы, вывод будет:

Цитаты: 'cat', Без цитат: cat
repr: REPR, str: STR

Методы строк Python