python——str.format()函数

本文详细介绍了Python中字符串格式化操作,包括str.format()方法的格式、语法,以及格式规范小型语言。阐述了替换字段、标准格式说明符的构成和含义,还给出了str.format()的多个示例,并与旧的%-format进行了比较。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

执行字符串格式化操作
格式:str.format(*参数字符串, ****关键字参数)
调用此方法的字符串可以包含用大括号{}分隔的文本或替换字段。
每个替换字段要么包含位置参数的数值索引,要么包含关键字参数的名称。返回字符串的副本,其中每个替换字段都被对应参数的字符串值替换。

>>> "The sum of 1 + 2 is {0}".format(1+2)
'The sum of 1 + 2 is 3'

格式字符串语法
str.format()方法和Formatter类共享相同的格式字符串语法(尽管在Formatter的情况下,子类可以定义自己的格式字符串语法)。语法与格式化字符串文字的语法相关,但有一些区别。

格式字符串包含由大括号{}包围的“替换字段”。任何不包含在大括号中的内容都被认为是文本,它将不加更改地复制到输出中。如果需要在文本中包含一个大括号字符,可以通过对它进行双精度转换:{{ 和 }}。

替换字段的语法如下:

replacement_field ::= “{” [field_name] ["!" conversion] [":" format_spec] “}”
field_name ::= arg_name ("." attribute_name | “[” element_index “]”)*
arg_name ::= [identifier | digit+]
attribute_name ::= identifier
element_index ::= digit+ | index_string
index_string ::= <any source character except “]”> +
conversion ::= “r” | “s” | “a”
format_spec ::= <在下一节中描述>

在不太正式的术语中,replacement_field可以以field_name开始,该field_name指定要格式化其值并插入到输出中而不是replacement_field中的对象。field_name后面可选跟一个 conversion field, conversion field前面加一个感叹号“!”和格式“spec”,前面是冒号“:”。它们为替换值指定非默认格式。

field_name本身以数字或关键字的arg_name开头。如果是数字,则表示位置参数;如果是关键字,则表示命名关键字参数。

如果格式字符串中的数字arg_names按顺序是0、1、2,…,则可以全部省略(而不仅仅是一些),数字(0、1、2,…)将自动按该顺序插入。
arg_name 不是用引号分隔的,所以不能在格式字符串中指定任意字典键(例如字符串“10”或“:-]”)。arg_name后面可以跟任意数量的索引或属性表达式。

表单的表达式“.name”使用getattr()选择命名属性,而表单的表达式“[index]”使用uuGetItem_uuu()进行索引查找。
简单的例子:

"First, thou shalt count to {0}"  # 引用第一个位置参数
"Bring me a {}"                   # 默认引用第一个位置参数
"From {} to {}"                   # 和 "From {0} to {1}"一样
"My quest is {name}"              #引用关键字参数“name”
"Weight in tons {0.weight}"       # 第一个位置参数的“weight”属性
"Units destroyed: {players[0]}"   # 关键字参数“players”的第一个元素。

格式规范小型语言
“格式规范”用于在格式字符串中包含的替换字段中定义各个值的显示方式(请参见格式字符串语法和格式化字符串文本)。它们也可以直接传递给内置的format()函数。每个格式表类型都可以定义如何解释格式规范。

大多数内置类型为格式规范实现以下选项,尽管某些格式选项仅受数字类型支持。

一般的惯例是,空格式字符串(“”)产生的结果与对该值调用str()时产生的结果相同。非空格式字符串通常会修改结果。

标准格式说明符的一般形式是:
format_spec ::= [[fill]align][sign][#][0][width][grouping_option][.precision][type]
fill ::=
align ::= “<” | “>” | “=” | “^”
sign ::= “+” | “-” | " "
width ::= digit+
grouping_option ::= “_” | “,”
precision ::= digit+
type ::= “b” | “c” | “d” | “e” | “E” | “f” | “F” | “g” | “G” | “n” | “o” | “s” | “x” | “X” | “%”
如果指定了有效的对齐值,则前面可以是填充字符,可以是任何字符,如果省略,则默认为空格。在格式化字符串文本中或使用str.format()方法时,不可能使用文本大括号(“”或“”)作为填充字符。但是,可以使用嵌套的替换字段插入大括号。此限制不影响format()函数。

'{:>14}'.format("*"*i)
'{:<14}'.format("*"*i)
'{:^14}'.format("*"*i)
"{0:>4}".format(i*j)
#   : 号后面带填充的字符,只能是一个字符,不指定则默认是用空格填充。

各种对齐选项的含义如下:
|Option | Meaning |
|’<’ |强制字段在可用空间内保持对齐(这是大多数对象的默认设置)。|
| ‘>’ |强制字段在可用空间内右对齐(这是数字的默认值)。 |
| ‘^’ | 强制字段在可用空间内居中。 |
| ‘=’ | 强制将填充物放在符号(如果有)之后,但放在数字之前。这用于以“+000000120”格式打印字段。此对齐选项仅对数字类型有效。当“0”紧跟在字段宽度之前时,它将成为默认值。
请注意,除非定义了最小字段宽度,否则字段宽度将始终与要填充的数据大小相同,因此在这种情况下,对齐选项没有意义。

符号选项仅对数字类型有效,可以是以下类型之一:
“+”表示一个符号应该同时用于正数和负数。

“-”表示符号只能用于负数(这是默认行为)。

‘’ ''表示应在正数上使用前导空格,在负数上使用减号。
'#'选项使转换使用“替代形式”。对于不同的类型,替代形式的定义不同。此选项仅对integer、float、complex和decimal类型有效。对于整数,使用二进制、八进制或十六进制输出时,此选项会将前缀分别添加到输出值“0b”、“0o”或“0x”。对于浮点数、复数和小数,替换形式会导致转换结果始终包含小数点字符,即使后面没有数字。通常情况下,只有当后面有一个数字时,小数点字符才会出现在这些转换的结果中。此外,对于“g”和“g”转换,尾随零不会从结果中移除。

“,”选项表示使用逗号作为千位分隔符。对于区分区域设置的分隔符,请改用“n”整数表示类型。
'_'选项表示对浮点表示类型和整数表示类型“d”使用了千位分隔符的下划线。对于整数表示类型“b”、“o”、“x”和“x”,下划线将每4位插入一次。对于其他演示文稿类型,指定此选项是错误的。
宽度是定义最小字段宽度的十进制整数。如果未指定,则字段宽度将由内容确定。

如果没有给出显式对齐方式,则在宽度字段前面加上一个零(“0”)字符,可以为数字类型启用符号感知零填充。这等效于对齐类型为“=”的填充字符“0”。

精度是一个十进制数字,指示对于格式为“f”和“f”的浮点值,小数点后应显示多少位,对于格式为“g”或“g”的浮点值,小数点前后应显示多少位。对于非数字类型,字段指示最大字段大小——换句话说,字段内容将使用多少字符。整数值不允许精度。

最后,类型决定了应该如何显示数据。

可用的字符串表示类型包括:
‘s’ 字符串格式。这是字符串的默认类型,可以省略。
None 与“s”相同。
可用的整数表示类型为:
‘b’ Binary format. Outputs the number in base 2.
‘c’ Character. Converts the integer to the corresponding unicode character before printing.
‘d’ Decimal Integer. Outputs the number in base 10.
‘o’ Octal format. Outputs the number in base 8.
‘x’ Hex format. Outputs the number in base 16, using lower-case letters for the digits above 9.
‘X’ Hex format. Outputs the number in base 16, using upper-case letters for the digits above 9.
‘n’ Number. This is the same as ‘d’, except that it uses the current locale setting to insert the appropriate number separator characters.
None The same as ‘d’.
除了上面的表示类型之外,整数还可以用下面列出的浮点表示类型格式化(除了“n”和“None”)。执行此操作时,float()用于在格式化之前将整数转换为浮点数。

浮点值和十进制值的可用表示类型为:
“e”指数表示法。以科学符号打印数字,使用字母“e”表示指数。默认精度为6。

“E”指数表示法。与’e’相同,只是它使用大写’e’作为分隔符。

“f”定点表示法。将数字显示为定点数字。默认精度为6。

“F”定点表示法。与“f”相同,但将nan转换为nan,并将inf转换为inf。

‘g’

通用格式。对于给定的精度p >= 1,这将把数字四舍五入为p个有效数字,然后根据其大小将结果格式化为定点格式或科学符号。

具体规则如下:假设用表示类型’e’和精度p-1格式化的结果具有指数exp,那么如果-4 <= exp < p,则用表示类型’f’和精度p-1-exp格式化数字。否则,数字将使用表示类型“e”和精度p-1进行格式化。在这两种情况下,显著性后面的零将被删除,如果后面没有其他数字,小数点也将被删除。

无论精度如何,正无穷和负无穷、正零和负零以及nan分别被格式化为inf、-inf、0、-0和nan。

精度为0时,视为精度为1。默认精度为6。

“G”通用格式。与“g”相同,但如果数字太大,则切换到“E”。无穷大和NaN的表示也是大写的。

“n”的数字。这与“g”相同,只是它使用当前地区设置插入适当的数字分隔符。

“%”百分比。将数字乘以100并以固定(‘f’)格式显示,后面跟着百分号。

除了在使用定点表示法时,小数点后至少有一位数字外,没有一种表示法与“g”类似。默认精度与表示特定值所需的精度一样高。总的效果是匹配由其他格式修饰符更改的str()的输出。
str.format的例子
本节包含了**str.format()**语法的示例以及与旧的%-format的比较。
在大多数情况下,语法与旧的%-格式化类似,只是添加了{}和with:而不是%。例如,’%03.2f’可以翻译成’{:03.2f}’。
新的格式语法还支持新的和不同的选项,如下面的示例所示。

(1)按位置访问参数:

>>> '{0}, {1}, {2}'.format('a', 'b', 'c')
'a, b, c'
>>> '{}, {}, {}'.format('a', 'b', 'c')  # 3.1+ only
'a, b, c'
>>> '{2}, {1}, {0}'.format('a', 'b', 'c')
'c, b, a'
>>> '{2}, {1}, {0}'.format(*'abc')      # unpacking argument sequence
'c, b, a'
>>> '{0}{1}{0}'.format('abra', 'cad')   # arguments' indices can be repeated
'abracadabra'

(2)按名称访问参数:

>>> 'Coordinates: {latitude}, {longitude}'.format(latitude='37.24N', longitude='-115.81W')
'Coordinates: 37.24N, -115.81W'
>>> coord = {'latitude': '37.24N', 'longitude': '-115.81W'}
>>> 'Coordinates: {latitude}, {longitude}'.format(**coord)
'Coordinates: 37.24N, -115.81W'

(3)访问参数的属性:

>>> c = 3-5j
>>> ('The complex number {0} is formed from the real part {0.real} '
...  'and the imaginary part {0.imag}.').format(c)
'The complex number (3-5j) is formed from the real part 3.0 and the imaginary part -5.0.'
>>> class Point:
...     def __init__(self, x, y):
...         self.x, self.y = x, y
...     def __str__(self):
...         return 'Point({self.x}, {self.y})'.format(self=self)
...
>>> str(Point(4, 2))
'Point(4, 2)'

(4)访问参数的项目:

>>> coord = (3, 5)
>>> 'X: {0[0]};  Y: {0[1]}'.format(coord)
'X: 3;  Y: 5'

(5)代替 %s and %r:

>>> "repr() shows quotes: {!r}; str() doesn't: {!s}".format('test1', 'test2')
"repr() shows quotes: 'test1'; str() doesn't: test2"

(6)对齐文本并指定宽度:

>>> '{:<30}'.format('left aligned')
'left aligned                  '
>>> '{:>30}'.format('right aligned')
'                 right aligned'
>>> '{:^30}'.format('centered')
'           centered           '
>>> '{:*^30}'.format('centered')  # use '*' as a fill char
'***********centered***********'

(7)替换%+f、%-f和% f,并指定一个符号:

>>> '{:+f}; {:+f}'.format(3.14, -3.14)  # show it always
'+3.140000; -3.140000'
>>> '{: f}; {: f}'.format(3.14, -3.14)  # show a space for positive numbers
' 3.140000; -3.140000'
>>> '{:-f}; {:-f}'.format(3.14, -3.14)  # show only the minus -- same as '{:f}; {:f}'
'3.140000; -3.140000'

(8)替换%x和%o,并将值转换为不同的基数:

>>> # format also supports binary numbers
>>> "int: {0:d};  hex: {0:x};  oct: {0:o};  bin: {0:b}".format(42)
'int: 42;  hex: 2a;  oct: 52;  bin: 101010'
>>> # with 0x, 0o, or 0b as prefix:
>>> "int: {0:d};  hex: {0:#x};  oct: {0:#o};  bin: {0:#b}".format(42)
'int: 42;  hex: 0x2a;  oct: 0o52;  bin: 0b101010'

(9)使用逗号作为千位分隔符:

>>> '{:,}'.format(1234567890)
'1,234,567,890'

(10)表达一个百分比:

>>> points = 19
>>> total = 22
>>> 'Correct answers: {:.2%}'.format(points/total)
'Correct answers: 86.36%'

(11)使用特定类型的格式:

>>> import datetime
>>> d = datetime.datetime(2010, 7, 4, 12, 15, 58)
>>> '{:%Y-%m-%d %H:%M:%S}'.format(d)
'2010-07-04 12:15:58'

(12)嵌套参数和更复杂的例子:

>>> for align, text in zip('<^>', ['left', 'center', 'right']):
...     '{0:{fill}{align}16}'.format(text, fill=align, align=align)
...
'left<<<<<<<<<<<<'
'^^^^^center^^^^^'
'>>>>>>>>>>>right'
>>>
>>> octets = [192, 168, 0, 1]
>>> '{:02X}{:02X}{:02X}{:02X}'.format(*octets)
'C0A80001'
>>> int(_, 16)
3232235521
>>>
>>> width = 5
>>> for num in range(5,12): 
...     for base in 'dXob':
...         print('{0:{width}{base}}'.format(num, base=base, width=width), end=' ')
...     print()
...
    5     5     5   101
    6     6     6   110
    7     7     7   111
    8     8    10  1000
    9     9    11  1001
   10     A    12  1010
   11     B    13  1011

https://docs.python.org/3.6/library/string.html#formatspec

### 回答1: Python中的str.format()函数是一种字符串格式化方法,它可以将一个字符串中的占位符替换为指定的值。这个函数可以接受任意数量的参数,并且可以使用位置参数或关键字参数来指定要替换的占位符。在使用这个函数时,需要在字符串中使用一对大括号{}来表示占位符,然后在调用函数时将要替换的值传递给它。例如,可以使用以下代码将一个字符串中的占位符替换为指定的值: ``` name = 'Alice' age = 25 print('My name is {} and I am {} years old.'.format(name, age)) ``` 输出结果为: ``` My name is Alice and I am 25 years old. ``` 在这个例子中,字符串中的两个占位符{}分别被name和age变量的值替换掉了。这个函数还支持格式化字符串,可以使用一些特殊的格式化代码来控制输出的格式。例如,可以使用以下代码将一个浮点数格式化为指定的小数位数: ``` pi = 3.1415926 print('The value of pi is {:.2f}'.format(pi)) ``` 输出结果为: ``` The value of pi is 3.14 ``` 在这个例子中,{:.2f}表示将pi变量的值格式化为保留两位小数的浮点数。这个函数还支持其他的格式化代码,例如将整数格式化为二进制、八进制或十六进制等。 ### 回答2: Pythonstr.format()函数用于创建格式化字符串,可以用于将变量值、常量等按照指定的格式输出。它可以将一个字符串中的占位符({})替换为具体的值。 该函数的语法格式如下: str.format(param1, param2, ...) 其中,param1、param2等为需要替换的值。 在format函数中,可以使用格式化字符串指令,如{}中的数字表示输出参数的位置,可以与format括号中的参数按顺序对应;也可以使用命名参数,即在{}中加入key=value格式的内容,可以根据key的名称输出指定的参数。 对于字符串的格式化操作,str.format()函数可能需要使用的指令如下: ·{ } Simple string replacement. ·{:d} Integer numbers (decimal). ·{:f} Floating point numbers. ·{:.2f} Floating point numbers with two decimals. ·{:+.2f} Signed floating point numbers with two decimals. ·{:.0f} Floating point numbers without decimals. ·{:0>2d} Integer numbers with filling 0. ·{:x<4d} Integer numbers with filling x from the left. TokenName错误!未结束的 Unicode 字面量 ·{:,} Numbers with comma separator. ·{:.2%} Percentage format. ·{:.2e} Exponential notation, two decimals. 总而言之,str.format()函数是一个非常实用的 Python 字符串操作函数,能够帮助我们更加方便地处理字符串,并输出符合要求的格式化字符串。 ### 回答3: Pythonstr.format函数是一个非常重要的函数,它可以对字符串进行格式化操作。它可以使用简单的占位符和格式化选项来让我们可以根据自己的需求来格式化字符串。 格式化字符串中可以使用的占位符有{}(花括号),可以根据需要使用多个占位符来代表不同的变量或者值。格式化选项可以自定义设置转换标识,对齐方式、填充方式等。同时{}里面可以加入位置、名称、属性来指定各个变量的替换位置。 举例:'{}说: 我{}!'.format('小明', '爱学习') # 小明说: 我爱学习! 在这个例子中,{}是我们的占位符,然后我们在.format函数中传入了两个参数'小明'和'爱学习',这两个参数分别替换了占位符{}的位置。 除了在.format函数中直接传入字符串之外,我们也可以使用其它数据类型来进行格式化。例如,我们可以用占位符{}中指定的格式化选项来对数字进行格式化操作。 举例:'我今年{}岁了,长{}厘米'.format(20, 175.5) # 我今年20岁了,长175.5厘米 在这个例子中,我们分别将数字20和175.5传递给.format函数,{}中的格式化选项将数字格式化为整数和浮点数。 总之,Python中的str.format函数非常灵活和强大,可以帮助我们快速进行字符串格式化,不同的格式化选项也使得我们可以根据不同的需求进行字符串的自定义格式化操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值