Python中f-string的使用

Python 3.6引入了一个新的格式化字符串的方法:f-string(formatted string),它可以直接把变量写在字符串中,使得格式化的字符串看起来很直观,下面对f-string进行简单介绍。

f-string的简单使用

name = "admin"
age = 21

print(f"Name: {name}, age: {age}.")  
# Name: admin, age: 21.

Python使用小写字母f或者大写字母F来标识一个f-string,在需要插入变量的地方用花括号将变量名括起来即可。如果花括号没有正确对应,那么会产生一个SyntaxError

表达式及函数调用

f-string支持在花括号内使用表达式、函数调用,lambda等方式对变量进行处理。

print(f"{1 + 2 * 3}")
# 7

import math
print(f"{math.pow(2, 3)}")
# 8.0

print(f"{(lambda x: 2 * x)(3)}")
# 6

使用lambda表达式时需要注意把表达式的定义用括号括起来,否则会报错。
使用lambda表达式不加括号时会报错

转义字符

如果需要在f-string中使用花括号,则使用 {{ 或者 }} ,两个花括号放在一起即可。其他的转移字符串如双引号 \” 、单引号 \’ 、制表符 \t 、换行符 \n 等与普通字符串一致,但是只能在花括号外转义,在花括号内使用就会报错。

如果希望避免引号产生冲突的话,可以考虑将单引号、双引号和三引号交替进行使用。

格式化

f-string的格式化与Python之前提供的format函数的格式化方法比较接近,因此可以参考format的格式化方法进行学习。格式化的基本语法如下:

pi = 3.1415926
print(f"{pi:.2f}")
# 3.14

在花括号内,使用冒号 : 分隔变量与格式化的描述符,其中.2f表示取浮点数的小数点后两位。

填充/截断

name = "admin 1234"
print(f"{name:_<20}")
# admin 1234__________

print(f"{name:_>20}")
# __________admin 1234

print(f"{name:_^20}")
# _____admin 1234_____

在冒号后面首先指定填充的符号,然后指定对齐方式,最后指定字符串的位数

也可以指定变量的长度,如果格式化的位数不足变量的长度,那么就会发生截断

print(f"{name:_>20.100}")  # 在.后面指定选取变量的长度,因为100大于10,所以不会截断
# __________admin 1234

print(f"{name:_>20.5}")  # 格式化长度不足时就会发生截断
# _______________admin

数字格式化

pi = 3.1415926
print(f"{pi:010.2f}")
# 0000003.14

big = 12345678
print(f"{big:_d}")
# 12_345_678

第一个例子表示字符串全长为10,截取小数点后两位,高位用0补齐。

第二个例子表示将数字各位之间用分隔符分开,可以指定为 , 或者 _ ,具体格式化方法参见附录。

时间/日期格式化

from datetime import date
today = date.today()  # datetime.date(2023, 3, 4),是这篇博客的编写时间
print(f"{today:%m-%d  %Y}")
# 03-04  2023

格式化描述符的横线不是必选项,可以使用其他符号分隔年月日的不同字段,具体描述符见附录。

Python 3.12新特性

在Python 3.12中,f-string的功能得到了进一步的加强:

引号重用

在之前的Python版本中,重复使用引号会引发SyntaxError,例如以下的代码:

print(f"This is a {[1, 2, 3].join("123")}")  # SyntaxError

因此如果嵌套定义f-string,只能用以下的方式:

f"""{f'''{f'{f"{1+1}"}'}'''}"""  # 2

但是在3.12中,这个限制被取消掉了,例如以下代码:

f"{f"{f"{f"{f"{f"{1+1}"}"}"}"}"}"  # 2,且不会引发SyntaxError

多行表达式和注释

在之前的版本中,f-string只能在一行内定义,现在f-string可以跨越多行,同时也支持定义注释:

f"这是一个列表:{", ".join([
  "1",  # 列表第1项
  "2",  # 列表第2项
  "3"   # 列表第3项
])}"

# 这是一个列表:1, 2, 3

反斜线和Unicode字符

在Python 3.12之前,f-string不支持输入”\”字符,即在f-string中无法使用转义字符,这个问题也在Python 3.12中被解决:

f"这是一个列表:{"\n".join([1, 2, 3])}"
# 这是一个列表:1
# 2
# 3

附录:格式化描述符速查表

填充/截断描述符

格式描述符含义与作用
<左对齐(字符串默认对齐方式)
>右对齐(数值默认对齐方式)
^居中

数字格式化描述符

数字符号格式化描述符

格式描述符含义与作用
+负数前加负号(-),正数前加正号(+)
-负数前加负号(-),正数前不加任何符号(默认)
(空格)负数前加负号(-),正数前加一个空格

数字展示方式描述符

格式描述符含义与作用
#切换数字显示方式
数字类型不加“#”(默认情况)加上“#”加上后的变化
二进制111 11010b111 1101前面显示“0b”
八进制1750o175前面显示“0o”
十进制125125
十六进制7D0x7D前面显示0X或0x(视原数字是否使用大写字母而定)

数字分隔描述符

格式描述符含义与作用
,使用 , 作为千位分隔符
_使用 _ 作为千位分隔符

其中逗号适用于浮点数、复数和十进制整数;下划线适用于浮点数、复数和所有进制的整数;如果不指定分隔符,那么默认不使用分隔符。

格式描述符

格式描述符含义与作用适用变量类型
s普通字符串字符串
b二进制整数整数
c字符格式,按Unicode编码转换为对应字符整数
d十进制整数整数
o八进制整数整数
x十六进制整数,使用小写字母整数
X十六进制整数,使用大写字母整数
e科学计数法,用 e 表示阶数浮点数、复数、整数(自动转换成浮点数)
E与e等价,用 E 表示阶数浮点数、复数、整数(自动转换成浮点数)
f小数,默认精度为6浮点数、复数、整数(自动转换成浮点数)
F与f等价,但将nan和inf转成大写浮点数、复数、整数(自动转换为浮点数)
g通用小数的格式,小数用f;大数用e浮点数、复数、整数(自动转换为浮点数)
G与G等价,但使用大写字符浮点数、复数、整数(自动转换为浮点数)
%百分比格式浮点数、整数(自动转换为浮点数)

宽度描述符

格式描述符含义与作用
width整数 width 指定宽度
0width整数 width 指定宽度,开头的 0 指定高位用 0 补足宽度
width.precision整数 width 指定宽度,整数 precision 指定显示精度

其中width适用于字符串,不适用于数字;0width适用于数字,不适用于字符串;width.precision的precision如果用在字符串上,则指定是前n位,如果用在浮点数上,则指定小数点后n位。

时间/日期格式化

格式描述符含义显示样例
%a星期几,使用缩写Sun
%A星期几,使用完整名称Sunday
%w星期几,从周日算起,周日为07
%u星期几,从周一算起,周日为76
%d日期,2位数字04
%b月份,使用缩写Mar
%B月份,使用完整名称March
%m月份,2位数字03
%y年份,后2位数字23
%Y年份,4位数字2023
%H小时,24小时制21
%I小时,12小时制09
%p上午/下午PM
%M分钟,2位数字12
%S秒钟,2位数字20
%f微秒,6位数字123321
%zUTC偏移量,±HHMM[SS],未指定时区则返回空字符串+1030
%Z时区名CST
%j一年中的第几天,3位数字063
%U一年中的第几周,2位数字,首个周日后的星期为第0周09
%W一年中的第几周,2位数字,首个周一后的星期为第0周09
%V一年中的第几周,2位数字,首个包含1月4日的星期为第1周09
  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
在AUTOSAR,接口的连线是通过使用端口接口进行实现的。端口接口有两种常用的类型,即发送者--接收者接口和客户端--服务器接口。这两种接口在使用过程有一些不同之处。当使用了ADT(Application Data Type)时,必须进行数据类型映射(Data Type Mapping),将ADT与IDT(Implementation Data Type)进行映射,以便对每个ADT进行具体实现,从而进行代码生成。在实际开发,常用的可配置接口类型有几个,其包括判断DID(Data Identifier)数据属性是否为R/W(读/写),如果仅为R(只读)属性,则可以将该数据配置为USE_DATA_SYNCH_FNC并通过DcmDspDataReadFnc配置的callout接口去读取该DID。因此,AUTOSAR的接口连线是通过使用不同类型的端口接口来实现的。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [2、AUTOSAR应用软件层](https://blog.csdn.net/WelanCF/article/details/125578871)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [Autosar诊断实战系列03-22服务读取DID数据的几种接口类型区别详解](https://blog.csdn.net/initiallizer/article/details/131150258)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OriginCoding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值