Python2.6 开始,新增了一种格式化字符串的函数
str.format()
,它增强了字符串格式化的功能。
基本语法是通过
{}
和
:
来代替以前的
%
。
format 函数可以接受不限个参数,位置可以不按顺序。
>>>
"
{} {}
"
.
format
(
"
hello
"
,
"
world
"
)
'
hello world
'
>>>
"
{0} {1}
"
.
format
(
"
hello
"
,
"
world
"
)
'
hello world
'
>>>
"
{1} {0} {1}
"
.
format
(
"
hello
"
,
"
world
"
)
'
world hello world
'
也可以设置参数:
print
(
"
网站名:{name}, 地址 {url}
"
.
format
(
name
=
"
菜鸟教程
"
,
url
=
"
www.runoob.com
"
)
)
site
= {
"
name
"
:
"
菜鸟教程
"
,
"
url
"
:
"
www.runoob.com
"
}
print
(
"
网站名:{name}, 地址 {url}
"
.
format
(
**
site
)
)
my_list
=
[
'
菜鸟教程
'
,
'
www.runoob.com
'
]
print
(
"
网站名:{0[0]}, 地址 {0[1]}
"
.
format
(
my_list
)
)
输出结果为:
网站名:菜鸟教程, 地址 www.runoob.com
网站名:菜鸟教程, 地址 www.runoob.com
网站名:菜鸟教程, 地址 www.runoob.com
也可以向
str.format()
传入对象:
class
AssignValue
(
object
)
:
def
__init__
(
self
,
value
)
:
self
.
value
=
value
my_value
=
AssignValue
(
6
)
print
(
'
value 为: {0.value}
'
.
format
(
my_value
)
)
输出结果为:
value 为: 6
数字格式化
下表展示了 str.format() 格式化数字的多种方法:
>>> print("{:.2f}".format(3.1415926))
数字格式输出
3.1415926
{:.2f}
保留小数点后两位
3.1415926
{:+.2f}
+3.14
带符号保留小数点后两位
{:-.2f}
-1.00
带符号保留小数点后两位
2.71828
{:.0f}
{:0>2d}
数字补零 (填充左边, 宽度为2)
{:x<4d}
数字补x (填充右边, 宽度为4)
{:x<4d}
数字补x (填充右边, 宽度为4)
1000000
1,000,000
以逗号分隔的数字格式
{:.2%}
25.00%
百分比格式
1000000000
{:.2e}
1.00e+09
{:>10d}
右对齐 (默认, 宽度为10)
{:<10d}
左对齐 (宽度为10)
{:^10d}
中间对齐 (宽度为10)
'{:b}'.format(11)
'{:d}'.format(11)
'{:o}'.format(11)
'{:x}'.format(11)
'{:#x}'.format(11)
'{:#X}'.format(11)
^
,
<
,
>
分别是居中、左对齐、右对齐,后面带宽度,
:
号后面带填充的字符,只能是一个字符,不指定则默认是用空格填充。
+
表示在正数前显示
+
,负数前显示
-
;
(空格)表示在正数前加空格
b、d、o、x 分别是二进制、十进制、八进制、十六进制。
此外我们可以使用大括号
{}
来转义大括号,如下实例:
print
(
"
{} 对应的位置是 {{0}}
"
.
format
(
"
runoob
"
)
)
输出结果为:
runoob 对应的位置是 {0}
Python 字符串
flags
可以有 +,-,' '或 0。+ 表示右对齐。- 表示左对齐。' ' 为一个空格,表示在正数的左侧填充一个空格,从而与负数对齐。0 表示使用 0 填充。
width
表示显示宽度
precision
表示小数点后精度
以下是类型码:
%s 字符串 (采用str()的显示)
%r 字符串 (采用repr()的显示)
%c 单个字符
%b 二进制整数
%d 十进制整数
%i 十进制整数
%o 八进制整数
%x 十六进制整数
%e 指数 (基底写为e)
%E 指数 (基底写为E)
%f 浮点数
%F 浮点数,与上相同%g 指数(e)或浮点数 (根据显示长度)
%G 指数(E)或浮点数 (根据显示长度)
%% 字符"%"
>>> print("%6.3f" % 2.3)
2.300
第一个 % 后面的内容为显示的格式说明,6 为显示宽度,3 为小数点位数,f 为浮点数类型
第二个 % 后面为显示的内容来源,输出结果右对齐,2.300 长度为 5,故前面有一空格
>>> print("%+10x" % 10)
x 为表示 16 进制,显示宽度为 10,前面有 8 个空格。
>>>print("%-5x" % -10)
%-5x 负号为左对齐,显示宽度为 5,故 -a 后面有 3 个空格
>>>pi=3.1415
>>>print ("pi的值是%s"%pi)
pi的值是3.1415
>>>print ("pi的值是%.8f"%pi)
pi的值是3.14150000
上面的 width, precision 为两个整数。我们可以利用 *,来动态代入这两个量。比如:
>>> print("%10.*f" % (4, 1.2))
1.2000
以下是补充
简单的说,这是一种将其他变量置入字符串特定位置以生成新字符串的操作,比如说:
>>> n = "Runoob"
>>> "My name is %s" % n
'My name is Runoob'
这段代码首先定义了一个名为 n 的变量,内容为 Runoob。然后下方的字符串中有一个 %s,他的含义是“这里将被替换成一个新的字符串”,用作替换的内容放在字符串后面的%后面,就是那个 n。所以最终这个字符串会变成 My name is Runoob。
上述格式中的顺序依次为:填充字符 a
、右对齐符号 >
、输出数字带符号 +
、字符串的宽度 10
、保留2位小数 .2f
。