- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Python格式化字符串f-string概览(小结)由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
简介 。
f-string,亦称为格式化字符串常量(formatted string literals),是python3.6新引入的一种字符串格式化方法,该方法源于pep 498 – literal string interpolation,主要目的是使格式化字符串的操作更加简便。f-string在形式上是以 f 或 f 修饰符引领的字符串(f'xxx' 或 f'xxx'),以大括号 {} 标明被替换的字段;f-string在本质上并不是字符串常量,而是一个在运行时运算求值的表达式:
while other string literals always have a constant value, formatted strings are really expressions evaluated at run time. (与具有恒定值的其它字符串常量不同,格式化字符串实际上是运行时运算求值的表达式。) —— python documentation 。
f-string在功能方面不逊于传统的和,同时性能又优于二者,且使用起来也更加简洁明了,因此对于python3.6及以后的版本,推荐使用f-string进行字符串格式化.
用法 。
此部分内容主要参考以下资料:
python documentation – formatted string literals 。
python documentation – format string syntax 。
pep 498 – literal string interpolation 。
python 3's f-strings: an improved string formatting syntax (guide) 。
python3 f-string格式化字符串的高级用法 。
python 3: an intro to f-strings 。
简单使用 。
f-string用大括号 {} 表示被替换字段,其中直接填入替换内容:
1
2
3
4
5
6
7
8
9
10
11
|
>>> name
=
'eric'
>>> f
'hello, my name is {name}'
'hello, my name is eric'
>>> number
=
7
>>> f
'my lucky number is {number}'
'my lucky number is 7'
>>> price
=
19.99
>>> f
'the price of this book is {price}'
'the price of this book is 19.99'
|
表达式求值与函数调用 。
f-string的大括号 {} 可以填入表达式或调用函数,python会求出其结果并填入返回的字符串内:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
>>> f
'a total number of {24 * 8 + 4}'
'a total number of 196'
>>> f
'complex number {(2 + 2j) / (2 - 3j)}'
'complex number (-0.15384615384615388+0.7692307692307692j)'
>>> name
=
'eric'
>>> f
'my name is {name.lower()}'
'my name is eric'
>>>
import
math
>>> f
'the answer is {math.log(math.pi)}'
'the answer is 1.1447298858494002'
|
引号、大括号与反斜杠 。
f-string大括号内所用的引号不能和大括号外的引号定界符冲突,可根据情况灵活切换 ' 和 ":
1
2
3
4
5
6
7
|
>>> f
'i am {"eric"}'
'i am eric'
>>> f
'i am {'
eric
'}'
file
"<stdin>"
, line
1
f
'i am {'
eric
'}'
^
syntaxerror: invalid syntax
|
若 ' 和 " 不足以满足要求,还可以使用 ''' 和 """:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
>>> f
"he said {"
i'm eric
"}"
file
"<stdin>"
, line
1
f
"he said {"
i'm eric
"}"
^
syntaxerror: invalid syntax
>>> f
'he said {"i'
m eric"}'
file
"<stdin>"
, line
1
f
'he said {"i'
m eric"}'
^
syntaxerror: invalid syntax
>>> f
"""he said {"i'm eric"}"""
"he said i'm eric"
>>> f
'''he said {"i'm eric"}'''
"he said i'm eric"
|
大括号外的引号还可以使用 \ 转义,但大括号内不能使用 \ 转义:
1
2
3
4
5
|
>>> f
'''he\'ll say {"i'm eric"}'''
"he'll say i'm eric"
>>> f
'''he'll say {"i\'m eric"}'''
file
"<stdin>"
, line
1
syntaxerror: f
-
string expression part cannot include a backslash
|
f-string大括号外如果需要显示大括号,则应输入连续两个大括号 {{ 和 }}:
1
2
3
4
|
>>> f
'5 {"{stars}"}'
'5 {stars}'
>>> f
'{{5}} {"stars"}'
'{5} stars'
|
上面提到,f-string大括号内不能使用 \ 转义,事实上不仅如此,f-string大括号内根本就不允许出现 \。如果确实需要 \,则应首先将包含 \ 的内容用一个变量表示,再在f-string大括号内填入变量名:
1
2
3
4
5
6
7
|
>>> f
"newline: {ord('\n')}"
file
"<stdin>"
, line
1
syntaxerror: f
-
string expression part cannot include a backslash
>>> newline
=
ord
(
'\n'
)
>>> f
'newline: {newline}'
'newline: 10'
|
多行f-string 。
f-string还可用于多行字符串:
1
2
3
4
5
6
7
8
9
10
|
>>> name
=
'eric'
>>> age
=
27
>>> f
"hello!"
\
... f
"i'm {name}."
\
... f
"i'm {age}."
"hello!i'm eric.i'm 27."
>>> f
"""hello!
... i'm {name}.
... i'm {age}."""
"hello!\n i'm eric.\n i'm 27."
|
自定义格式:对齐、宽度、符号、补零、精度、进制等 。
f-string采用 {content:format} 设置字符串格式,其中 content 是替换并填入字符串的内容,可以是变量、表达式或函数等,format 是格式描述符。采用默认格式时不必指定 {:format},如上面例子所示只写 {content} 即可.
关于格式描述符的详细语法及含义可查阅python官方文档,这里按使用时的先后顺序简要介绍常用格式描述符的含义与作用:
格式描述符 | 含义与作用 |
---|---|
< | 左对齐(字符串默认对齐方式) |
> | 右对齐(数值默认对齐方式) |
^ | 居中 |
数字符号相关格式描述符 。
格式描述符 | 含义与作用 |
---|---|
+ | 负数前加负号(-),正数前加正号(+) |
- | 负数前加负号(-),正数前不加任何符号(默认) |
(空格) | 负数前加负号(-),正数前加一个空格 |
注:仅适用于数值类型.
数字显示方式相关格式描述符 。
。
格式描述符 | 含义与作用 |
---|---|
# | 切换数字显示方式 |
。
注1:仅适用于数值类型.
注2:# 对不同数值类型的作用效果不同,详见下表:
。
数值类型 | 不加# (默认) |
加# |
区别 |
---|---|---|---|
二进制整数 | '1111011' |
'0b1111011' |
开头是否显示 0b |
八进制整数 | '173' |
'0o173' |
开头是否显示 0o |
十进制整数 | '123' |
'123' |
无区别 |
十六进制整数(小写字母) | '7b' |
'0x7b' |
开头是否显示 0x |
十六进制整数(大写字母) | '7b' |
'0x7b' |
开头是否显示 0x |
。
宽度与精度相关格式描述符 。
格式描述符 | 含义与作用 |
---|---|
width |
整数 width 指定宽度 |
0width |
整数 width 指定宽度,开头的 0 指定高位用 0 补足宽度 |
width.precision |
整数 width 指定宽度,整数 precision 指定显示精度 |
注1:0width 不可用于复数类型和非数值类型,width.precision 不可用于整数类型。 注2:width.precision 用于不同格式类型的浮点数、复数时的含义也不同:用于 f、f、e、e 和 % 时 precision 指定的是小数点后的位数,用于 g 和 g 时 precision 指定的是有效数字位数(小数点前位数+小数点后位数)。 注3:width.precision 除浮点数、复数外还可用于字符串,此时 precision 含义是只使用字符串中前 precision 位字符.
示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
>>> a
=
123.456
>>> f
'a is {a:8.2f}'
'a is 123.46'
>>> f
'a is {a:08.2f}'
'a is 00123.46'
>>> f
'a is {a:8.2e}'
'a is 1.23e+02'
>>> f
'a is {a:8.2%}'
'a is 12345.60%'
>>> f
'a is {a:8.2g}'
'a is 1.2e+02'
>>> s
=
'hello'
>>> f
's is {s:8s}'
's is hello '
>>> f
's is {s:8.3s}'
's is hel '
|
千位分隔符相关格式描述符 。
。
格式描述符 | 含义与作用 |
---|---|
, | 使用,作为千位分隔符 |
_ | 使用_作为千位分隔符 |
。
注1:若不指定 , 或 _,则f-string不使用任何千位分隔符,此为默认设置。 注2:, 仅适用于浮点数、复数与十进制整数:对于浮点数和复数,, 只分隔小数点前的数位。 注3:_ 适用于浮点数、复数与2、8、10、十六进制整数:对于浮点数和复数,_ 只分隔小数点前的数位;对于2、8、十六进制整数,固定从低位到高位每隔四位插入一个 _(十进制整数是每隔三位插入一个 _).
示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
>>> a
=
1234567890.098765
>>> f
'a is {a:f}'
'a is 1234567890.098765'
>>> f
'a is {a:,f}'
'a is 1,234,567,890.098765'
>>> f
'a is {a:_f}'
'a is 1_234_567_890.098765'
>>> b
=
1234567890
>>> f
'b is {b:_b}'
'b is 100_1001_1001_0110_0000_0010_1101_0010'
>>> f
'b is {b:_o}'
'b is 111_4540_1322'
>>> f
'b is {b:_d}'
'b is 1_234_567_890'
>>> f
'b is {b:_x}'
'b is 4996_02d2'
|
格式类型相关格式描述符 。
基本格式类型 。
。
格式描述符 | 含义与作用 | 适用变量类型 |
---|---|---|
s |
普通字符串格式 | 字符串 |
b |
二进制整数格式 | 整数 |
c |
字符格式,按unicode编码将整数转换为对应字符 | 整数 |
d |
十进制整数格式 | 整数 |
o |
八进制整数格式 | 整数 |
x |
十六进制整数格式(小写字母) | 整数 |
x |
十六进制整数格式(大写字母) | 整数 |
e |
科学计数格式,以 e 表示 ×10^ |
浮点数、复数、整数(自动转换为浮点数) |
e |
与 e 等价,但以 e 表示 ×10^ |
浮点数、复数、整数(自动转换为浮点数) |
f |
定点数格式,默认精度(precision )是6 |
浮点数、复数、整数(自动转换为浮点数) |
f |
与 f 等价,但将 nan 和 inf 换成 nan 和 inf |
浮点数、复数、整数(自动转换为浮点数) |
g |
通用格式,小数用 f ,大数用 e |
浮点数、复数、整数(自动转换为浮点数) |
g |
与 g 等价,但小数用 f ,大数用 e |
浮点数、复数、整数(自动转换为浮点数) |
% |
百分比格式,数字自动乘上100后按 f 格式排版,并加 % 后缀 |
浮点数、整数(自动转换为浮点数) |
。
常用的特殊格式类型: 给定的用于排版时间信息的格式类型,适用于 、 和 对象 。
格式描述符 | 含义 | 显示样例 |
---|---|---|
%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' |
综合示例 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
>>> a
=
1234
>>> f
'a is {a:^#10x}'
# 居中,宽度
10
位,十六进制整数(大写字母),显示
0x
前缀
'a is 0x4d2 '
>>> b
=
1234.5678
>>> f
'b is {b:<+10.2f}'
# 左对齐,宽度10位,显示正号(+),定点数格式,2位小数
'b is +1234.57 '
>>> c
=
12345678
>>> f
'c is {c:015,d}'
# 高位补零,宽度15位,十进制整数,使用,作为千分分割位
'c is 000,012,345,678'
>>> d
=
0.5
+
2.5j
>>> f
'd is {d:30.3e}'
# 宽度30位,科学计数法,3位小数
'd is 5.000e-01+2.500e+00j'
>>>
import
datetime
>>> e
=
datetime.datetime.today()
>>> f
'the time is {e:%y-%m-%d (%a) %h:%m:%s}'
# datetime时间格式
'the time is 2018-07-14 (sat) 20:46:02'
|
lambda表达式 。
f-string大括号内也可填入lambda表达式,但lambda表达式的 : 会被f-string误认为是表达式与格式描述符之间的分隔符,为避免歧义,需要将lambda表达式置于括号 () 内:
1
2
3
4
5
6
7
8
9
10
|
>>> f
'result is {lambda x: x ** 2 + 1 (2)}'
file
"<fstring>"
, line
1
(
lambda
x)
^
syntaxerror: unexpected eof
while
parsing
>>> f
'result is {(lambda x: x ** 2 + 1) (2)}'
'result is 5'
>>> f
'result is {(lambda x: x ** 2 + 1) (2):<+7.2f}'
'result is +5.00 '
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:https://blog.csdn.net/sunxb10/article/details/81036693 。
最后此篇关于Python格式化字符串f-string概览(小结)的文章就讲到这里了,如果你想了解更多关于Python格式化字符串f-string概览(小结)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我有以下代码: interface F { (): string; a(): number; } function f() { return '3'; } f['a'] = f
比如我有一个 vector vector > v={{true,1},{true,2},{false,3},{false,4},{false,5},{true,6},{false,7},{true,8
我需要编写一个要在 GHCi 上运行的模块,并将函数组合为相同的函数。这个(经典的fog(x) = f(g(x)))运行: (.) f g = (\x -> f (g x)). 当我尝试这样写时出现问
动态规划这里有一个问题 大写字母AZ对应于整数[-13,12],因此一个字符串对应于一整列。我们将对应的整列的总和称为字符串的特征值。例如:字符串ACM对应的总体列为{-13,-11,-1},则ACM
我想知道为什么 F-Sharp 不支持无穷大。 这适用于 Ruby(但不适用于 f#): let numbers n = [1 .. 1/0] |> Seq.take(n) -> System.Div
如何从已编译的 F# 程序中的字符串执行 F# 代码? 最佳答案 这是一个小脚本,它使用 FSharp CodeDom 将字符串编译为程序集,并将其动态加载到脚本 session 中。 它使用类型扩展
有什么方法可以在 F# List 和 F# Tuple 之间转换? 例如: [1;2;3] -> (1,2,3) (1,2,3,4) -> [1;2;3;4] 我需要两个函数来做到这一点: le
我想将一个或多个 .fsx 文件加载到 F# 交互中,并将 .fsx 文件中定义的所有函数都包含在作用域中,以便我可以直接使用控制台中的功能。 #load 指令执行指定的 .fsx 文件,但随后我无法
我正在尝试像 this page 中那样编写 F 代数.不同之处在于,不是用元组组合,而是像这样: type FAlgebra[F[_], A] = F[A] => A def algebraZip[
给定一个 F# 记录: type R = { X : string ; Y : string } 和两个对象: let a = { X = null ; Y = "##" } let b = {
所以我们有一组文件名\url,如file、folder/file、folder/file2、folder/file3、folder/folder2/fileN等。我们得到一个字符串,如文件夹/。我们想
假设我有一个字符串“COLIN”。 这个字符串的数值是: 3 + 15 + 12 + 9 + 14 = 53. 所以 A = 1, B = 2, C = 3, and so on. 为此,我什至不知道
在 C# 中,我有以下代码来创建一个对象实例。 var myObject = new MyClass("paramvalue") { Property1 = "value1" Proper
即,标准库中有这样的函数吗? let ret x _ = x 为了保持代码可读性,我想尽量减少自制基本构建功能构建块的数量,并使用现有的东西。 最佳答案 不。你可能想看看 FSharpX。 关于f#
目前,我有一个函数可以将列表中每个列表的第一个元素( float )返回到单独的列表。 let firstElements list = match list with | head:
我刚刚解决了problem23在 Project Euler 中,我需要一个 set 来存储所有丰富的数字。 F# 有一个不可变集合,我可以使用 Set.empty.Add(i) 创建一个包含数字 i
F#语言具有计算自然对数的函数log和计算以10为底的对数的log10。 在F#中以2为底的对数的最佳计算方法是什么? 最佳答案 您可以简单地使用以下事实:“ b的a对数” = ln(b)/ ln(a
动机 我有一个长时间运行的 bool 函数,它应该在数组中执行,如果数组中的元素满足条件,我想立即返回。我想并行搜索并在第一个完整线程返回正确答案时终止其他线程。 问题 在 F# 中实现并行存在函数的
我最近完成了一个生成字符串列表的项目,我想知道执行此操作的最佳方法。 字符串生成是上下文敏感的,以确定它是否可以接受(这是游戏中的一系列游戏,所以你必须知道最后一次游戏是什么) 我这样做的方法是使用一
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我是一名优秀的程序员,十分优秀!