目录
活动地址:CSDN21天学习挑战赛
用%来格式化字符串是继承C语言的用法,这种方式比较老旧,不推荐使用。但是,我们在Python语言中,也会看到用%格式化输出。为了弄清楚代码的意思,我们来看看它的用法。
使用格式: '格式字符串' % (输出项1,输出项2,…输出项n) (注意:如果输出项只有一个,可以省略最后一对括号)
格式字符串:
flags:可选,可供选择的值有:
为空 :右对齐
为- :左对齐
width:可选,输出字段的宽度
.precision:可选,小数点后面保留的位数precision(注意:如果是字符串输出,则为截取字符串位数precision)
typecode:必选,可供选择的值有:
c :以字符形式输出,只输出一个字符
s :输出字符串
d/i :以带符号的十进制形式输出整数(正数不输出符号)
f : 以小数形式输出单、双精度数,隐含输出6位小数
o : 以八进制无符号形式输出整数
e/E:以指数形式输出实数
g/G:选用%f或%e格式中输出宽度较短的一种格式,不输出无意义的0
x/X :以十六进制无符号形式输出整数(不输出前导符0x),用x则输出十六进制数的a~f时以小写形式输出,用X时,则以大写字母输出
% :当字符串中存在格式化标志时,需要用 %%表示一个百分号
案例一:
输出:
n1=13, n2=14
案例二:
输出:
521.131
521.1
521.1
521.13
521.13
案例三:
输出:
我爱中华人民共和国
我爱
我爱
用string.format()格式化字符串,这种是新式的方法,官方推荐。相对基本格式化输出采用‘%’的方法,format()功能更强大,该函数把字符串当成一个模板,通过传入的参数进行格式化,并且使用大括号‘{}’作为特殊字符代替‘%’
使用格式: '{ }' .format(输出项[,格式字符串]) , 其中格式字符串是可以选择项目。
1、位置替换:
# 按照先后顺序对format内容进行替换 print('岗位:{}, 性别:{}'.format('经理', '男')) # 输出: # 岗位:经理, 性别:男
2、 索引替换:
# 按照索引对format内容进行替换 print('岗位:{0}, 性别:{1}, 岗位:{0}'.format('经理', '男')) # 输出: # 岗位:经理, 性别:男, 岗位:经理
3、关键字匹配:
# 按照索引对format内容进行替换 print('岗位:{gw}, 性别:{xb}, 岗位:{gw}'.format(gw='经理', xb='男')) # 输出: # 岗位:经理, 性别:男, 岗位:经理
4、对象替换:
# =======对象为元组==========# tup1 = ("张三", "男") tup2 = ('李四', '女') print('名字:{0[0]}, 性别:{0[1]}; 名字:{1[0]}, 性别:{1[1]}'.format(tup1, tup2)) # 输出: # '名字:张三, 性别:男; 名字:李四, 性别:女' # =======对象为列表=======# lis1=["张三","男"] lis2=["李四","女"] print('名字:{0[0]}, 性别:{0[1]}; 名字:{1[0]}, 性别:{1[1]}'.format(lis1, lis2)) # 输出: # '名字:张三, 性别:男; 名字:李四, 性别:女' # =========== 字典 ==========# dic1 = {'姓名': '张三', '性别':'男'} dic2 = {'姓名': '李四', '性别':'女'} print('名字:{0[姓名]}, 性别:{0[性别]}; 名字:{1[姓名]}, 性别:{1[性别]}'.format(dic1, dic2)) # 输出: # '名字:张三, 性别:男; 名字:李四, 性别:女'
5、嵌套替换
print('hello {3:{1}>{2}} '.format('李四','*',10,'你好')) # 输出: hello ********你好 print('hello {0:{1}^{2}} '.format('李四','*',10,'你好')) # 输出: hello ****李四****
1、左对齐及填充
#========== 左对齐 ==========# print('%-5s'%'张三' ) # 常数5表示占5个字符,-:表示左对齐 # 输出:'张三 ' print('{:<5}'.format('张三')) # 常数5表示占5个字符,<:表示左对齐 # 输出:'张三 ' print('{:*<5}'.format('张三') ) # <表示左对齐, *表示用*号进行填充, 常数5表示占5个字符 # 输出:'张三***'
2、右对齐及填充
#========== 右对齐 ===========# print('%5s'%'张三') # 常数5表示占5个字符,默认右对齐 #输出:' 张三' print('{:>5}'.format('张三') ) # 常数5表示占5个字符, >:表示右对齐 # 输出:' 张三' print('{:*>5}'.format('张三')) # 常数5表示占5个字符, >:表示右对齐, *表示用*号进行填充, # 输出:'***张三'
3、居中对齐及填充
#========== 居中对齐 ===========# print('{:^5}'.format('张三')) # 输出:' 张三 ' print('{:*^5}'.format('张三') ) # 常数5表示占5个字符, >: 表示右对齐, *表示用*号进行填充, # 输出:'*张三**'
4、截取指定长度字符串
#===== 截取指定长度字符串 =====# print('%.2s'%'张三李四') # 表示从字符串中截取两个字符 # 输出:'张三'
5、百分号
#===== 百分号-% =====# print('{:%}'.format(0.2)) # 默认输出保留6位小数 # 输出:'20.000000%' print("{:.2%}".format(0.02)) # 百分比计算 常用 # 输出:'2.00%'
6、逗号分隔符
# ===== 逗号分隔符 =====% print('{:,}'.format(1232434234234)) # 输出:'1,232,434,234,234'
7、时间格式化输出
# ======== 对时间格式化输出 ========= # import datetime d = datetime.datetime(2022, 4, 29, 9, 52, 20) print('{:%Y-%m-%d %H:%M:%S}'.format(d)) # 输出: '2022-04-29 09:52:20'
b - 二进制。将数字以2为基数进行输出。
c - 字符。在打印之前将整数转换成对应的Unicode字符串。
d - 十进制整数。将数字以10为基数进行输出。
o - 八进制。将数字以8为基数进行输出。
x - 十六进制。将数字以16为基数进行输出,9以上的位数用小写字母。
e - 幂符号。用科学计数法打印数字。用'e'表示幂。
g - 一般格式。将数值以fixed-point格式输出。当数值特别大的时候,用幂形式打印。
n - 数字。当值为整数时和'd'相同,值为浮点数时和'g'相同。不同的是它会根据区域设置插入数字分隔符。
% - 百分数。将数值乘以100然后以fixed-point('f')格式打印,值后面会有一个百分号。
# ======== 格式转换 ========= # print('{0:b}'.format(3)) # 输出:11 print('{:c}'.format(20)) # 输出: print('{:d}'.format(20)) # 输出:20 print('{:o}'.format(20)) # 输出:24 print('{:x}'.format(20)) # 输出:14 print('{:e}'.format(20)) # 输出:2.000000e+01 print('{:g}'.format(20.1)) # 输出:20.1 print('{:f}'.format(20)) # 输出:20.000000 print('{:n}'.format(20)) # 输出:20 print('{:%}'.format(20)) # 输出:2000.000000%
用f-string格式化字符串,这种方式在Python3.6 及以上推荐使用。python3.6引入了一种新的字符串格式化方式:f-string格式化字符串。从%s格式化到format格式化再到f-string格式化,格式化的方式越来越直观,f-string的效率也较前两个高一些,使用起来也比前两个简单一些。同时值得注意的是,f-string就是在format格式化的基础之上做了一些变动,核心使用思想和format一样。
1、基本使用,f-string用大括{ }表示被替换字段,其中直接填入替换内容即可
name = "Huang Wei" print(f"Hello, my name is {name}") # 输出:Hello, my name is Huang Wei num = 2 print(f"I have {num} apples") # 输出:I have 2 apples price = 95.5 print(f"He has {price}$") # 输出:He has 95.5$
2、表达式求值与函数调用,f-string的大括号{ }可以填入表达式或调用函数,Python会求出其结果并填入返回的字符串内。
print(f"They have {2+5*2} apples") # 输出:They have 12 apples name = "Huang Wei" print(f"my name is {name.lower()}") # 输出:my name is huang wei import math print(f"Π的值为{math.pi}") # 输出:Π的值为3.141592653589793
3、f-string中引号使用存在的问题 ,f-string大括号内使用的引号不能和大括号外的引号定界符引号冲突,需根据情况灵活切换使用单引号、双引号、单三引号、双三引号。
注意:只要大括号内外的引号不同,就没有问题。但是大括号中只能是但引号和 双引号 ,大括号外的引号定界符引号可以使用单引号、双引号、单三引号、双三引号。
print(f'I am {"Huang Wei"}') # 输出:I am Huang Wei print(f'''I am {'Huang Wei'}''') # 输出:I am Huang Wei print(f"""I am {'Huang Wei'}""") # 输出:I am Huang Wei print(f"""I am {"Huang Wei"}""") # 输出:I am Huang Wei print(f'I am {'Huang Wei'}') # 输出: # print(f'I am {'Huang Wei'}') # ^^^^^ # SyntaxError: f-string: expecting '}'
4、大括号外的引号还可以使用\转义,但大括号内不能使用\转义。
print(f"he\'ll go to {'shang hai'}") # 输出:he'll go to shang hai print(f"""he introduces himself {"I\'m Tom"}""") #输出: # print(f"""he introduces himself {"I\'m Tom"}""") # ^ # SyntaxError: f-string expression part cannot include a backslash print(f"""he introduces himself {"I'm Tom"}""") # 输出:he introduces himself I'm Tom
5、f-string大括号外如果需要显示大括号,则应输入连续两个大括号{{ }};大括号内需要引号,使用引号即可。
print(f"5{'{apples}'}") #输出:5{apples} print(f"{{5}}{'apples'}") #输出:{5}apples
6、f-string填充
当我们指定了字符串最终的长度的时候,如果现有的字符串没有那么长,那么我们就用某种字符(填充字符)来填满这个长度,这就是“填充”。
6.1默认使用空格填充
name = "Huang Wei" print(f"{name:>20}") #输出: Huang Wei print(f"{name:<20}") #输出:Huang Wei print(f"{name:^20}") #输出: Huang Wei
6.2用指定字符进行填充
name = "Huang Wei" print(f"{name:_>20}") #输出:___________Huang Wei print(f"{name:_<20}") #输出:Huang Wei___________ print(f"{name:_^20}") #输出:_____Huang Wei______
注意:填充分为左填充、右填充、居中填充。左填充表示在字符串左侧填充,右填充表示在字符串右侧填充,居中填充表示在字符串左右两侧对称填充。>表示左填充,<表示右填充,^表示居中填充。记忆方法:括号口朝左边,就表示左填充;括号口朝右边,就表示右填充。
7、f-string截断与填充的结合使用,当需要格式化的数据类型是“字符串”的时候,才会发生截断。
# 当发生截断的时候,如果不指定填充符,默认使用空格填充 print(f"{a:10.3}") #输出:Hel # 在发生截断的时候,使用指定的填充符 print(f"{a:_>10.3}") #输出:_______Hel print(f"{a:_<10.3}") #输出:Hel_______
8、f-string针对date、datetime和time对象,进行年月日、时分秒等信息提取
from datetime import * # today()返回本地时间的一个date对象 a = date.today() print(f"{a:%Y-%m-%d}") #输出:2020-02-01