geekdoc-python-zh/docs/askpython/string-formatting.md

163 lines
5.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Python 中的字符串格式——快速概述
> 原文:<https://www.askpython.com/python/string/string-formatting>
字符串格式化,顾名思义,指的是 Python 中格式化字符串的多种方式。在本教程中,我们将讨论不同的方法以及如何使用它们。
## 什么是字符串格式?
假设你正在编写一个程序,打印一个数字的平方。在你的输入中,你从用户那里得到一个整数,在输出中,你告诉用户这个整数的平方是某某。
例如,如果输入是 12那么您需要打印“12 的平方是 144”。我们不能像这样写一个完整的字符串因为我们有两个整数要插入到字符串中所以我们需要一种方法来生成这个字符串。字符串格式化允许我们这样做。
注意:如果我们做`print("The square of", input, "is", result)`,这将打印四种不同的东西,它不会生成格式化的字符串,所以这不算字符串格式化。
## 字符串格式化技术的类型
今天我们将讨论三种格式化字符串的方法:
1. 使用%运算符
2. 使用 f 弦
3. 使用 format()方法
让我们逐一讨论每种方法。
### 1。使用`%`操作符的字符串格式
这是字符串格式化的老方法,对于简单的操作仍然有用。这与 c 语言中的`printf`语句非常相似。
让我们举一个例子:
```py
num = 12
result = num * num
str = "The square of %d is %d" % (num, result)
print(str)
```
输出:
```py
The square of 12 is 144
```
我们有两个整数,`num`和`result`。在双引号中,我们写的是要打印的整个字符串,但是我们写的不是整数,而是`%d`。这将告诉 Python 这里要替换一个整数。
在字符串之后,我们使用`%`操作符并写入第二个操作数,它是一个元组,包含要以正确顺序替换的整数列表。在上面的例子中,我们有两个整数需要替换,所以我们将这两个整数写入一个元组,并将其作为第二个操作数。
请注意,在我们编写的字符串`%d`中,`%`之后的内容被称为格式说明符。在示例中,`d`是为整数指定的格式,`s`是为字符串指定的格式,`f`是为浮点或小数指定的格式,等等。要查看说明符的完整列表,我们可以查看 [Python 文档](https://docs.python.org/3/library/stdtypes.html#old-string-formatting)。
#### 使用`%`格式化字符串的技巧
1. 我们可以在`%`和格式说明符(例如`%5d`)之间指定一个数字Python 会给整数左填充,这样整数的字符总数就等于指定的数字。如果是`%5d`,则将“123”替换为“123 ”,将 12 替换为“12 ”,以此类推。
2. 上面的数字可以在左边指定一个零(例如`%05d`)Python 会给这个整数类似的左填充,但不是空格,而是零。例如,在%05d 的情况下“123”将被替换为“00123”“12”将被替换为“00012”等等。
3. 上面的数字也可以在左边用“-”号(`%-5d`)来指定Python 不会提供左边的填充,而是在右边提供填充。因此,对于`%-5d`将“123”替换为“123”“12”将替换为“12”以此类推。
当要构造一个表时,这些点可以派上用场。
### 2。使用 f 字符串格式化
这是最容易理解的,也是最广泛使用的格式化技术。为了理解它,让我们举个例子。
```py
num = 12
result = num * num
str = f"The square of {num} is {result}"
print(str)
```
输出:
```py
The square of 12 is 144
```
正如你所看到的我们直接将表达式嵌入到字符串中。该字符串还以字母“f”为前缀这将告诉 python 它是一个 [f 字符串](https://www.askpython.com/python/string/python-f-string),无论在`{`和`}`中写入什么表达式,都将被计算并嵌入到字符串的那个位置。
花括号内的表达式不必是单个变量,而是可以是任何返回值的语句。它可以是算术计算、函数调用或条件运算。让我们看一个例子:
```py
a = 1
b = 2
str = f"Expression: {a + b}"
print(str)
```
输出:
```py
Expression: 3
```
在上面的例子中,我们在 f 字符串内部执行了一个数学运算。所以我们可以看到 f 弦是强大的选项。
让我们看另一个例子:
```py
a = 1
b = 2
str = f"a is '{a:5}' and b is '{b:05}'"
print(str)
```
输出:
```py
a is ' 1' and b is '00002'
```
类似于`%`操作符,我们也可以如上例所示指定填充。
### 3。使用`.format()`方法进行字符串格式化
这种方法非常类似于 f 字符串,让我们用一个例子来看看:
```py
num = 12
result = num * num
str = "The square of {} is {}".format(num, result)
print(str)
```
输出:
```py
The square of 12 is 144
```
正如我们所看到的,在字符串内部,我们使用`{}`指定了两个占位符,然后我们对字符串使用`format`方法,并传递适当的整数以正确的顺序替换。
我们可以将标识符放在花括号内,但是我们稍后必须发送标识符的值。我们也可以像前面一样指定左填充。举个例子:
```py
a = 1
b = 2
str = "a is '{first}' and b is '{second:03}'".format(first=a, second=b)
print(str)
```
输出:
```py
a is '1' and b is '002'
```
在上面的例子中,我们将名字放入占位符中,在 [`format`方法的](https://www.askpython.com/python/string/python-format-function)参数列表中,我们使用名字为每个占位符指定值。与其他技术一样,第二个占位符甚至被指定为左边零填充。
## 结论
在本教程中,我们学习了字符串格式,并讨论了三种常见的方法。我们首先学习了`%`操作符,然后我们继续学习 f 字符串和`format`方法。我们还讨论了如何向格式化字符串添加填充,并通过查看其输出来研究代码。
希望你学得愉快,下次教程再见。