网站在线留言系统,wordpress后台添加字段,立即关注公众号,绍兴网站制作软件DAY 7. 格式化字符串
到目前为止#xff0c;我所知道的#xff0c;python格式化字符串有三种方法#xff0c;第一是早期就有的%#xff0c;其次是2.5之后的format(),还有就是3.6添加的f字符串调试
7.1 %格式化字符串
%格式化字符串是python最早的#xff0c;也是能兼容…DAY 7. 格式化字符串
到目前为止我所知道的python格式化字符串有三种方法第一是早期就有的%其次是2.5之后的format(),还有就是3.6添加的f字符串调试
7.1 %格式化字符串
%格式化字符串是python最早的也是能兼容所有版本的一种字符串格式化方法在一些python早期的库中建议使用%格式化方式他会把字符串中的格式化符按顺序后面参数替换格式是
xxxxxx %s xxxxxx % (value1, value2)其中 %s就是格式化符意思是把后面的值格式化为字符类型类似的格式化符还有%d,%f等具体参考文章Python字符串格式化后面的value1,value2就是要格式化的值不论是字符还是数值都会被格式化为格式化符对应的类型当然可以不用以元组的形式传值你可以直接写这样xxxxx %s % value不过不建议这样写一是应为这样只能传递一个参数二是如果value是元组或列表等类型这样会触发TypeErrer如果只传一个参数并且很确定参数类型不会触发异常可以使用上面的写法否则我建议你提供一个单元素元组就像xxxx %s % (value,)
value1 (7, 8)
value2 [9, 0]
print(DAY %s 格式化字符串 %s % (value1,value2))
value3 1
s xxxix %s % value3 # 不推荐
print(s)
s1 xxxx %s % value1
print(s1) # TypeError: not all arguments converted during string formatting7.2 format()
%虽然强大但用起来难免有些麻烦代码也不是特别美观因此在python 2.5 之后提供了更加优雅的str.format()方法。 def format(self, *args, **kwargs): # known special case of str.formatS.format(*args, **kwargs) - strReturn a formatted version of S, using substitutions from args and kwargs.The substitutions are identified by braces ({ and }).passformat()的常用用法
# 使用名称占位符
s2 xxxx {age} xxxx {name}.format(age18, namehangman)
print(s2) # xxxx 18 xxxx hangman# 使用序号占位符为空默认从左到右01234.。。
s3 xxxx {1} xxx{0}.format(value1,value2)
print(s3) # xxxx [9, 0] xxx(7, 8)# 也可以混合使用
s4 xxxx {} XXX {name} xxx {}.format(value2,value1,names4)
print(s4) # xxxx [9, 0] XXX s4 xxx (7, 8)7.3 f-string
f-string是2015年python 3.6 根据PEP 498新添加的一种字符串格式化方法f-string实际上是在运行时计算的表达式而不是常量值。在Python源代码中f-string是一个文字字符串前缀为’f’其中包含大括号内的表达式。表达式会将大括号中的内容替换为其值。例如
import datetime
name zings
age 17
date datetime.date(2019,7,18)
print(fmy name is {name}, this year is {date:%Y},Next year, I\m {age1}) # my name is zings, this year is 2019,Next year, Im 187.3.2 格式规范迷你语言
“格式规范”用于格式字符串中包含的替换字段中以定义各个值的显示方式
标准格式说明符的一般形式是
format_spec :: [[fill]align][sign][#][0][width][grouping_option][.precision][type]
fill :: any character
align :: | | | ^
sign :: | - |
width :: digit
grouping_option :: _ | ,
precision :: digit
type :: b | c | d | e | E | f | F | g | G | n | o | s | x | X | %(1) 对齐 align
align对齐方式作用左对齐字符串默认对齐方式右对齐数值默认对齐方式填充时强制在正负号与数字之间进行填充只支持对数字的填充^居中
除非定义了最小字段宽度否则字段宽度将始终与填充它的数据大小相同因此在这种情况下对齐选项没有意义。如果指定了align值则可以在其前面加上可以是任何字符的填充字符如果省略则默认为空格。 无法使用文字大括号“{”或“}”作为格式化字符串文字中的填充字符或使用str.format方法。 但是可以插入带有嵌套替换字段的大括号。
print(f{name:^18}) # | zings |(2) sign
sign只对数字起作用
sign作用强制对数字使用正负号-仅对负数使用前导负号(默认)空格对正数使用一个’ ‘作前导负数仍以’-为前导
print(f{money:}) # 19999999877(3) #选项 选项使“替代形式”用于转换。 对于不同类型替代形式的定义不同。 此选项仅对integerfloatcomplex和Decimal类型有效。 对于整数当使用二进制八进制或十六进制输出时此选项将前缀“0b”“0o”或“0x”添加到输出值。 对于浮点数复数和十进制替换形式会导致转换结果始终包含小数点字符即使后面没有数字也是如此。 通常只有在跟随数字的情况下这些转换的结果中才会出现小数点字符。 此外对于“g”和“G”转换不会从结果中删除尾随零。 (4) ,选项
,被用来对数字整数部分进行千分位分隔
描述符作用,使用,作为千位分隔符_使用_作为千位分隔符, 仅适用于浮点数、复数与十进制整数对于浮点数和复数, 只分隔小数点前的数位。_ 适用于浮点数、复数与二、八、十、十六进制整数对于浮点数和复数_ 只分隔小数点前的数位对于二、八、十六进制整数固定从低位到高位每隔四位插入一个 _十进制整数是每隔三位插入一个 _。
print(f{money:,}) # 19,999,999,877(5) width
width是定义最小字段宽度的十进制整数。 如果未指定则字段宽度将由内容确定。
当然format还有很多彪悍的特性还可以看这位大佬的文章Python字符串格式化
(6) .precision
.precision对于数字对象用来指定数字的小数位数如果有小数对于非数字对象用来指定最终返回的格式化字符的最大长度即格式化完成后以这个precision参数对结果进行截取
(7) type
[外链图片转存失败(img-AtydwvFj-1563463465332)(…/…/image/python_总结_01.png)]
**注意**格式规范迷你语言对format一样适用本来就是format的
7.4 总结
python最先的格式化字符串方法是%但他的致命缺点是支持的类型有限只支持int,str,double,其他所有类型只能转换为这几个类型还有如果传递的是元组那么必须还要传入一个单值元组为此添加了str.format以解决-formatting中的一些问题特别是它使用普通函数调用语法并因此支持多个参数并且可以通过__format __方法在被转换为字符串的对象上进行扩展。但str.format又存在代码冗余的问题例如
v 6*8
print(the value is {}.format(v))而使用f-string只需要
print(fthe value is{6*8})F字符串提供了一种简洁易读的方式可以在字符串中包含Python表达式的值。包括lambda表达式要放在括号里
参考文章
PEP 498
python doc
Python字符串格式化
Python格式化字符串f-string概览
GitHub python 面试题