English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Метод format() строки форматирует указанное значение и вставляет его в строку с占位никами.
Маркеры используются для определения места параметра с помощью curly { }. Подробнее о маркерах можно узнать в разделе "Маркеры".
Метод format() возвращает отформатированную строку.
Синтаксис метода format():
template.format(p0, p1, ..., k0=v0, k1=v1, ...)
Здесь p0, p1, ... являются позиционными параметрами и k0, k1, ... имеют значения ключевых параметров v0, v1, ...
И, template - это смесь форматных кодов и маркеров параметров.
Метод format() принимает любое количество параметров. Однако, они делятся на два типа:
Позиционные параметры - Список параметров, которые можно доступа через индекс параметра {index}
Ключевые параметры - Список параметров типа ключ=значение, где можно использовать ключ параметра {key} для доступа к параметру
Метод 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() позволяет использовать простые знаки подстановки для форматирования.
# Значение по умолчанию 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.
Внимание:Для комбинированных параметров ключевые параметры должны всегда следовать после позиционных параметров.
Вы можете использовать следующие знаки форматирования для настройки формата чисел:
Тип | Значение |
---|---|
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 и завершите символом %. |
# Параметр целого числа 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
# Целое число с минимальной шириной 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}.
# Отображать знак + 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
Когда указывается определенная ширина числа, операторы < и > используются для выравнивания. ^>=
Тип | Значение |
---|---|
< | Левое выравнивание оставшееся пространство |
^ | Центрировать оставшееся пространство |
> | Справа выравнивать оставшееся пространство |
= | Форсировать знак (+)(-) на крайнем левом месте |
# Целое число с правым выравниванием 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() аналогичным образом.
# Строка с левым заполнением print("{:5}".format("cat")) # Строка с правым заполнением print("{:>5}".format("cat")) # Строка с центрированным заполнением print("{:^5}".format("cat")) # Строка с центрированным заполнением # и '*' как символы заполнения print("{:*^5}".format("cat"))
Когда вы запустите этот программ, вывод будет:
cat cat cat *cat*
# Обрезание строки до 3 символов print("{:.3}".format("caterpillar")) # Обрезание строки до 3 символов # и заполнение print("{:5.3}".format("caterpillar")) # Обрезание строки до 3 символов, # Заполнение и центрирование print("{:^5.3}".format("caterpillar"))
Когда вы запустите этот программ, вывод будет:
catcat cat
Pythoninternallygetattr() используется в виде " .age" для членов класса. И он использует __getitem__() для поиска членов字典 в виде "[index]".
# 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.
# Определение класса 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))
** - это параметр форматирования (минимальная ширина поля).
Вы также можете динамически передавать коды форматирования, такие как точность, выравнивание, символ заполнения в качестве позиционных или ключевых параметров.
# Динамическая строковая шаблонизация 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__() от datetime, а 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__() объектов.
# __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