字符串 format() 方法将给定的字符串格式化为 Python 中更好的输出。
用法:
template.format(p0, p1, ..., k0=v0, k1=v1, ...)
这里,p0, p1,...
是位置参数,k0, k1,...
是关键字参数,其值分别为 v0, v1,...
。
而且,template
是格式代码与参数占位符的混合。
参数:
format()
方法采用任意数量的参数。但是,分为两类参数:
- 位置参数- 可以通过花括号内的参数索引访问的参数列表
{index}
- 关键字参数- key=value 类型的参数列表,可以使用花括号内的参数键访问
{key}
返回:
format()
方法返回格式化的字符串。
字符串 format() 如何工作?
format()
读取传递给它的参数类型,并根据字符串中定义的格式代码对其进行格式化。
对于位置参数
这里,参数 0 是字符串 "Adam",参数 1 是浮点数 230.2346。
注意:Python 中的参数列表从 0 开始。
字符串"Hello {0}, your balance is {1:9.3f}"
是模板字符串。这包含用于格式化的格式代码。
花括号只是要放置的参数的占位符。在上面的示例中,{0}
是 "Adam"
的占位符,而 {1:9.3f}
是 230.2346
的占位符。
由于模板字符串将 format()
参数表示为 {0}
和 {1}
,因此参数是位置参数。它们都可以在没有数字的情况下引用,因为 {}
并且 Python 在内部将它们转换为数字。
在内部,
- 自从
"Adam"
是 0th论点,它被放置在{0}
.自从,{0}
不包含任何其他格式代码,它不执行任何其他操作。 - 但是,情况并非如此 1st参数
230.2346
.这里,{1:9.3f}
地方230.2346
在其位置并执行操作 9.3f。 - f 指定处理浮点数的格式。如果没有正确指定,它将给出一个错误。
- "." (9) 之前的部分指定数字 (230.2346) 可以采用的最小宽度/填充。在这种情况下,230.2346 至少分配了 9 个位置,包括 "."。
如果未指定对齐选项,则将其对齐到剩余空格的右侧。 (对于字符串,它左对齐。) - "." (3) 之后的部分将小数部分 (2346) 截断为给定的数字。在这种情况下,2346 在 3 个位置后被截断。
剩余数字 (46) 四舍五入输出 235。
对于关键字参数
我们使用上面的相同示例来显示关键字和位置参数之间的区别。
在这里,我们不仅使用了参数,还使用了参数的键值对。即 name="Adam"
和 blc=230.2346
。
由于这些参数被它们的键引用为 {name}
和 {blc:9.3f}
,因此它们被称为关键字或命名参数。
在内部,
- 占位符
{name}
被名称的值替换 - "Adam"。由于它不包含任何其他格式代码,因此放置了"Adam"。 - 对于参数 blc=230.2346,占位符
{blc:9.3f}
替换为值 230.2346。但是在替换它之前,像前面的例子一样,它对其执行 9.3f 操作。
这输出 230.235。小数部分在 3 位后被截断,其余数字四舍五入。同样,总宽度被分配为 9,在左侧留下两个空格。
format() 的基本格式设置
format()
方法允许使用简单的占位符进行格式化。
示例 1:默认、位置和关键字参数的基本格式
# default arguments
print("Hello {}, your balance is {}.".format("Adam", 230.2346))
# positional arguments
print("Hello {0}, your balance is {1}.".format("Adam", 230.2346))
# keyword arguments
print("Hello {name}, your balance is {blc}.".format(name="Adam", blc=230.2346))
# mixed arguments
print("Hello {0}, your balance is {blc}.".format("Adam", blc=230.2346))
输出
Hello Adam, your balance is 230.2346. Hello Adam, your balance is 230.2346. Hello Adam, your balance is 230.2346. Hello Adam, your balance is 230.2346.
注意:在混合参数的情况下,关键字参数必须始终跟随位置参数。
使用format() 格式化数字
您可以使用下面给出的格式说明符来格式化数字:
类型 | 意义 |
---|---|
d | 十进制整数 |
c | 对应的 Unicode 字符 |
b | 二进制格式 |
o | 八进制格式 |
x | 十六进制格式(小写) |
X | 十六进制格式(大写) |
n | 与'd' 相同。除了它使用当前区域设置作为数字分隔符 |
e | index 符号。 (小写字母 e) |
E | index 符号(大写 E) |
f | 显示定点编号(默认值:6) |
F | 与'f' 相同。除了将 'inf' 显示为 'INF' 和 'nan' 显示为 'NAN' |
g | 一般格式。将数字四舍五入为 p 个有效数字。 (默认精度:6) |
G | 与'g' 相同。如果数量很大,则切换到 'E' 除外。 |
% | 百分比。乘以 100 并将 % 放在末尾。 |
示例 2:简单的数字格式
# integer arguments
print("The number is:{:d}".format(123))
# float arguments
print("The float number is:{:f}".format(123.4567898))
# octal, binary and hexadecimal format
print("bin: {0:b}, oct: {0:o}, hex: {0:x}".format(12))
输出
The number is: 123 The number is:123.456790 bin: 1100, oct: 14, hex: c
示例 3:使用 int 和 float 填充的数字格式
# integer numbers with minimum width
print("{:5d}".format(12))
# width doesn't work for numbers longer than padding
print("{:2d}".format(1234))
# padding for float numbers
print("{:8.3f}".format(12.2346))
# integer numbers with minimum width filled with zeros
print("{:05d}".format(12))
# padding for float numbers filled with zeros
print("{:08.3f}".format(12.2346))
输出
12 1234 12.235 00012 0012.235
这里,
- 在第一条语句中,
{:5d}
采用整数参数并指定最小宽度为 5。由于未指定对齐方式,因此它向右对齐。 - 在第二个语句中,您可以看到宽度 (2) 小于数字 (1234),因此它不会向左占用任何空间,但也不会截断数字。
- 与整数不同,浮点数同时具有整数和小数部分。并且,定义为数字的最小宽度适用于整个两个部分,包括".".
- 在第三个语句中,
{:8.3f}
将小数部分截断为 3 位,将最后 2 位四舍五入。而且,这个数字现在是 12.235,整体宽度为 8,向左留出 2 个位置。 - 如果您想用零填充剩余的位置,请在格式说明符之前放置一个零。它适用于整数和浮点数:
{:05d}
和{:08.3f}
。
示例 4:有符号数字的数字格式
# show the + sign
print("{:+f} {:+f}".format(12.23, -12.23))
# show the - sign only
print("{:-f} {:-f}".format(12.23, -12.23))
# show space for + sign
print("{: f} {: f}".format(12.23, -12.23))
输出
+12.230000 -12.230000 12.230000 -12.230000 12.230000 -12.230000
带对齐的数字格式
运算符<, ^, > and =
在为数字分配一定宽度时用于对齐。
类型 | 意义 |
---|---|
< | 与剩余空间左对齐 |
^ | 中心对齐到剩余空间 |
> | 与剩余空间右对齐 |
= | 强制带符号 (+) (-) 到最左边的位置 |
示例 5:具有左对齐、右对齐和居中对齐的数字格式
# integer numbers with right alignment
print("{:5d}".format(12))
# float numbers with center alignment
print("{:^10.3f}".format(12.2346))
# integer left alignment filled with zeros
print("{:<05d}".format(12))
# float numbers with center alignment
print("{:=8.3f}".format(-12.2346))
输出
12 12.235 12000 - 12.235
注意:用零填充整数的左对齐可能会导致问题,如第三个示例,它返回 12000,而不是 12。
使用format() 格式化字符串
作为数字,可以使用与 format()
类似的方式格式化字符串。
示例 6:使用填充和对齐的字符串格式化
# string padding with left alignment
print("{:5}".format("cat"))
# string padding with right alignment
print("{:>5}".format("cat"))
# string padding with center alignment
print("{:^5}".format("cat"))
# string padding with center alignment
# and '*' padding character
print("{:*^5}".format("cat"))
输出
cat cat cat *cat*
示例 7:使用 format() 截断字符串
# truncating strings to 3 letters
print("{:.3}".format("caterpillar"))
# truncating strings to 3 letters
# and padding
print("{:5.3}".format("caterpillar"))
# truncating strings to 3 letters,
# padding and center alignment
print("{:^5.3}".format("caterpillar"))
输出
cat cat cat
使用 format() 格式化类和字典成员
Python 在内部使用 getattr()
作为类成员,格式为 ".age"。并且,它使用__getitem__()
查找字典成员,格式为"[index]"。
示例 8:使用 format() 格式化类成员
# define Person class
class Person:
age = 23
name = "Adam"
# format age
print("{p.name}'s age is: {p.age}".format(p=Person()))
输出
Adam's age is: 23
在这里,Person
对象作为关键字参数 p
传递。
在模板字符串中,Person 的 name
和 age
分别使用 .name
和 .age
访问。
示例 9:使用 format() 格式化字典成员
# define Person dictionary
person = {'age': 23, 'name': 'Adam'}
# format age
print("{p[name]}'s age is: {p[age]}".format(p=person))
输出
Adam's age is: 23
与类类似,person
字典作为关键字参数 p
传递。
在模板字符串中,人员的name
和age
分别使用[name]
和[age]
访问。
使用 str.format(**mapping)
在 Python 中格式化字典有一种更简单的方法。
# define Person dictionary
person = {'age': 23, 'name': 'Adam'}
# format age
print("{name}'s age is: {age}".format(**person))
**
是格式参数(最小字段宽度)。
使用 format() 将参数作为格式代码
您还可以动态传递格式代码,如精度、对齐、填充字符作为位置或关键字参数。
示例 10:使用 format() 进行动态格式化
# dynamic string format template
string = "{:{fill}{align}{width}}"
# passing format codes as arguments
print(string.format('cat', fill='*', align='^', width=5))
# dynamic float format template
num = "{:{align}{width}.{precision}f}"
# passing format codes as arguments
print(num.format(123.236, align='<', width=8, precision=2))
输出
*cat* 123.24
这里,
- 在第一个示例中,'cat' 是要格式化的位置参数。同样,
fill='*'
,align='^'
和width=5
是关键字参数。 - 在模板字符串中,这些关键字参数不是作为要打印的普通字符串检索的,而是作为实际的格式代码检索的
fill, align and width
.
参数替换了相应的命名占位符,并且字符串'cat' 被相应地格式化。 - 同样,在第二个示例中,123.236 是位置参数,对齐、宽度和精度作为格式代码传递给模板字符串。
format() 的额外格式化选项
format()
还支持 type-specific 格式选项,例如日期时间和复数格式。
format()
内部调用 __format__()
获取日期时间,而 format()
访问复数的属性。
您可以轻松地覆盖任何对象的__format__()
方法以进行自定义格式设置。
示例 11:使用 format() 格式化 Type-specific 并覆盖 __format__() 方法
import datetime
# datetime formatting
date = datetime.datetime.now()
print("It's now: {:%Y/%m/%d %H:%M:%S}".format(date))
# complex number formatting
complexNumber = 1+2j
print("Real part: {0.real} and Imaginary part: {0.imag}".format(complexNumber))
# custom __format__() method
class Person:
def __format__(self, format):
if(format == 'age'):
return '23'
return 'None'
print("Adam's age is: {:age}".format(Person()))
输出
It's now: 2016/12/02 04:16:28 Real part: 1.0 and Imaginary part: 2.0 Adam's age is: 23
这里,
- 对于日期时间:
当前日期时间作为位置参数传递给format()
方法。
并且,内部使用__format__()
方法,format()
访问年、月、日、小时、分钟和秒。 - 对于复数:
1+2j 在内部转换为 ComplexNumber 对象。
然后访问它的属性real
和imag
,数字被格式化。 - 覆盖__format__():
像日期时间一样,您可以覆盖自己的__format__()
自定义格式的方法,在访问时返回年龄{:age}
您还可以使用带有速记符号的对象的 __str__()
和 __repr__()
函数使用 format()
。
像 __format__()
一样,您可以轻松地覆盖对象的 __str__()
和 __repr_()
方法。
示例 12:__str()__ 和 __repr()__ 简写 !r 和 !s 使用 format()
# __str__() and __repr__() shorthand !r and !s
print("Quotes: {0!r}, Without Quotes: {0!s}".format("cat"))
# __str__() and __repr__() implementation for class
class Person:
def __str__(self):
return "STR"
def __repr__(self):
return "REPR"
print("repr: {p!r}, str: {p!s}".format(p=Person()))
输出
Quotes: 'cat', Without Quotes: cat repr: REPR, str: STR
相关用法
- Python String format()用法及代码示例
- Python String format_map()用法及代码示例
- Python String find()用法及代码示例
- Python String Center()用法及代码示例
- Python String decode()用法及代码示例
- Python String join()用法及代码示例
- Python String casefold()用法及代码示例
- Python String isalnum()用法及代码示例
- Python String rsplit()用法及代码示例
- Python String startswith()用法及代码示例
- Python String rpartition()用法及代码示例
- Python String splitlines()用法及代码示例
- Python String upper()用法及代码示例
- Python String isprintable()用法及代码示例
- Python String translate()用法及代码示例
- Python String title()用法及代码示例
- Python String replace()用法及代码示例
- Python String split()用法及代码示例
- Python String zfill()用法及代码示例
- Python String max()用法及代码示例
注:本文由纯净天空筛选整理自 Python String format()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。