持续创作,加速成长!这是我参与「掘金日新计划 · 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 |
注意:
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))
aa={"name":"张三","age":25,"score":98}
print("我叫%(name)s,今年%(age)d岁了,考试%(score).2f。"%aa)
(二)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、基本用法
- 按照{}的顺序依次匹配括号中的值
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)
- 通过索引的方式去匹配参数
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
- 通过参数名来匹配参数
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
- 混搭使用
可以通过索引,参数名来混搭进行匹配。
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