近期看一些框架的文档时发现, python的f-stringsf"{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 !表达式的更多相关文章

  1. Python字符串格式化表达式和格式化方法

    Python格式化字符串由两种方式可以选择:一种是格式化表达式(Formatting Expression),一种是格式化方法(Formatting Method).其中格式化表达式在全Python版 ...

  2. 6. python 字符串格式化表达式

    6. python 字符串格式化表达式 字符串格式化允许在一个单个的步骤中对一个字符串执行多个特定类型的替换 特别是给用户提示的时候,格式化非常方便 实现方法: 1.格式化表达式,类似于c语言的pri ...

  3. Python运算符与表达式

    Python运算符包括赋值运算符.算术运算符.关系运算符.逻辑运算符.位运算符.成员运算符和身份运算符. 表达式是将不同类型的数据(常亮.变量.函数)用运算符按照一定得规则连接起来的式子. 算术运算符 ...

  4. 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 ...

  5. Python中Lambda表达式使用

    软件环境 Python: 2.7.13; win10 Lambda描述 python 使用 lambda 表达式来创建匿名函数 lambda只是一个表达式,函数体比def简单很多 lambda的主体是 ...

  6. python 之Lambda表达式

    python 的 lambda 表达式 python写一些执行脚本时,使用lambda就可以省下定义函数的过程,比如说我们只是需要写个简单的脚本来管理服务器时,我们就不用专门定义函数然后再写调用,使用 ...

  7. python return逻辑判断表达式(21)

    一.return逻辑判断表达式 and and:遇假则假,所以前面为假就不执行和判断后面直接返回假:前面为真则继续判断执行后面直到表达式结束或者出现假为止; # !usr/bin/env python ...

  8. Python之lambda表达式的妙用

    用法 Python的lambda表达式用于构建匿名函数,基本语法是在冒号左边放原函数的参数,可以有多个参数,用逗号隔开即可:冒号右边是返回值. >>> lambda x,y: (x+ ...

  9. python 3和python 2 的不同之 f - strings

    python3.6版本及以上版本才能使用 f "{}{}{}" f-string 格式化输出

  10. Python的lambda表达式

    使用lambda来创建匿名函数,而用def创建的方法是有名称的,除了从表面上的方法名不一样外,python lambda还有哪些和def不一样呢? 1 python lambda会创建一个函数对象,但 ...

随机推荐

  1. Highcharts › 自由绘图

    ... <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title ...

  2. silky微服务框架的服务治理介绍

    目录 服务治理的概念 服务注册与发现 负载均衡 超时 故障转移(失败重试) 熔断保护(断路器) 限流 RPC限流 HTTP限流 1. 添加配置 2. 注册服务 3.启用 AspNetCoreRateL ...

  3. Asp.net core自定义依赖注入容器,替换自带容器

    依赖注入 在asp.net core程序中,众所周知,依赖注入基本上贯穿了整个项目,以通用的结构来讲解,控制器层(Controller层)依赖业务层(Service层),业务层依赖于仓储层(Repos ...

  4. dart系列之:创建Library package

    目录 简介 Library package的结构 导入library 条件导入和导出library 添加其他有效的文件 library的文档 发布到pub.dev 总结 简介 在dart系统中,有pu ...

  5. [loj3049]字符串问题

    考虑将所有A串向所能支配的B串连边,B串向满足B串是A串前缀的A串连边,在A串上有点权,跑最长路即可但这样前缀的边太多,考虑优化:在后缀树上,将这些串插入进去(注意相同的串A串要在B串下面),并将父亲 ...

  6. SubsamplingScaleImageView 源码解析

    一开始没打算分析 SubsamplingScaleImageView 这个开源的图片浏览器的,因为这个库在我们 App 中使用了,觉得自己对这个库还是比较熟悉的,结果某天再看看到源码介绍的时候,才发现 ...

  7. SpringCloud微服务实战——搭建企业级开发框架(二十四):集成行为验证码和图片验证码实现登录功能

    随着近几年技术的发展,人们对于系统安全性和用户体验的要求越来越高,大多数网站系统都逐渐采用行为验证码来代替图片验证码.GitEgg-Cloud集成了开源行为验证码组件和图片验证码,并在系统中添加可配置 ...

  8. 测试平台系列(85) 把redis运用到实战中

    大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的完整教程,希望大家多多支持. 欢迎关注我的公众号测试开发坑货,获取最新文章教程! 回顾 上一节我们让支持了前置条件 ...

  9. 面向对象的程序设计之JS创建对象的9种模式及其优缺点

    目录 1.new Object () 2.字面式创建对象 3.工厂模式 4.构造函数模式 4.1.将构造函数当作函数 4.2.构造函数的问题 5.原型模式 5.1.理解原型对象 5.2.原型与in操作 ...

  10. Codeforces 772D - Varying Kibibits(高维差分+二项式定理维护 k 次方和)

    Codeforces 题目传送门 & 洛谷题目传送门 首先很容易注意到一件事,那就是对于所有 \(f(S)\) 可能成为 \(x\) 的集合 \(S\),必定有 \(\forall y\in ...