python f-string 格式化字符串小试
引入:Old-school 的格式化方式
让我们以格式化输出以下结果为例
总共有3个苹果
百分号%方式
兼容性最好的方式,但可读性最差
item_count = 3
item_name= '苹果'
print('总共有%s个%s' % (item_count, item_name))
.format() 方法
python 2.7后才有的方式,速度慢,可读性有了提高
item_count = 3
item_name= '苹果'
print('总共有{}个{}'.format(item_count, item_name))
基本用法
字符串前加f或者F,大括号{}里面加入表达式,用法类似.format()方法,但可读性大大增强,速度也是三种方法中最快的
item_count = 3
item_name = '苹果'
print(f'总共有{item_count}个{item_name}')
多行f-string
name = 'Tom'
age = 18
occupation = 'student'
msg = (
f'名字: {name}\n'
f'年龄: {age}\n'
f'职业: {occupation}'
)
print(msg)
运行结果:
名字: Tom
年龄: 18
职业: student
f-string 中使用函数
def larger(x, y):
return x if x > y else y
a = 3
b = 4
print(f' {a} 和 {b} 中较大的值是 {larger(a, b)}')
注:要在字符串使用{}需要叠加来转义
print(f'Python f-string里加两层来使用 {{}} ')
print(f'照样使用\'转义符\'')
运行结果:
Python f-string里加两层来使用 {}
照样使用'转义符
f-string 进一步用法(可以参考.format())
浮点数精度设定
在表达式后加入:.xf,x代表要保留的小数位数
from math import pi
print(f'{pi:.2f}')
print(f'{pi:.10f}')
运行结果:
3.14
3.1415926536
对齐方式与留空
s = 'abcdef'
print(f'{s:<10}') # 左对齐
print(f'{s:^10}') # 居中
print(f'{s:>10}') # 右对齐
运行结果
abcdef
abcdef
abcdef
综合应用例子:进度条模拟
import time
def progress(percent, width=50):
if percent > 100:
percent = 100 # 避免百分比溢出100
res = int(width * percent / 100) * '#'
print(f'\r[{res:<{width}}] {percent:>6.2f}%', end='')
"""
这里利用\r及end = ''实现动态覆盖效果
通过嵌套大括号实现把width参数传入到进度条格式需要的宽度中
"""
recv_size = 0 # 收到文件的大小
total_size = 102500 # 文件总大小
while recv_size < total_size:
time.sleep(0.05) # 模拟网速
recv_size += 1024 # 模拟下载1024字节
progress(recv_size / total_size * 100, 70)
运行结果:
[######################################################################] 100.00%