随笔录--字符串格式化f-string汇总

继 %、format 格式化后,Python 3.6 开始引入了一种效率更高的字符串格式化方式:f-string。

f-string 在形式上是以 f 修饰符引领的字符串(f''),字符串中的 {} 表明将要被替换的字段。f-string 在本质上并不是字符串常量,而是一个在运行时运算求值的表达式。

基本操作

f-string 中的 {} 表示将要被替换的字段,如下例:

""" 三种格式化字符串方式的比较 """
name = 'raelum'
print('%s' % name)
# raelum
print('{}'.format(name))
# raelum
print(f'{name}')
# raelum

{} 中实际上存放的是表达式的值,这意味着我们可以在 {} 进行运算:

name = 'raelum'
print(f'{name.upper()}')
# RAELUM
print(f'{name + name.capitalize()}')
# raelumRaelum
print(f'{name[:-1]}')
# raelu

""" 更多的例子 一"""
print(f'{2 * 3 + 5}')
# 11
print(f'{sum([i for i in range(10)])}')
# 45
print(f'{[i ** 2 for i in range(3)]}')
# [0, 1, 4]

""" 更多的例子 二"""
name = 'Li Hua'
num = 13
print(f'My name is {name}.')
# My name is Li Hua.
print(f'I have {num} apples.')
# I have 13 apples.

引号规范

f-string 中 {} 内使用的引号不能与 {} 外的引号定界符冲突,即如下这样的操作是不可以的:

print(f'My name is {'Li Hua'}')
# SyntaxError: f-string: expecting '}'

改为以下任何一种形式都能够正常输出(以下列举了所有可能的情况):

""" 外部定界符是单引号 """
print(f'My name is {"Li Hua"}')
print(f'My name is {"""Li Hua"""}')

""" 外部定界符是双引号 """
print(f"My name is {'Li Hua'}")
print(f"My name is {'''Li Hua'''}")

""" 外部定界符是双三引号 """
print(f"""My name is {'Li Hua'}""")
print(f"""My name is {"Li Hua"}""")
print(f"""My name is {'''Li Hua'''}""")

""" 外部定界符是单三引号 """
print(f'''My name is {'Li Hua'}''')
print(f'''My name is {"Li Hua"}''')
print(f'''My name is {"""Li Hua"""}''')

如果字符串内部可能会出现多种引号但又不想操心引号问题,外部定界符直接使用 """ 就行了。

转义问题

f-string 不能在 {} 内使用转义,但可在 {} 外进行转义,如下:

print(f"{'\''}")
# SyntaxError: f-string expression part cannot include a backslash
print(f"\'")
# '

如果确实需要在 {} 使用转义,则应当将包含 \ 的内容单独声明为一个变量:

s = '\''
print(f"{s}")
# '

对齐

f-string 的 {} 中采用 content:format 的方式来设置字符串格式,如要使用默认格式,则可不必指定 :format。

默认使用空格填充

name = 'raelum'
print(f'{name:>20}')  # 右对齐,填充字符串长度至20
#               raelum
print(f'{name:<20}')  # 左对齐,填充字符串长度至20
# raelum              
print(f'{name:^20}')  # 居中对齐,填充字符串长度至20
#        raelum

使用其他字符填充

name = 'raelum'
print(f'{name:a>20}')
# aaaaaaaaaaaaaaraelum
print(f'{name:1<20}')
# raelum11111111111111
print(f'{name:-^20}')
# -------raelum-------

宽度与精度

格式描述符

作用

width

整数 width 指定宽度

0width

整数 width 指定宽度,0 表示高位用 0 补足宽度

width.precision

整数 width 指定宽度,precision 指定精度

当给定 precision 时,width 可省略。

import numpy as np

""" 示例一 """
a = 123456
print(f'{a:4}')
# 123456
print(f'{a:8}')
#   123456
print(f'{a:08}')
# 00123456

""" 示例二 """
b = np.pi
print(f'{b:.3f}')
# 3.142
print(f'{b:8.3f}')
#    3.142
print(f'{b:08.3f}')
# 0003.142

 

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值