### 占位符

| 符  号 |                 描述                 |
| :----: | :----------------------------------: |
|  `%c`  |        格式化字符及其ASCII码         |
| ` %s`  |             格式化字符串             |
|  `%d`  |              格式化整型              |
|  `%u`  |           格式化无符号整型           |
| ` %o`  |         格式化无符号八进制数         |
|  `%x`  |        格式化无符号十六进制数        |
|  `%X`  |    格式化无符号十六进制数（大写）    |
| ` %f`  | 格式化浮点数字，可指定小数点后的精度 |
| ` %e`  |       用科学计数法格式化浮点数       |
|  `%E`  | 作用同`%e`，用科学计数法格式化浮点数 |
|  `%g`  |           `%f`和`%e`的简写           |
|  `%G`  |         `%f `和` %E` 的简写          |
|  `%p`  |     用十六进制数格式化变量的地址     |

### 格式化辅助指令

| 符号  |                             功能                             |
| :---: | :----------------------------------------------------------: |
|   *   |                    定义宽度或者小数点精度                    |
|   -   |                          用做左对齐                          |
|   +   |                   在正数前面显示加号( + )                    |
| <sp>  |                      在正数前面显示空格                      |
|   #   | 在八进制数前面显示零('0')，在十六进制前面显示'0x'或者'0X'(取决于用的是'x'还是'X') |
|   0   |            显示的数字前面填充'0'而不是默认的空格             |
|   %   |                    '%%'输出一个单一的'%'                     |
| (var) |                      映射变量(字典参数)                      |
| m.n.  |    m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)     |



### str.format

- 通过 {} 和 : 来代替以前的 %
- 用大括号来转义大括号

```python
>>> print ("{} 对应的位置是 {{0}}".format("school"))
school 对应的位置是 {0}
>>> 
```

- format 函数可以接受不限个参数，位置可以不按顺序

```python
>>>"{} {}".format("hello", "world") # 不设置指定位置，按默认顺序
'hello world'
>>> "{0} {1}".format("hello", "world") # 设置指定位置
'hello world'
>>> "{1} {0} {1}".format("hello", "world") # 设置指定位置
'world hello world'
```

- 为format设置参数

```python
#!/usr/bin/python
# -*- coding: UTF-8 -*-
print("网站名：{name}, 地址 {url}".format(name="w3cschool教程", url="www.w3cschool.cn"))
# 通过字典设置参数
site = {"name": "w3cschool教程", "url": "www.w3cschool.cn"}
print("网站名：{name}, 地址 {url}".format(**site))
site = {"name": "w3cschool教程", "url": "www.w3cschool.cn"}
print("网站名：{0[name]}, 地址 {0[url]}".format(site))
# 通过列表索引设置参数
my_list = ['w3cschool教程', 'www.w3cschool.cn']
print("网站名：{0[0]}, 地址 {0[1]}".format(my_list)) # "0" 是必须的
```

- 向str.format传递对象，利用对象的属性进行格式化

```python
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class AssignValue(object):
    def __init__(self, value):
        self.value = value

my_value = AssignValue(6)
print('value 为: {0.value}'.format(my_value)) # "0" 是可选的
print('value 为: {.value}'.format(my_value))
```



### f-string格式化

- f-string 格式化字符串以 f 开头，后面跟着字符串，字符串中的表达式用大括号 {} 包起来，它会将变量或表达式计算后的值替换进去

```python
>>> name = 'W3Cschool'
>>> print(f'Hello {name}')  # 替换变量
Hello W3Cschool
>>> 
>>> print(f'{1+2}')         # 使用表达式
3
>>> 
>>> w = {'name': 'W3Cschool', 'url': 'www.w3cschool.cn'}
>>> print(f'{w["name"]}: {w["url"]}')
W3Cschool: www.w3cschool.cn
>>> 
```

- 在 Python 3.8 的版本中可以使用 = 符号来拼接运算表达式与结果

```python
>>> x = 1
>>> print(f'{x+1=}')   # Python 3.8
x+1=2
>>> 
```



### 数字格式化

| 数字       | 格式                                                         | 输出                                     | 描述                         |
| :--------- | :----------------------------------------------------------- | :--------------------------------------- | :--------------------------- |
| 3.1415926  | {:.2f}                                                       | 3.14                                     | 保留小数点后两位             |
| 3.1415926  | {:+.2f}                                                      | +3.14                                    | 带符号保留小数点后两位       |
| -1         | {:+.2f}                                                      | -1.00                                    | 带符号保留小数点后两位       |
| 2.71828    | {:.0f}                                                       | 3                                        | 不带小数                     |
| 5          | {:0>2d}                                                      | 05                                       | 数字补零 (填充左边, 宽度为2) |
| 5          | {:x<4d}                                                      | 5xxx                                     | 数字补x (填充右边, 宽度为4)  |
| 10         | {:x<4d}                                                      | 10xx                                     | 数字补x (填充右边, 宽度为4)  |
| 1000000    | {:,}                                                         | 1,000,000                                | 以逗号分隔的数字格式         |
| 0.25       | {:.2%}                                                       | 25.00%                                   | 百分比格式                   |
| 1000000000 | {:.2e}                                                       | 1.00e+09                                 | 指数记法                     |
| 13         | {:10d}                                                       | 13                                       | 右对齐 (默认, 宽度为10)      |
| 13         | {:<10d}                                                      | 13                                       | 左对齐 (宽度为10)            |
| 13         | {:^10d}                                                      | 13                                       | 中间对齐 (宽度为10)          |
| 11         | '{:b}'.format(11)<br/>'{:d}'.format(11)<br/>'{:o}'.format(11)<br/>'{:x}'.format(11)<br/>'{:#x}'.format(11)<br/>'{:#X}'.format(11) | 1011<br/>11<br/>13<br/>b<br/>0xb<br/>0XB | 二进制                       |

- ^, <, > 分别是居中、左对齐、右对齐，后面带宽度
- : 号后面带填充的字符，只能是一个字符，不指定则默认是用空格填充
- \+ 表示在正数前显示 +，负数前显示 -； （空格）表示在正数前加空格
- b、d、o、x 分别是二进制、十进制、八进制、十六进制