[Python] 入门(9):Python 基础 -- 字符串格式化

往期回顾:

  • [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 是fF 修饰的字符串(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.precisionwidth 指宽度,precision 指精度
千位分隔符

可以使用 ,_ 作为千位分隔符。

格式类型相关格式描述符
格式描述符作用
e科学计数法
f浮点数
g小数用 f,大数用 e
%百分比形式
日期相关格式描述符
格式描述符作用
%a缩写星期几
%A全名星期几
%u数字星期几
%d数字 日
%b缩写 月
%B全名 月
%m数字 月
%y两位 年
%Y四位 年
%H24 小时制 小时
%I12 小时制 小时
%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. ’ 1.58000000 ’ (前后各两个空格);
  2. 你现在的时间,格式为 “月/日/四位年 缩写星期几 小时(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']
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值