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}")
# ---------------lczmx
print(f"{name:->20}")
# ############## 数字分隔符
number = 123456789
# 123,456,789
print(f"{number:,}")
# 123_456_789
print(f"{number:_}")
# ############## 精度
pi = 3.1415926
# pi = 3.14
print(f"{pi = :.2f}")
# pi = 3
print(f"{pi = :.0f}")
# ############## 类型转换
num = 15
# 1111
print(f"{num:b}")
# 17
print(f"{num:o}")
# 15
print(f"{num:d}")
# f
print(f"{num:x}")
# 0xf
print(f"{num:#x}")
# 0XF
print(f"{num:#X}")
value = 0.452
# 45.2%
print(f"{value:.1%}")
# 1.23e+08
print(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 datetime
t = datetime.datetime.now()
# the time is 2021-12-11 12:05:02
print(f'the time is {t:%Y-%m-%d %X}')
调用方法
f-strings可以在{}中像正常的python代码一样使用
data = {
"username": "lczmx",
"password": "123456"
}
# username = lczmx, password = 123456
print(f"username = {data['username']}, password = {data.get('password')}")
python f-strings !表达式的更多相关文章
- Python字符串格式化表达式和格式化方法
Python格式化字符串由两种方式可以选择:一种是格式化表达式(Formatting Expression),一种是格式化方法(Formatting Method).其中格式化表达式在全Python版 ...
- 6. python 字符串格式化表达式
6. python 字符串格式化表达式 字符串格式化允许在一个单个的步骤中对一个字符串执行多个特定类型的替换 特别是给用户提示的时候,格式化非常方便 实现方法: 1.格式化表达式,类似于c语言的pri ...
- Python运算符与表达式
Python运算符包括赋值运算符.算术运算符.关系运算符.逻辑运算符.位运算符.成员运算符和身份运算符. 表达式是将不同类型的数据(常亮.变量.函数)用运算符按照一定得规则连接起来的式子. 算术运算符 ...
- RMQ 字符串 F. Strings and Queries
F. Strings and Queries time limit per test 2.5 s memory limit per test 256 MB input standard input o ...
- Python中Lambda表达式使用
软件环境 Python: 2.7.13; win10 Lambda描述 python 使用 lambda 表达式来创建匿名函数 lambda只是一个表达式,函数体比def简单很多 lambda的主体是 ...
- python 之Lambda表达式
python 的 lambda 表达式 python写一些执行脚本时,使用lambda就可以省下定义函数的过程,比如说我们只是需要写个简单的脚本来管理服务器时,我们就不用专门定义函数然后再写调用,使用 ...
- python return逻辑判断表达式(21)
一.return逻辑判断表达式 and and:遇假则假,所以前面为假就不执行和判断后面直接返回假:前面为真则继续判断执行后面直到表达式结束或者出现假为止; # !usr/bin/env python ...
- Python之lambda表达式的妙用
用法 Python的lambda表达式用于构建匿名函数,基本语法是在冒号左边放原函数的参数,可以有多个参数,用逗号隔开即可:冒号右边是返回值. >>> lambda x,y: (x+ ...
- python 3和python 2 的不同之 f - strings
python3.6版本及以上版本才能使用 f "{}{}{}" f-string 格式化输出
- Python的lambda表达式
使用lambda来创建匿名函数,而用def创建的方法是有名称的,除了从表面上的方法名不一样外,python lambda还有哪些和def不一样呢? 1 python lambda会创建一个函数对象,但 ...
随机推荐
- Django笔记&教程 5-3 综合使用示例
Django 自学笔记兼学习教程第5章第3节--综合使用示例 点击查看教程总目录 1 - 生成学号场景 场景描述: 教务管理系统中,学生注册账号,学生选择年级后,生成唯一学号. 细节分析: 学生学号由 ...
- 设计模式学习-使用go实现观察者模式
观察者模式 定义 适用场景 优点 缺点 代码实现 不同场景的实现方式 观察模式和发布订阅模式 参考 观察者模式 定义 观察者模式(Observer Design Pattern)定义了一种一对多的依赖 ...
- [cf1491H]Yuezheng Ling and Dynamic Tree
将其按照区间分块(即$[(i-1)K+1,iK]$作为一个块),并定义$f_{x}$表示$x$的祖先中编号最小且与$x$在同一个块内的节点,$f_{x}$可以通过$f_{a_{x}}$转移,即$f_{ ...
- 【Azure 应用服务】App Service 无法连接到Azure MySQL服务,报错:com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
问题描述 App Service使用jdbc连接MySQL服务,出现大量的 Communications link failure: com.mysql.cj.jdbc.exceptions.Com ...
- 从ApacheTomcat架构谈面试到源码编译环境v10.0.12
概述 开启博客分享已近三个月,感谢所有花时间精力和小编一路学习和成长的伙伴们,有你们的支持,我们继续再接再厉 **本人博客网站 **IT小神 www.itxiaoshen.com 定义 Tomcat官 ...
- Identity Server 4 从入门到落地(一)—— 从IdentityServer4.Admin开始
最近项目中需要使用Identity Server 4,以前对这个技术只是有些了解,没有系统研究过,网上相关的资料不少,大多是从编写一个简单的认证服务开始,离能够落地使用有相当的距离,理论学习如何不结合 ...
- web渗透工程师学习
职位描述: 对公司网站.业务系统进行安全评估测试(黑盒.白盒测试): 对公司各类系统进行安全加固: 对公司安全事件进行响应,清理后门,根据日志分析攻击途径: 安全技术研究,包括安全防范技术,黑客技术等 ...
- 使用微软RPA工具 Power Automate自动完成重复性工作
介绍 最近发现了win11自带了一个有趣的功能,可以自动去执行一些流程的工作.恰好目前每天早上都需要去提醒同事填写日计划,刚好可以试用下. 这是官网上对此功能的介绍 可以看到,对于win11我们是可以 ...
- Anaconda 安装与卸载
Anaconda是一个免费开源的Python和R语言的发行版本,用于计算科学(数据科学.机器学习.大数据处理和预测分析),Anaconda致力于简化软件包管理系统和部署.Anaconda的包使用软件包 ...
- MAC下如何连接安卓(小米)手机进行互传文件?
命令行: brew cask install android-file-transfer AndroidFileTransfer, 在andorid设备和您的mac电脑之间浏览和传输文件: 不论通过什 ...