格式化字符串 f-string 格式化说明符 format specifier

格式化字符串 f-string 格式化说明符 format specifier

概述

python支持多种格式化字符串方式,包括%-formattingstr.format()string.Template。PEP 498提议了一个新的字符串格式化机制:Literal String Interpolation。使用这一机制的字符串就是“f-strings”。

%-formatting支持数据类型有限,且使用中可能出错。【error prone】

%-formattingstring.Template一些格式化无法实现。如string.Template无法实现下面的格式化效果:

value = 1234
print(f'input={value:#06x}')
# 'input=0x04d2'

%-formattingstring.Template都不能实现下面的格式化:

date = datetime.date(1991, 10, 12)
print(f'{date} was on a {date:%A}')
# '1991-10-12 was on a Saturday'

str.format()不会出现上述问题,不过它的主要毛病是冗长。【verbosity】

所以PEP 498推荐使用f-strings

F-strings provide a concise, readable way to include the value of Python expressions inside strings.

F-strings提供了一种简洁、可读的方式来将Python表达式的值包含在字符串中。

使用

Python格式化字符串f-string常用用法_python f-string_皓月盈江的博客-CSDN博客

格式化描述符

format specifier。使用方式f'{值 : 格式化描述符}'。格式化描述符的格式为,

[[fill]align][sign][#][0][minimumwidth][.precision][type],[]里的内容为可选。

[minimumwidth][precision]全部是十进制数,分别表示字段的最小宽度和浮点数的精度。

value = 3.1415926535

print(f'value = {value:10}')              # [minimumwidth] 注意:最小宽度 
# value = 3.1415926535

print(f'value = {value:.4f}')             # [.precision][type]
# value = 3.1416

print(f'value = {value:10.4f}')           # [minimumwidth][.precision][type] 默认空格填充
# value =     3.1416

print(f'value = {value:010.4f}')          # [0][minimumwidth][.precision][type]
# value = 00003.1416

[[fill]align]对齐

作用
<左对齐
>右对齐
^居中对齐
=仅对数字使用

注意:除非定义了最小宽度字段,否则字段宽度将始终与填充它的数据大小相同,因此在这种情况下对齐选项没有意义。

在这里插入图片描述

当设置最小宽度字段之后,字符默认是左对齐,数值默认是右对齐

在这里插入图片描述

[fill]字段必须在[align]字段设置后才可启用,不能单独设置。默认填充空格,也可以填充任意字符。填充0时的作用效果和后面直接使用[0]字段一样。

=的作用使[fill]字段填充的字符显示数字前。主要是用于显示如,‘+000000120’,这样的数字。

for i in range(5):
    print(f'{10 ** i:0>+6}')        # [[fill]align][sign][minimumwidth]

print()
    
for i in range(5):
    print(f'{10 ** i:0=+6}')       # [[fill]align][sign][minimumwidth]

在这里插入图片描述

其实使用[0],可以实现相同效果。

for i in range(5):
    print(f'{10 ** i:+06}')     #[sign][0][minimumwidth]

If the width field is preceded by a zero (‘0’) character, this enables zero-padding. This is equivalent to an alignment type of ‘=’ and a fill character of ‘0’.

如果宽度字段前面有一个零(’ 0 ‘)字符,这将启用零填充。这相当于对齐类型为’ = ‘和填充字符为’ 0 '。

[sign]正负号

作用
’+‘正数加正号
’-’正数不显示正号,默认
‘ ’正数前显示空格
negative = -200
positive = 2
print(f'负数:{negative:<4}')
print(f'默认:{positive:<4}')
print(f'负号:{positive:<-4}')
print(f'正号:{positive:<+4}')
print(f'空格:{positive:< 4}')

'''
负数:-200
默认:2   
负号:2   
正号:+2  
空格: 2  
'''

[type]类型

整数类型
作用
‘b’转化为二进制
‘c’将数字转换成对应的unicode字符
‘d’十进制
‘o’转化为八进制
‘x’转化为十六进制,用小写字母a,b,c,d,e,f表示9-15
‘X’转化为十六进制,用大写字母A,B,C,D,E,F表示9-15
‘n’根据本地化设置插入数字分隔符
num = 28
print(f'{num:d}')   # 28
print(f'{num:b}')	# 11100
print(f'{num:o}')   # 34
print(f'{num:x}')	# 1c
print(f'{num:X}')   # 1C

关于'n':与’d’相同,不同之处在于它使用当前区域设置来插入适当的数字分隔符。如我们使用1000直接这样,而一些地区会这样1,000来展示。

num2 = 10000
print(f'{num2:n}')    # 10000
print(f'{num2:,}')    # 10,000
import locale

# 设置当前的本地化设置为美国
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
number = 1234567890
formatted_number = f"{number:n}"

print(formatted_number)          # 1,234,567,890
浮点数类型
作用
‘e’使用科学计数法,用e来指明指数
‘E’使用科学计数法,用E来指明指数
‘f’定点数格式,默认精度为6
‘F’同上,不过将inf和nan表示为INF和NAN
‘n’g,不过会根据地区使用分隔符
‘%’百分数,当前数字*100,加上%,小数部分按照f显示
ff = 3141.5926535 
print(f'{ff:e}')            # 3.141593e+03
print(f'{ff:E}')            # 3.141593E+03

ff=3
print(f'{ff:f}')            # 3.000000
print(f'{ff:F}')            # 3.000000

x = 3.14
print(f'{x:%}')             # 314.000000%
通用
作用
‘g’通用格式。小数同fd,大数同e
‘G’通用格式。小数同Fd,大数同’E’。
''None'g',不同之处在于遇见如3.00这类数字
ff=30000000000000000000000
print(f'{ff:g}')             # 3e+22
print(f'{ff:G}')             # 3E+22
print(f'{ff}')               # 30000000000000000000000
ff=3.00
print(f'{ff:g}')            # 3
print(f'{ff:G}')            # 3
print(f'{ff}')              # 3.0

[#]

如果存在’ # ‘字符,则整数使用’ alternate form ‘进行格式化。这意味着二进制、八进制和十六进制输出将分别以’ 0b ‘、’ 00 ‘和’ 0x '作为前缀。

num = 28
print(f'{num:#b}')

# 0b11100

参考资料

PEP 498 – Literal String Interpolation | peps.python.org

PEP 3101 – Advanced String Formatting | peps.python.org

Python格式化字符串f-string常用用法_python f-string_皓月盈江的博客-CSDN博客

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值