Python中的字符串格式化
在本文中,我们将讨论如何格式化字符串Python。字符串格式化是动态地在字符串中注入东西并呈现字符串的过程。有四种不同的方式来执行字符串格式化:-
- 使用 % 运算符进行格式化。
- 使用 format()字符串方法进行格式化。
- 使用字符串字面量进行格式化,称为 f-strings。
- 使用字符串模板类格式化
因此,我们将看到上述方式的全部内容,我们还将关注哪种字符串格式化策略是最好的。
使用 % 运算符格式化字符串
它是最古老的字符串格式化方法。这里我们使用模%运算符。模%也称为“字符串格式化运算符”。
示例:使用 %运算符格式化字符串
Python3
print("The mangy, scrawny stray dog %s gobbled down" +
"the grain-free, organic dog food." %'hurriedly')
Python3
x = 'looked'
print("Misha %s and %s around"%('walked',x))
Python3
print('Joe stood up and %s to the crowd.' %'spoke')
print('There are %d dogs.' %4)
Python3
print('The value of pi is: %5.4f' %(3.141592))
Python3
print('Floating point numbers: %1.0f' %(13.144))
Python3
variable = 12
string = "Variable as integer = %d \n\
Variable as float = %f" %(variable, variable)
print (string)
Python3
print('We all are {}.'.format('equal'))
Python3
print('{2} {1} {0}'.format('directions',
'the', 'Read'))
Python3
print('a: {a}, b: {b}, c: {c}'.format(a = 1,
b = 'Two',
c = 12.3))
Python3
print('The first {p} was alright, but the {p} {p} was tough.'.format(p = 'second'))
Python3
print('The valueof pi is: %1.5f' %3.141592)
# vs.
print('The valueof pi is: {0:1.5f}'.format(3.141592))
Python3
name = 'Ele'
print(f"My name is {name}.")
Python3
a = 5
b = 10
print(f"He said his age is {2 * (a + b)}.")
Python3
print(f"He said his age is {(lambda x: x*2)(3)}")
Python3
num = 3.14159
print(f"The valueof pi is: {num:{1}.{5}}")
Python3
# Python program to demonstrate
# string interpolation
from string import Template
n1 = 'Hello'
n2 = 'GeeksforGeeks'
# made a template which we used to
# pass two variable so n3 and n4
# formal and n1 and n2 actual
n = Template('$n3 ! This is $n4.')
# and pass the parameters into the
# template string.
print(n.substitute(n3=n1, n4=n2))
输出:
The mangy, scrawny stray dog hurriedly gobbled down the grain-free, organic dog food.
您还可以一次注入多个字符串,也可以使用变量在字符串中插入对象。
示例:使用 %运算符注入多个字符串
Python3
x = 'looked'
print("Misha %s and %s around"%('walked',x))
输出:
Misha walked and looked around.
'%s'用于注入字符串, '%d'用于整数, '%f'用于浮点值, '%b'用于二进制格式。对于所有格式,转换方法请访问官方文档。
例子:
Python3
print('Joe stood up and %s to the crowd.' %'spoke')
print('There are %d dogs.' %4)
输出:
Joe stood up and spoke to the crowd.
There are 4 dogs.
使用占位符方法的浮点精度:
浮点数使用格式%a.bf 。这里, a是字符串中出现的最小位数;如果整数没有这么多数字,这些可能会用空格填充。接近于此, bf表示要在小数点后显示多少位。
让我们看几个例子:
示例 1:使用 %运算符的浮点精度
Python3
print('The value of pi is: %5.4f' %(3.141592))
输出:
The value of pi is: 3.1416
示例 2:
Python3
print('Floating point numbers: %1.0f' %(13.144))
输出:
Floating point numbers: 13
示例 3:您可以在单个打印语句中使用多种格式转换类型
Python3
variable = 12
string = "Variable as integer = %d \n\
Variable as float = %f" %(variable, variable)
print (string)
Variable as integer = 12
Variable as float = 12.000000
注意:要了解有关 %-formatting 的更多信息,请参阅Python中的字符串格式化使用 %
使用 format() 方法格式化字符串
Format() 方法是在 Python3 中引入的,用于更有效地处理复杂的字符串格式化。格式化程序通过将一对花括号 { } 定义的一个或多个替换字段和占位符放入字符串并调用 str.format() 来工作。我们希望放入占位符并与作为参数传递给格式函数的字符串连接的值。
Syntax: ‘String here {} then also {}’.format(‘something1′,’something2’)
示例:使用 format() 方法格式化字符串
Python3
print('We all are {}.'.format('equal'))
输出:
We all are equal.
.format()方法比占位符方法有很多优点:
- 我们可以使用基于索引的位置插入对象:
Python3
print('{2} {1} {0}'.format('directions',
'the', 'Read'))
输出:
Read the directions.
- 我们可以使用分配的关键字插入对象:
Python3
print('a: {a}, b: {b}, c: {c}'.format(a = 1,
b = 'Two',
c = 12.3))
输出:
a: 1, b: Two, c: 12.3
- 我们可以重用插入的对象以避免重复:
Python3
print('The first {p} was alright, but the {p} {p} was tough.'.format(p = 'second'))
输出:
The first second was alright, but the second second was tough.
使用 .format() 方法的浮点精度:
Syntax: {[index]:[width][.precision][type]}
该类型可以与格式代码一起使用:
- 'd'表示整数
- 'f'表示浮点数
- 'b'表示二进制数
- 'o'表示八进制数
- 'x'表示八进制十六进制数
- 's'表示字符串
- 'e'表示指数格式的浮点数
例子:
Python3
print('The valueof pi is: %1.5f' %3.141592)
# vs.
print('The valueof pi is: {0:1.5f}'.format(3.141592))
输出:
The valueof pi is: 3.14159
The valueof pi is: 3.14159
注意:要了解更多关于 str.format() 的信息,请参阅Python中的 format()函数
使用 F 字符串格式化字符串
PEP 498 引入了一种新的字符串格式化机制,称为字面量字符串插值或更常见的 F 字符串(因为字符串字面量量之前的前导 f字符)。 f-strings 背后的想法是使字符串插值更简单。
要创建 f 字符串,请在字符串加上字母“ f ”。字符串本身的格式化方式与使用 str.format() 的方式大致相同。 F-strings 提供了一种简洁方便的方式来将Python表达式嵌入到字符串字面量中以进行格式化。
示例:使用 F 字符串格式化字符串
Python3
name = 'Ele'
print(f"My name is {name}.")
输出:
My name is Ele.
这种新的格式化语法非常强大和简单。您还可以插入任意Python表达式,甚至可以在其中进行算术运算。
示例:使用 F 字符串的算术运算
Python3
a = 5
b = 10
print(f"He said his age is {2 * (a + b)}.")
输出:
He said his age is 30.
我们还可以在f 字符串格式中使用lambda表达式。
示例:使用 F 字符串的 Lambda 表达式
Python3
print(f"He said his age is {(lambda x: x*2)(3)}")
输出:
He said his age is 6
f-String 方法中的浮点精度:
Syntax: {value:{width}.{precision}}
示例:使用 F 字符串的浮点精度
Python3
num = 3.14159
print(f"The valueof pi is: {num:{1}.{5}}")
输出:
The valueof pi is: 3.1416
注意:要了解更多关于 f-strings 的信息,请参阅Python中的 f-strings
字符串模板类
在字符串模块中,模板类允许我们为输出规范创建简化的语法。该格式使用由 $ 组成的占位符名称和有效的Python标识符(字母数字字符和下划线)。用大括号包围占位符允许它后面跟更多的字母数字字母,中间没有空格。编写 $$ 会创建一个转义的 $:
示例:使用模板类格式化字符串
Python3
# Python program to demonstrate
# string interpolation
from string import Template
n1 = 'Hello'
n2 = 'GeeksforGeeks'
# made a template which we used to
# pass two variable so n3 and n4
# formal and n1 and n2 actual
n = Template('$n3 ! This is $n4.')
# and pass the parameters into the
# template string.
print(n.substitute(n3=n1, n4=n2))
注意:要了解更多关于字符串模板类的信息,请参考Python中的字符串模板类
哪种字符串格式化方法最好?
f-strings比% -formatting 和str.format()更快更好。 f-strings 表达式在运行时被评估,我们也可以使用非常简单易用的语法将表达式嵌入到 f-string 中。大括号内的表达式在运行时计算,然后与 f 字符串的字符串部分放在一起,然后返回最终的字符串。
注意:如果您使用的是Python 3.6+,请使用 f-Strings,如果不是,请使用 .format() 方法。