字符串(三)

176 阅读6分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天

八、字符串格式化

生成一定格式的字符串

(一)%运算符格式化字符串

%方法的语法格式如下:

‘%[(name)][flags][width].[precision]typecode’%exp

 

参数说明:

(name):用于选择指定的键(即字典中的key)。注意:name外的括号必须有。

flags:标记格式限定符号。包含+、-、#和0。

width:所占的宽度(最短长度,包含小数点,小于width时会填充)。

.precision:小数点后的位数。

typecode :指定数据格式类型。

exp:要转换的项。如果有多个,则需通过元组进行指定,不能使用列表。

1、常用的数据格式类型符

类型符描述
%d、%i转换为带符号的十进制整数
%o转换为带符号的八进制整数
%x、%X转换为带符号的十六进制整数(x:字母为小写,X:字母为大写)
%e、%E转化为科学计数法表示的浮点数(e 小写,E大写)
%f、%F转化为十进制浮点数
%g、%G浮点格式。如果指数小于 -4 或不小于精度则使用小写/大写指数格式,否则使用十进制格式。
%c将一个整数解释成ASCII码(即输出一个整数对应的ASCII码字符)
%s按原样格式化字符串
%%不转换参数,在结果中输出一个“%”字符。

2、格式限定符号

Python的print()中可以指定输出方式。比如print() 默认输出的数据总是右对齐的(当数据不够宽时,在左边补空格以达到指定的宽度),Python允许在最小宽度之前增加一个标志来改变对齐方式。

标志描述
-指定左对齐
+表示输出的数字要带着符号;正数带“+”,负数带“-”。右对齐。
0表示宽度不足时补充0,而不是补充空格。
#表示八进制时数字前面添加0,十六进制时前面添加0x,二进制时前面添加0b

注意:

image.png 3、指定小数精度

对于小数(浮点数),print()还允许指定小数点后的数字位数,即指定小数的精度。精度值需要放在最小宽度之后,中间用点号“.”隔开;也可以不写最小宽度,只写精度。格式如下:

%m.nf

%.nf

其中,m表示最小宽度,n表示输出精度,“.”必须存在。

例题1

name=”张三”

age=25

score=98

print(“我叫%s”%name)

print(“我叫%s,今年%d岁了,考试%f。”%(name,age,score))

多个变量时,放到一个元组里。

例题2

name="张三"\
age=25\
score=98\
print("我叫%s,今年%+010d岁了,考试%.2f。"%(name,age,score))

image.png aa={"name":"张三","age":25,"score":98}
print("我叫%(name)s,今年%(age)d岁了,考试%(score).2f。"%aa)

image.png (二)str.format()方法

str.format()方法是对%格式化字符串的一种改进,它增强了字符串格式化的功能。基本语法是通过花括号“{}”和冒号“:”代替百分号“%”。

format()方法的语法格式如下:

str.format(args)

其中,str用于指定字符串的显示样式;args用于指定要进行格式转换的项,如有多项,项间用逗号分开。

str显示样式的完整语法格式为:

{ [index][ : [ [fill] align] [sign] [#] [width] [.precision] [type] ]}

参数说明

(1)index:指定后边设置的格式作用到args中的第几个数据,数据的索引值从0开始。如省略此选项,则会根据args中数据的先后顺序自动分配。

(2)fill:指定空白处填充的字符。注意,当填充字符为逗号“,”且作用于整数或浮点数时,该整数或浮点数会以逗号分隔的形式输出。

(3)align:指定数据的对齐方式。

align描述
<左对齐
右对齐
=右对齐,并将符号放在最左侧,此选项只对数字类型有效。
居中,此选项需与width参数一起使用。

(4)sign:指定有无符号。

sign描述
+正数前加正号,负数前加负号。
-正数前不加正号,负数前加负号。
空格正数前加空格,负数前加负号。
#对于整数型,使用二进制数、八进制数和十六进制数输出时,为输出值添加0b、0o、0x前缀。

(5)width:指定输出数据时所占的宽度。

(6).precision:指定保留的小数位数。

(7)type:指定输出数据的具体类型。

type类型描述
a按Unicode编码输出
r调用repr函数输出
s字符串格式。这是字符串的默认类型,可以省略。
c将整数转换为相应的unicode字符。
b二进制格式。输出以2为基数的数字。
d十进制整数。输出以10为基数的数字。
o八进制格式。输出以8为基数的数字。
x或X十六进制格式。输出以 16 为基数的数字。x:用小写字母表示 9 以上的数码,X:用大写字母表示 9 以上的数码。
e 或 E转换成科学计数法后,格式化输出。e/E其中的字母为小写/大写。
f 或 F转换为浮点数(默认小数点后保留 6 位),再格式化输出。
g 或 G自动在 e 和 f(或 E 和 F)中切换。
%显示百分比(默认显示小数点后 6 位)。

format()方法中,字符格式化参数是用一对花括号“{}”,而且支持按顺序指定格式化参数值和关键字格式化参数。

s1 = " 学号: {} \t\t 姓名: {} \t\t 总评成绩: {} **"
**print(s1.format( "dx01b01" , " 张三 " ,95))
s2 = " 学号: {num} \t\t 姓名: {name} \t\t 总评成绩: {score} **"

**print(s2.format(score = 95,num = "dx01b01" ,name = " 张三 " ))

python中format的用法详解

format是字符串内嵌的一个方法,用于格式化字符串。以大括号{}来标明被替换的字符串。

1、基本用法

  1. 按照{}的顺序依次匹配括号中的值

s = "{} is a {}".format('Tom', 'Boy')

print(s) # Tom is a Boy

s1 = "{} is a {}".format('Tom')

抛出异常, Replacement index 1 out of range for positional args tuple

print(s1)

  1. 通过索引的方式去匹配参数

s = "{0} is a {1}".format('Tom', 'Boy')

print(s) # Tom is a Boy

s1 = "{1} is a {2}".format('Tom', 'Lily', 'Girl')

print(s1) # Lily is a Girl

字符串中索引的顺序可以打乱,并不影响匹配。

s = "{1} is a {0}".format('Boy', 'Tom', )

print(s) # Tom is a Boy

  1. 通过参数名来匹配参数

s = "{name} is a {sex}".format(name='Tom', sex='Boy')

print(s) # Tom is a Boy

同理,如果参数已经确定,可以直接利用{}进行格式化引用。

name = 'Tom'

sex = 'Girl'

以f开头表示在字符串中支持大括号内的python表达式   此用法3.6之后支持

s = f"{name} is a {sex}"

print(s) # Tom is a Boy

  1. 混搭使用

可以通过索引,参数名来混搭进行匹配。

s = "My name is {}, i am {age} year old, She name is {}".format('Liming', 'Lily', age=10)

print(s) # My name is Liming, i am 10 year old, She name is Lily

需要注意的是,命名参数必须写道最后。负责会编译报错!

s = "My name is {}, i am {age} year old, She name is {}".format('Liming', age=10, 'Lily')

print(s)  # SyntaxError: positional argument follows keyword argument

另外,不可以索引和默认格式化混合使用。

s = "{} is a {0}".format('Boy', 'Tom', )

print(s)

s1 = "{} is a {1}".format('Boy', 'Tom', )

print(s1)

#以上两种写法均报异常。

ValueError: cannot switch from automatic field numbering to manual field specification