printf-style String Formatting
字符串对象有一个独特的内置运算:%运算符,这也被称为字符串格式或插值运算符。
它处理的类型范围较窄,使用起来稍微困难,但在可以处理的情况下通常更快。
形式为:format%values,其中format是字符串。如果格式需要单个参数,则值可以是单个非元组对象。否则,值必须是与格式字符串指定的项数完全相同的元组,或者是单个映射对象(例如,字典)。
转换说明符包含两个或多个字符,并具有以下组成部分,这些组成部分必须按以下顺序出现:
1.“%”字符,它标记说明符的开始。
2.映射键(可选),由带括号的字符序列组成(例如,(somename))。
3.转换标志(可选),它会影响某些转换类型的结果。
4.最小字段宽度(可选)。如果指定为“*”(星号),则从值中元组的下一个元素读取实际宽度,并且要转换的对象位于最小字段宽度和可选精度之后。
5.精度(可选),以"."后面跟着精度。如果指定为“*”(星号),则从值中元组的下一个元素读取实际精度,并且要转换的值位于精度之后。
6.长度修改器(可选)。
7.转换类型。
如果正确的参数是字典(或其他映射类型),则字符串中的格式必须在紧接在“%”字符之后插入的字典中包含带括号的映射键。映射键从映射中选择要格式化的值。例如:
>>> print('%(language)s has %(number)03d quote types.'%
... {'language':"Python","number":2})
Python has 002 quote types.
转换标志:
#:值转换将使用“替代形式”(定义如下)
0:对于数值,转换将使用零填充。
-:转换后的值将进行左调整(如果同时给定“0”转换,则覆盖“0”转换)。
‘ ’:(空格)有符号转换产生的正数(或空字符串)之前应留有空格。
+:正负号(“+”或“-”)将位于转换之前(覆盖“空格”标志)。
示例:
>>> print("%s %s %s"%(1,2,300))
1 2 300
>>> print("%2.4f"%3.14159)
3.1416
>>> print("%0x" %100)
64
>>> print("%#0x" %100)
0x64
转换类型:
printf-style String Formatting转换类型Formatted string literals
Formatted string literals或f-string是以“f”或“f”为前缀的字符串文字。这些字符串可能包含替换字段,这些字段是由大括号{}分隔的表达式。虽然其他字符串文字总是有一个常数值,但格式化字符串实际上是在运行时计算的表达式。
单个左花括号“{”标记一个替换字段,该字段以Python表达式开头。若要在计算后显示表达式文本及其值,(在调试中很有用),可以在表达式后面添加等号“=”。转换字段由感叹号“!”引入(如果指定了转换,则表达式的求值结果将在格式化之前进行转换。转换'!s'对结果调用str(),'!r'调用repr(),和'!a’调用ascii())。还可以附加一个格式说明符,由冒号“:”引入。替换字段以大括号“}”结尾。当提供等号“=”时,输出将包含表达式文本、“=”和计算值。左大括号“{”之后、表达式内和“=”之后的空格都保留在输出中。默认情况下,除非指定了格式,否则“=”会导致提供表达式的repr()。指定格式时,除非声明了转换“!r”,否则默认为表达式的str()。
最后结果使用format()协议进行格式化。格式说明符被传递给表达式或转换结果的__format__()方法。省略格式说明符时会传递一个空字符串。格式化后的结果将包含在整个字符串的最终值中。
示例:
Formatted string literals示例str.format(*args, **kwargs)
执行字符串格式化操作。调用此方法的字符串可以包含由大括号{}分隔的文本或替换字段。每个替换字段都包含位置参数的数字索引或关键字参数的名称。返回字符串的副本,其中每个替换字段都替换为相应参数的字符串值。
>>> "The sum of 1 + 2 is {0}".format(1+2)
'The sum of 1 + 2 is 3'
网友评论