#python格式化字符串常用方法: #一:%格式化: #语法:"%[(name)][flags][width][.precison]type" %待格式化数据 #参数: # (1) %: 占位符; # (2) (name):命名占位字符; # (3) flags可选: # 1) +: 右对齐,正数加正号,负数加负号; # 2) -: 左对齐,正数无符号,负数加负号; # 3) 空格: 右对齐(默认的对齐方式),正数前加空格,负数前加负号; # 4) 0: 右对齐,以0填充,正数无符号,负数加负号,并将符号放置在0最左侧; # (4) width: 占位宽度, 若指定宽度小于原数据长度则按原长度数据输出; # (5) .precison: 小数点后保留位数;在字符串中则表示截取/字符串切片; # (6) type: # 3.type #(1) s: string, 字符串; # (2) d: decimal integer, 十进制数; # (3) i: integer, 用法同%d; # (4) u: unsigned integer, 无符号十进制数; # (5) f: float, 浮点数(默认保留小数点后6位); # (6) F: Float, 浮点数(默认保留小数点后6位); # (7) e: exponent, 将数字表示为科学计数法(小写e, 默认保留小数点后6位); # (8) E: Exponent, 将数字表示为科学计数法(大写E, 默认保留小数点后6位); # (9) o: octal, 八进制数(即0-7); # (10) x: hexdecimal, 十六进制数(即0-9a-f); # (11) X: Hexdecimal, 十六进进制数(0-9A-F); # (12) g: general format, 通用格式,详见如下...; # (13) G: General format, 通用格式,详见如下...; # (14) %c: character, 将十进制数转换为所对应的unicode值; # (15) %r: representation, 调用__repr__魔法方法输出; # (16) %%: 转义%,输出百分号 #4.用法详解: #单个数据 print("i am %s" % "hyy") #多个数据:使用元组 print("i am %s,yearsold is %s" % ("hyy",18)) #指定name使用字典: #(1)单个数据: print("i am %(name)s" % {"name": "hyy"}) #多个数据: print("i am %(name)s,yearsold is %(age)s" % {"name": "hyy","age": "18"}) #单个数据对应多个占位: #元组内元素数量必须和占位符统一 print("i am %s %s %s" % ("hyy", "hyy","hyy")) #使用字典必须指定键值对 print("i am %(name)s %(name)s %(name)s " %{"name":"hyy"}) # 单个数据直接使用%s占位后,再接%value具体值进行引用; # # 多个数据如元组,需要使用小括号; # # 字典型数据在指定输出其value时,可通过%(key)s实现输出其字符串值,如果是整型的值,则是%(key)d,其他类型用法如下: print('today,salary is %.2f' % 2345.456) #保留小数后两位 print('圆周率为:%10.f' % 3.1415926535) #保留整数同时宽度为10 所以3前面有 9 个空格 #二、str.format()格式化(常用) # format格式化的一般格式: # # <带格式化{}字符串>.format(<逗号分隔的参数>) # # 其中,用{}在待格式化字符串中开辟一个位置,将format函数中的参数填充到其中。 # # 实例一: print('my name is {}, I am {} years old'.format('hyy',18)) #my name is hyy, I am 18 years old #format()参数传递方式: # 位置传递 # # 关键字传递 # # 字典传递 # # 列表下标传递 #1.位置传递 #不设置指定位置:按照序列中对应的顺序进行传递 print("a{} b{} c{}".format('A', 'B', 'C')) #aA bB cC #设置指定位置:按照序列的下标进行数据传递 print("a {1} b {0} c {3} d {2}".format('A', 'B', 'C', 'D'))#a B b A c D d C #多余参数不传递:占位符{}有几个取几个对应的数据,多余不取 print("a {} b {} c".format('A', 'B', 'C'))#a A b B c #参数多次调用:可以将序列的下标使用多次调用 print("a {0} b {0} c {2}".format('A', 'B', 'C')) #a A b A c C #2.关键字传递: #在{}中注明好关键字,利用key=value来实现赋值 print('{name} is {age} years old'.format(name='hyy', age=18))#hyy is 18 years old #3.字典传递: #将参数放入字典中来传递参数 person ={'name':'hyy','age':18} print('{name} is {age} years old '.format(**person)) #hyy is 18 years old #4.列表下标传递 people = ['hyy',18 ] print('{0[0]} is {0[1]} years old'.format(people))#hyy is 18 years old #format格式化的格式限定符 # 使用格式限定符可实现{}内部的格式化配置(如对齐,保留小数等) # 一般语法格式:{<参数位置序号>:<格式限定符/格式控制标记>} # # 填充,对齐,宽度一起使用 # # :号后引导填充符号(只能是一个字符, 不填默认为空格) 对齐格式 输出宽度 print('{:>10}'.format('MIKE')) #>向右对齐,输出宽度为10,空格占6个,MIKE占4个 ' MIKE' print('{:*<15}'.format('john')) #<代表向左对齐,同时填充11个*,总宽度为15 'john***********' print('{:+^15}'.format('joke')) #^代表居中,joke占用4个字符长度,剩下11个为+号 '+++++joke++++++' #默认是左对齐,如果不设置方向箭头的话,如下: s ="PYTHON" print("{0:30}".format(s)) #代表输出30个长度,PYTHON占用6个,剩下为空格,且左对齐 # 'PYTHON #三、f-string格式化 #1.语法 #python3.6以后开始支持f-string字符串。f-string即formatting string, 它是str.format()的一个变种,其语法形式之殊途同归,很多时候使用f-string可以有效减少代码量,更为清晰易懂。 #语法:f"{}{}{}" #(1.1)不指定name1单个数据 print("|我是%s"%"王暖暖|") #>|我是王暖暖 #2)多个数据:使用元组 print("|我是%s,今年%d岁|"%("王暖暖",18))#|我是王暖暖,今年18岁| #(1.2)指定name:使用字典1 print("|我是%(name)s|"% {"name":"王暖暖"})#|我是王暖暖| #2)多个数据 print("|我叫%(name)s,今年%(age)d岁。|"%{"name":"王暖暖","age":18})#|我叫王暖暖,今年18岁。 #(1.3)单个数据对应多个占位 # 元组内元素数量必须和占位符数量统一 print("|我是%s %s %s!!!"%("王暖暖","王暖暖","王暖暖"))#使用字典则必须指明键值对 print("|我是%(name)s%(name)s%(name)s!!!|"%({"name":"王暖暖"}))#|我是王暖暖王暖暖王暖暖!!! #四、总结 #python字符串格式化语法较多,不便记忆,可以在具体需要使用的时候再查询即可。 # %格式化可以满足大多常用的功能,但是处理一些精密化或复杂的格式化需求的时候就束手无策了,所以推荐使用str.format()或f-string格式化处理字符串。 #f-string是str.format()的一个分之,在一些特定情况下使用可以大大减少代码量,使代码更加清晰易懂,可以有选择性的使用f-string。