字符串格式化在python里有两种,一种是C语言风格的以%
为占位符的方法,一种是以字符串.format
方法的格式化,推荐使用后者,更加方便理解,让代码也更python.
字符串的格式化用途,在于将结果仅用于输出,不再进行进一步操作的时候,可以快捷的输出结果,而不需要再对结果进行一系列操作输出结果,比如可以用.5s来截取字符串的前五位,而没有必要写一个字符串切片来输出.
C语言风格的字符串
%[(name)][flags][width].[precision]typecode
name一定要加一个括号,相当于变量名.
flags 可选,可供选择的值有:
+
右对齐;正数前加正好,负数前加负号;
-
左对齐;正数前无符号,负数前加负号;
空格
右对齐;正数前加空格,负数前加负号;
0
右对齐;正数前无符号,负数前加负号;用0填充空白处
width表示宽度,是一个正整数,表示用多少宽度来显示,如果宽度小于要显示的内容长度,则无效.
.precision 是保留多少位数或者取多少位数
typecode是必须的,表示以何种类型显示,常用的是s字符串,d十进制
在接收%传入的内容的时候,如果有变量名,则可以采用赋值或者字典的方式均可以,如果没有指定变量名,除了按顺序传入之外,依然可以接受迭代器的方式,这是python比c语言有变化的地方.
C语言风格的字符串格式化方法已经不推荐使用.推荐使用.format方法
邪道方法,给字符串加颜色:\033[45;1m*********\033[0m
,这样给*的部分加上底色,其中45那里控制颜色.这其实是ANSI转义,在linux命令行模式里也可以使用,还有很多用途.
注意:print函数的sep参数可以直接将各个部分用sep拼接后输出.
format字符串格式化方法
format的占位符是{},除了单独的大括号之外,还可以在大括号之内填入一系列控制字符
format的格式很灵活,举例如下:
{1}表示用format的第二个参数
{1[1]} 表示format的第二个参数的第二个元素
如果仅写上边的索引,就直接拿后的字符串过来用.
如果要加格式,则要用 索引:操作符的方式,操作符的方式就是:
{name:[[fill]align][sign][#][0][width][,][.precision][type]}
举例:
以50的宽度显示,空白填充!:{name:!^50s}
align
【可选】对齐方式(需配合width使用)
<
,内容左对齐
>
,内容右对齐(默认)
=
,内容右对齐,将符号放置在填充字符的左侧,且只对数字类型有效。 即使:符号+填充物+数字
^
,内容居中
sign
【可选】有无符号数字
+
,正号加正,负号加负;
-
,正号不变,负号加负;
空格
,正号空格,负号加负;
示例:
# 将a显示靠右对齐,用逗号分隔数字,保留4位小数,显示为浮点数,用叹号补齐空白,显示正负号:
a = 4567545245.43214323
print('Test string is {:!>+40,.4f}'.format(a))
.format方法实际上是将参数弄成一个有序的序列一样的东西,虽然底层不知道是什么,但一样支持索引和迭代器的各种拆解参数和使用,非常灵活:
tpl = ""i am {name}, age {age}, really {name}"".format(**{""name"": ""seven"", ""age"": 18})
tpl = ""i am {:s}, age {:d}"".format(*[""seven"", 18])
字符串格式化的官方文档地址,其实遇到需求以后查询官方文档是个很好的方法.
后边要开始学函数了,一直觉得一门语言直到学函数,才算是真正开始学习,之前的只能说是了解这门语言的语法而已.有了函数,才能够写一些可以实际使用的东西.