往期回顾:
- [Python] 入门(1):安装 Python 及必要组件
- [Python] 入门(2):Python 基础 – 变量
- [Python] 入门(3):Python 基础 – 内建函数
- [Python] 入门(4):Python 基础 – 列表和词典的方法
- [Python] 入门(5):Python 基础 – 字符串的方法
- [Python] 入门(6):Python 基础 – Python 基础 – 循环,条件和迭代器
- [Python] 入门(7):Python 基础 – 自定义函数
- [Python] 入门(8):Python 基础 – 解析式,生成器和程序错误
- [Python] 入门(9):Python 基础 – 字符串格式化(本文)
- [Python] 入门(10):Python 基础 – 面向对象编程
本文目录
很多时候,我们希望可以定制字符串(主要是数值和时间)的输出格式。Python 已经提供了 % 和 .format 方法,但是他们都有使用不便的弊端。于是在 Python 3.6 又提供了一个更方便的新方法:f-strings。
f-strings
f-strings 是f
或 F
修饰的字符串(f"xx"
或 F"xx"
),以大括号 {}
代替字段,其中可以直接填入替换内容:
>>> name = "Laozhai"
>>> f"I'm {name}."
"I'm Laozhai."
也可以进行运算和调用函数、方法
>>> f"{1 + 1}"
'2'
>>> def up(var):
... return var.upper()
>>> f"I'm {up(name)}."
"I'm LAOZHAI."
>>> f"I'm {name.upper()}"
"I'm LAOZHAI."
lambda 函数
因为 lambda 函数里有个 :
,为避免歧义,须将 lambda 函数和变量同时放在括号内:
>>> f"{(lambda x:x)(1)}"
'1'
自定义格式
f-strings 采用{内容:格式描述符}设置字符串格式,其中 “内容” 是希望使用的内容,格式描述符是对内容格式化的命令。可以没有格式描述符,即使用默认设置。
对齐格式描述符
格式描述符 | 作用 |
---|---|
< | 左对齐 |
> | 右对齐 |
^ | 居中 |
字符串默认左对齐,数字默认右对齐。
宽度与精度格式描述符
格式描述符 | 作用 |
---|---|
width | 数值宽度 |
0width | 数值宽度,高位用 0 补足宽度 |
width.precision | width 指宽度,precision 指精度 |
千位分隔符
可以使用 ,
和 _
作为千位分隔符。
格式类型相关格式描述符
格式描述符 | 作用 |
---|---|
e | 科学计数法 |
f | 浮点数 |
g | 小数用 f,大数用 e |
% | 百分比形式 |
日期相关格式描述符
格式描述符 | 作用 |
---|---|
%a | 缩写星期几 |
%A | 全名星期几 |
%u | 数字星期几 |
%d | 数字 日 |
%b | 缩写 月 |
%B | 全名 月 |
%m | 数字 月 |
%y | 两位 年 |
%Y | 四位 年 |
%H | 24 小时制 小时 |
%I | 12 小时制 小时 |
%p | 上午/下午 |
%M | 两位 分钟 |
%S | 两位 秒钟 |
%j | 一年的第几天 |
示例
>>> f"{1.2345:<10.4}"
'1.234 ' # 数值左对齐
>>> f"{1234567890:^15.4e}"
' 1.2346e+09 ' # 数值居中
>>> f"{1234567890:>15_}"
' 1_234_567_890' # 数值右对齐并以 "-" 为千位分隔符
>>> import datetime
>>> f"Today is {datetime.date.today():%Y-%m-%d, %A}."
'Today is 2019-05-30, Thursday.'
>>> f"Now is {datetime.datetime.now():%y-%m-%d (%A) %I:%M:%S %p}."
'Now is 19-05-30 (Thursday) 02:23:33 PM.'
(datetime 模块会在稍后提到)
练习(写出生成如下变量的代码或结果):
使用 f-strings 写出如下的数值和日期:
- ’ 1.58000000 ’ (前后各两个空格);
- 你现在的时间,格式为 “月/日/四位年 缩写星期几 小时(24 小时制)-分钟-秒”。
答案下篇文章公布。欢迎把答案留言与老宅交流、互动!
上一篇练习的答案:
>>> lst1 = ["cat", "dog", "bird", "fish", "tiger", "lion"]
>>> lst2 = ["cat", "dog"]
>>> [var for var in lst1 if var not in lst2]
['bird', 'fish', 'tiger', 'lion']