typora/note/Python/字符串格式化.md
2024-12-12 10:48:55 +08:00

140 lines
6.8 KiB
Markdown
Raw 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.

### 占位符
| 符 号 | 描述 |
| :----: | :----------------------------------: |
| `%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 分别是二进制、十进制、八进制、十六进制