python string字符串函数

python format()函数返回一个格式化的字符串。

语法

str.format(*args, **kwargs)

语法1:[模板字符串].format(逗号分隔的参数) 或者

语法2:{参数序号:格式控制标记}.format(逗号分隔的参数) 

  • 它是通过{}和:来代替%。
  • 模板字符串是一个由槽(用大括号{}来表示)和字符串组成的字符串,用来控制字符串的显示效果。
  • 大括号{}对应着format()中逗号分隔的参数。

返回值

返回一个格式化的字符串。   

下面介绍format()函数基本用法 

语法1

语法:[模板字符串].format(逗号分隔的参数) 

程序示例:

#!/usr/bin/python
# coding=utf-8
print("用法一:")
print("一日之计在于{}".format("晨"))
 
#如果模板字符串有多个槽{},并且槽内没有指定的序号,则按照槽{}出现的顺序一一对应format()函数中的不同参数
print("用法二:")
print("{}之计在于{}".format("一日","晨"))
 
#也可以通过在槽{}中指定format()函数中参数的序号来使用,参数是从0开始编号的。
print("用法三:")
print("{0}之计在于{1}".format("一日","晨"))
print("{1}之计在于{0}".format("晨","一日"))
 
# 如果想要在模板字符串中输出大括号("{}"),则使用{{ 来表示 {   用 }} 来表示 }
print("用法四:")
print("{0}说得好:{{一{1}之计在于晨 一{2}之计在于春}}".format("俗话","日","年"))
 
#如果模板字符串中出现的槽{}和format()函数中参数个数不一致,
#则必须要在槽{}中使用序号来指定参数的使用,否者会产生IndexError的错误。
print("用法五:")
print("{0}日之计在于晨, {0}年之计在于春".format("一"))
print("{}日之计在于晨, {}年之计在于春".format("一")) #槽中没有指定参数序号,会报错。 

程序运行结果:

用法一:
一日之计在于晨
用法二:
一日之计在于晨
用法三:
一日之计在于晨
一日之计在于晨
用法四:
俗话说得好:{一日之计在于晨 一年之计在于春}
用法五:
一日之计在于晨, 一年之计在于春
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-20-5f7b4f063a3b> in <module>()
19 print("用法五:")
20 print("{0}日之计在于晨, {0}年之计在于春".format("一"))
---> 21 print("{}日之计在于晨, {}年之计在于春".format("一")) #槽中没有指定参数序号,会报错。

IndexError: tuple index out of range

通过关键字参数 

程序示例: 

#!/usr/bin/python
# coding=utf-8
print("{year}之计在于{season}".format(year="一年",season="春"))

程序运行结果:

一年之计在于春

通过列表  

程序示例:

#!/usr/bin/python
# coding=utf-8
l = ["一日","晨","一年","春"]
a = ["一日","晨"]
b = ["一年","春"]
print("{0[0]}之计在于{0[1]}, {0[2]}之计在于{0[3]}".format(l))
 
#format()函数中的参数可以是一个或多个列表,但要注意槽中序号的差异。
print("{0[0]}之计在于{0[1]}, {1[0]}之计在于{1[1]}".format(a,b)) 

程序运行结果:

一日之计在于晨, 一年之计在于春
一日之计在于晨, 一年之计在于春

通过字典

程序示例:

#!/usr/bin/python
# coding=utf-8
d1 = {"year":"一年","season":"春"}
print(" {year}之计在于{season}".format(**d1))
 
d2 = {"time":["一日","一年"],"season":["晨","春"]}
print("{time[0]}之计在于{season[0]},{time[1]}之计在于{season[1]}".format(**d2)) 

程序运行结果:

一年之计在于春
一日之计在于晨,一年之计在于春

语法2

语法:{参数序号:格式控制标记}.format(逗号分隔的参数) 

 

槽中格式控制标记规则
       :           [填充]   [对齐]   [宽度]               [,]              [.精度]            [类型]
引导符号要填充的单个字符

< 左对齐

> 右对齐

^ 居中对齐

设定槽的输出宽度

数字的千位分隔符

适用于整数和浮点数

 

用于控制浮点数小数部分

的精度(长度)

或字符串的最大输出长度

整数类型:b,c,d,o,x,X

浮点数类型:e,E,f,%

[填充]——只能填充单个字符。填充字符时,一定要选择对齐方式,否者会有 Invalid format specifier 的报错

[对齐]——默认对齐方式为左对齐。

[宽度]——指的是槽的输出宽度,当槽的实际宽度比槽的设定宽度大,则输出槽的实际宽度,否者按设定的宽度输出。

[类型]——解析如下表:

整数和浮点数类型的输出格式
类型描述类型描述
b输出整数的二进制形式e输出浮点数对应的小写字母e的指数形式
c输出整数对应的Unicode字符E输出浮点数对应的大写字母E的指数形式
d输出整数的十进制形式f输出标准浮点数形式
o输出整数的八进制形式%输出浮点数的百分比形式
x输出整数的小写十六进制形式  
X输出整数的大写写十六进制形式  

格式控制标记规则:[填充], [对齐], [宽度], [,], [.精度], [类型]  这六个规则是可以任意组合使用的,但要按以上顺序使用。不过一般可以分为两组。

一组为:[填充] [对齐] [宽度]   主要用于规范字符串的显示格式。

程序示例:

#!/usr/bin/python
# coding=utf-8
s = "厉害了,我的国"
print("{0:30}".format(s))  #默认为左对齐,宽度为30,序号0可省
print("{0:>30}".format(s))  #右对齐  
print("{0:*>30}".format(s)) #填充*字符,右对齐
print("{0:*^30}".format(s)) #居中对齐
print("{0:*30}".format(s)) #填充字符时,没有选择对齐方式,会有 Invalid format specifier 的报错 

程序运行结果:

厉害了,我的国
厉害了,我的国
***********************厉害了,我的国
***********厉害了,我的国************
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-86-959132fb938a> in <module>()
4 print("{0:*>30}".format(s)) #填充*字符,右对齐
5 print("{0:*^30}".format(s)) #居中对齐
----> 6 print("{0:*30}".format(s)) #填充字符时,没有选择对齐方式,会有 Invalid format specifier 的报错

ValueError: Invalid format specifier

格式控制标记规则也可以用变量来表示,即用槽{}来指定对应的格式控制标记规则。

程序示例:

#!/usr/bin/python
# coding=utf-8
s = "厉害了,我的国"
a = "*"
b = "^"
c = 30
d = ["<","^",">"]
print("{0:{1}{2}{3}}".format(s,a,b,c))  #居中对齐,宽度为30,填充字符为*
print("{0:{1}{2[2]}{3}}".format(s,a,d,c))#右对齐,用列表选择对齐方式。
print("{0:{1}{2[0]}{3}}".format(s,a,d,c)) 

程序运行结果:

***********厉害了,我的国************
***********************厉害了,我的国
厉害了,我的国***********************

另一组为:[,]  [.精度]  [类型]   主要于规范数字的输出格式和控制字符串的输出长度。

程序示例:

#!/usr/bin/python
# coding=utf-8
print("{0:,}".format(123456789)) # 千位分隔符
print("{:,.3}".format(123456.123)) #保留3为有效数字
print("{:.3}".format("厉害了,我的国")) # 输出前三个字符
 
 
#输出整数类型的格式化规则:
#print("输出整数的二进制形式:{0:b}\n输出整数对应的Unicode字符:{0:c}\n输出整数的十进制形式:{0:d}\n输出整数的八进制形式:{0:o}\n输出整数的小写十六进制形式:{0:x}\n输出整数的大写写十六进制形式:{0:X}".format(123456))
# 等效于一下语句:
print("输出整数的二进制形式: {:b}".format(123456))
print("输出整数对应的Unicode字符: {:c}".format(123456))
print("输出整数的十进制形式: {:d}".format(123456))
print("输出整数的八进制形式: {:o}".format(123456))
print("输出整数的小写十六进制形式: {:x}".format(123456))
print("输出整数的大写写十六进制形式: {:X}".format(123456))
 
 
#输出浮点数类型的格式化规则:
print("输出浮点数对应的小写字母e的指数形式: {:e}".format(123456.123456))
print("输出浮点数对应的大写字母E的指数形式: {:E}".format(123456.123456))
print("输出标准浮点数形式: {:f}".format(123456.123456))
print("输出浮点数的百分比形式: {:%}".format(123456.123456))
 
#对比  [.精度]可以控制小数部分的输出长度
print("输出浮点数对应的小写字母e的指数形式: {:.3e}".format(123456.123456))
print("输出浮点数对应的大写字母E的指数形式: {:.3E}".format(123456.123456))
print("输出标准浮点数形式: {:.3f}".format(123456.123456))
print("输出浮点数的百分比形式: {:.3%}".format(123456.123456)) 

程序运行结果:

123,456,789
1.23e+05
厉害了

输出整数的二进制形式: 11110001001000000
输出整数对应的Unicode字符: ?
输出整数的十进制形式: 123456
输出整数的八进制形式: 361100
输出整数的小写十六进制形式: 1e240
输出整数的大写写十六进制形式: 1E240

输出浮点数对应的小写字母e的指数形式: 1.234561e+05
输出浮点数对应的大写字母E的指数形式: 1.234561E+05
输出标准浮点数形式: 123456.123456
输出浮点数的百分比形式: 12345612.345600%

输出浮点数对应的小写字母e的指数形式: 1.235e+05
输出浮点数对应的大写字母E的指数形式: 1.235E+05
输出标准浮点数形式: 123456.123
输出浮点数的百分比形式: 12345612.346%

综合运用实例

程序示例:

#!/usr/bin/python
# coding=utf-8
print("{:*^30,.2f}".format(123456.1235))#用*字符填充,居中对齐,宽度为30,千位分隔符,保留小数点后两位,输出标准浮点数
s = "一年有:"
a = 365.0000
b = "天"
print("{0:*>8}{1:,.1f}{2:*<5}".format(s,a,b)) 

程序运行结果:

**********123,456.12**********
****一年有:365.0天****