AI智能
改变未来

python f-strings !表达式

近期看一些框架的文档时发现, python的

f-strings

f"{xxx!r}"

的写法, 就官网看了一波文档, 特此记录一下, 顺便完善一下

f-strings

的使用

f-strings的由来

目前, python有三种字符串格式化方法:

%

/

format

/

f-strings

, 简单使用见: Python格式化输出

f-strings

主要是有人认为

%

format

使用起来太麻烦了而提出的. 由于

f-strings

晚于

%

format

, 所以

f-strings

既有

%

方法的简便, 又有

format

方法的强大.

详见: PEP 498 — Literal String Interpolation

总的来说,

f-string

在功能方面不逊于其余两种方法,同时性能又优于二者,且使用起来也更加简洁明了但需要注意的是, python的版本不低于

3.6

f-strings的使用

语法

格式如下:

f"<text>{<key> <optional !s,!r,!a> <optional :[填充][对齐][宽度][数字分隔][精度][类型]>}<text> ... "
>>> name = "lczmx">>> age = 20>>> score = 59.99>>> f"student name {name}, age {age}, score {score}"\'student name lczmx, age 20, score 59.99\'>>> f"student name {name}, age {age}, score {score:.1f}"\'student name lczmx, age 20, score 60.0\'

{}

里面的格式和

format

方法一致, 这里: format 方法

例子

一般使用

>>> name = "lczmx">>> f"username: {name}"\'username: lczmx\'

!s/!r/!a

使用

!s

在表达式上调用

str()

,

!r

调用表达式上的

repr()

,

!a

调用表达式上的

ascii()

关于

ascii

, 见: ascii()

>>> class A:...     def __str__(self):...         return "str A对象"...     def __repr__(self):...         return "repr A对象"...>>> a_obj = A()>>> f"str: {a_obj!s} repr: {a_obj!r} ascii: {a_obj!a}"\'str: str A对象 repr: repr A对象 ascii: repr A\\\\u5bf9\\\\u8c61\'

{=}

表达式

>>> name = "lczmx">>> f"{name=}""name=\'lczmx\'">>> f"{name=!s}"\'name=lczmx\'>>> f"{name  =: >7}"\'name  =  lczmx\'

其他例子

# {index/key:[填充][对齐][宽度][数字分隔][精度][类型]}name = "lczmx"# ############## 填充 + 对齐 + 宽度# lczmx---------------print(f"{name:-<20}")# -------lczmx--------print(f"{name:-^20}")# ---------------lczmxprint(f"{name:->20}")# ############## 数字分隔符number = 123456789# 123,456,789print(f"{number:,}")# 123_456_789print(f"{number:_}")# ############## 精度pi = 3.1415926# pi = 3.14print(f"{pi = :.2f}")# pi = 3print(f"{pi = :.0f}")# ############## 类型转换num = 15# 1111print(f"{num:b}")# 17print(f"{num:o}")# 15print(f"{num:d}")# fprint(f"{num:x}")# 0xfprint(f"{num:#x}")# 0XFprint(f"{num:#X}")value = 0.452# 45.2%print(f"{value:.1%}")# 1.23e+08print(f"{number:.2e}")

更多语法, 见: 格式规格迷你语言

datetime

结合

.strftime()

的格式一样, 这里用一个表格列出了

格式描述符 含义 显示样例
%a
星期几 (缩写)
"Sun"
%A
星期几 (全名)
"Sunday"
%w
星期几 (数字,0 是周日,6 是周六)
"0"
%u
星期几 (数字,1 是周一,7 是周日)
"7"
%d
日 (数字,以 0 补足两位)
"07"
%b
月 (缩写)
"Aug"
%B
月 (全名)
"August"
%m
月 (数字,以 0 补足两位)
"08"
%y
年 (后两位数字,以 0 补足两位)
"14"
%Y
年 (完整数字,不补零)
"2014"
%H
小时 (24小时制,以 0 补足两位)
"23"
%I
小时 (12小时制,以 0 补足两位)
"11"
%p
上午/下午
"PM"
%M
分钟 (以 0 补足两位)
"23"
%S
秒钟 (以 0 补足两位)
"56"
%f
微秒 (以 0 补足六位)
"553777"
%z
UTC偏移量 (格式是

±HHMM[SS]

,未指定时区则返回空字符串)

\'"1030"
%Z
时区名 (未指定时区则返回空字符串)
"EST"
%j
一年中的第几天 (以 0 补足三位)
"195"
%U
一年中的第几周 (以全年首个周日后的星期为第0周,以 0 补足两位)
"27"
%w
一年中的第几周 (以全年首个周一后的星期为第0周,以 0 补足两位)
"28"
%V
一年中的第几周 (以全年首个包含1月4日的星期为第1周,以 0 补足两位)
"28"
import datetimet = datetime.datetime.now()# the time is 2021-12-11 12:05:02print(f\'the time is {t:%Y-%m-%d %X}\')

调用方法

f-strings

可以在

{}

中像正常的python代码一样使用

data = {"username": "lczmx","password": "123456"}# username = lczmx, password = 123456print(f"username = {data[\'username\']}, password = {data.get(\'password\')}")
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » python f-strings !表达式