Python语法速查: 3. 字符串格式化
本篇索引
(1)简易字符串格式化
(2)高级字符串格式化
(3)多行与原始字符串
(4)字符串插值
(1)简易字符串格式化
字符串属于不可变序列,只能生成新的,不能改变旧的。“字符串格式化”有点像以前C语言的sprintf,可以将若干变量代入格式化的字符串,生成一个符合要求的新字符串。
| 转换字符 | 简述 | 举例或说明 |
|---|---|---|
| %d | 十进制整数 |
'num: %d' %16 # 结果为 'num: 16' |
| %o | 八进制整数 |
'num: %o' %16 # 结果为 'num: 20' |
| %x, %X | 十六进制整数(大小写影响输出字母) |
'num: %x' %31 # 结果为 'num: 1f'(小写) 'num: %X' %31 # 结果为 'num: 1F'(大写) |
| %f, %F | 浮点数,默认输出6位小数(不区分大小写) |
'num: %f' %3.14 # 结果为 'num: 3.140000' |
| %e, %E | 用科学计数法表示的浮点数(大小写影响输出字母) |
'num: %e' %314 # 结果为 'num: 3.140000e+02' 'num: %E' %314 # 结果为 'num: 3.140000E+02' |
| %g, %G | 若“指数<-4”或“指数>5”则和%e,%E相同,否则同%f,%F(大小写影响输出字母) |
'num: %g' %3140000 # 结果为 'num: 3.140000e+06' 'num: %g' %314 # 结果为 'num: 314' |
| %s | 字符串或任意可用str()生成字符串的对象 |
'a %s' %'box' # 结果为 'a box' 'a %s' %[1,2] # 结果为 'a [1,2]' |
| %r | 同上,只不过用repr()去生成字符串 |
'a %r' %'box' # 结果为 "a 'box'" |
| %c | 用ascii码数字去生成单个字符 |
'char is %c' %97 # 结果为 'char is a' 'char is %c' %0x61 # 结果为 'char is a' |
| %% | 转义%(百分号) |
'50 %%' # 结果为 '50 %' |
| %(键名)转换字符 | 指定的键必须出现在后面的字典中,若不存在则引发KeyError错误 |
'%(a)d' %{'a':1} # 结果为 '1',注意:转换字符d不要漏掉 |
“修饰符”可以插入上面的%和字母之间,用以更精确地控制输出字符串的格式,若干个修饰符可组合一起使用。
| 修饰符 | 简述 | 举例或说明 |
|---|---|---|
| 数字 | 指定被修饰对象的最小宽度(默认右对齐) |
'a%5d' %3 # 结果为 'a 3' (数字3前面有4个空格) 'a%5s' %'bc' # 结果为 'a bc' (bc前面有3个空格) |
| - | 表示左对齐 |
'a%-5d' %3 # 结果为 'a3 ' (数字3后面有4个空格) 'a%-5s' %'bc' # 结果为 'abc ' (bc后面有3个空格) |
| + | 若被修饰对象为正数,则数字前生成加号 |
'a%+5d' %3 # 结果为 'a +3' (数字+3前面有3个空格) 'a%-+5d' %3 # 结果为 'a+3 ' (左对齐,+3后有3个空格) |
| 空格 | 若被修饰对象为正数,则数字前保留一个空格 |
'a% 5d' %3 # 结果为 'a 3' (' 3'后面有3个空格) 'a%-+5d' %3 # 结果为 'a 3 ' (' 3'后有3个空格) |
| 0 | 若被修饰对象为数字且为右对齐,则在数字前用0代替空格填充 |
'a%+05d' %3 # 结果为 'a+0003' (%+05d的总宽度仍为5) |
| .数字 | 若被修饰对象为浮点数,则表示小数点后显示位数;若为字符串,则表示字符串的最大宽度 |
'%8.2f' %3.1415 # 结果为 ' 3.14' '# 上例含义为:总宽度为8,小数点后保留2位小数,故3.14前有4个空格 |
| * | 可以在指定格式数字(宽度、小数位数等)时,用*字符代替直接数字,然后在后面的变量中给出数值 |
a = 8; b = 2 '%*.*f' %(3.14,a,b) # 结果为 ' 3.14' |
(2)高级字符串格式化
通过在字符串对象上调用format()方法来进行字符串格式化,使字符串格式化的语法更加规范。除了一些极其简单的情况外,一般推荐用format()这种方式来进行字符串格式化。
● 基本用法
以下在字符串内花括号中的内容称为“占位符”。
| 用法 | 简述 | 举例或说明 |
|---|---|---|
| {数字} | 位置参数方式,花括号中的占位符指明后面数据出现的位置(从0开始) |
'{0} {1} is {2}'.format('a','b',3.14) # 结果为 'a b is 3.14' |
| {参数名} | 关键字参数方式,花括号中占位符指明后面数据的关键字参数 |
'{name} is {age}'.format(name='Tom',age=6) # 结果为 'Tom is 6' |
| 联合使用 | 根据函数入参规则,所有位置数据必须出现在关键字参数前面 |
'{0} plus {1} is {ans}, {name}!'.format(1,5,ans=6,name='Tom') # 结果为 '1 plus 5 is 6, Tom!' |
| 扩展使用 | 占位符还可以进行序列索引、字典键名、对象属性查找,用法见右边各例。 |
'{0[2]}'.format([1,2,3]) # 序列索引,结果为 '3' '{li[2]}'.format(li=(1,2,3)) # 序列索引,结果为 '3' '{0[a]}'.format({'a':1}) # 字典键名索引,结果为 '1' '{0.attr}'.format(obj) # 取出对象的属性,假设 obj对象具有属性attr |
| {{, }} | 如果要在字符串中表示花括号本身,则需要打上2个花括号 |
'{{abc}}'.format() # 结果为 '{abc}' |
● 格式说明符
可以使用格式说明符,对输出进行更加精确的控制。方法是用一个冒号给每个占位符添加格式说明,即 {占位符 :格式说明符 } 的形式。“格式说明符”的基本语法如下:
[ [fill] align] [sign] [0] [width] [group_option] [.precision] [type]
上面 [] 中的每个说明符都是可选的,各说明符的含义和用例见下表:
| 说明符 | 简述 | 举例或说明 |
|---|---|---|
| fill | fill必须align一起使用,用来指定填充字符。 |
'{0:*^9}'.format('abc') # 结果为 '***abc***' # 其中,*为填充字符,^表示居中对齐,9为指定宽度 |
| align | 对齐方式(默认数字为右对齐,字符串为左对齐),可取值为:<, >, ^,分别表示:左对齐、右对齐、居中对齐。 |
'{0:5}'.format('abc') # 结果为 'abc ' '{0:>5}'.format('abc') # 结果为 ' abc' '{0:^5}'.format('abc') # 结果为 ' abc ' |
| sign | 可取值为:+, -, 空格。“+”表示所有数字前都要加上符号,“-”表示只在负数前加符号(默认值),“空格”表示在正数前面加一个空格。 |
'{0:+}'.format(3.14) # 结果为 '+3.14' |
| 0 | 用0来填充数字前面的空白,对字符串不起作用 |
'{0:+08}'.format(3.14) # 结果为 '+0003.14' |
| width | 指明宽度 |
'{0:8}'.format(3.14) # 结果为 ' 3.14' '{0:8}'.format('abc') # 结果为 'abc ' |
| group_option | 千分位分隔,取值可为“,”或“_”(下划线为Python3.6新增,可用来表示二、八、十六进制的每4位分隔。) |
'{0:,}'.format(12345678) # 结果为 '12,345,678' '{0:_b}'.format(0xA5) # 结果为 '1010_0101' |
| .precision | 浮点数要显示的位数,后面需跟type为f或e,否则不起作用。 |
'{0:.4f}'.format(3.14) # 结果为 '3.1400' '{0:.4e}'.format(3.14) # 结果为 '3.1400e+00' |
| type | 辅助声明“说明符”的数据类型,可取值范围见下表。(默认:字符串为s、整数为d、小数为f) |
type各值举例见下表 |
● type取值范围
| 字符 | 简述 | 举例或说明 |
|---|---|---|
| d, i | 十进制整数 |
'{0:d}'.format(10) # 结果为 '10' |
| b | 二进制整数 |
'{0:b}'.format(10) # 结果为 '1010' |
| o | 八进制整数 |
'{0:o}'.format(10) # 结果为 '12' |
| x, X | 十六进制整数(大小写影响输出字母) |
'{0:x}'.format(10) # 结果为 'a' '{0:X}'.format(10) # 结果为 'A' |
| f, F | 浮点数(默认显示6位小数) |
'{0:f}'.format(3.14) # 结果为 '3.140000' |
| e, E | 科学计数法表示(大小写影响输出字母) |
'{0:e}'.format(3.14) # 结果为 '3.140000e+00' '{0:E}'.format(3.14) # 结果为 '3.140000E+00' |
| g, G | 若“指数<-4”或“指数>5”则和g,G相同,否则同f,F(且不会去填满小数6位) |
'{0:g}'.format(3.14) # 结果为 '3.14' |
| % | 把一个数乘以100,并在后面加上百分号 |
'{0:%}'.format(3.14) # 结果为 '314.000000%' |
| s | 表示字符串 |
'{0:s}'.format('abc') # 结果为 'abc' |
| c | 用ascii码数字去生成单个字符 |
'{0:c}'.fomrat(97) # 结果为 'a' |
● 用参数代入说明符
说明符同样可以用format()函数的输入参数来代入,但只能嵌套一层深度,用法举例见下:
>>> '{0:{w}}'.fomrat('a',w=3) # 结果为 'a ' (将{w}用后面的参数w=3代入,变为'{0:3}'
>>> '{0:.{1}f}'.format(3.14,4) # 结果为 '3.1400' (将{1}用后面的第二个参数4代入,变为'{0:.4f}')
(3)多行与原始字符串
● 多行字符串
一般字符串若要换行,可以使用反斜杠“\”来换行,反斜杠不仅能用于字符串,程序代码中亦可使用反斜杠来换行。
s = "This is a multiline \
string using backslash."
对于使用反斜杠换行的字符来说,Python不会在其中插入“\n”换行符。
如果真的要表示大段的多行字符串,可以用三个双引号或三个单引号来表示,且不必使用反斜杠。其中可自由使用单引号、双引号,而不必使用转义斜杠。
s = """The 1st line.
The 2nd line.
The 3rd line.
... """
Python会在其中换行处,自动添加插入“\n”换行符。
● 原始字符串
如果字符串中要使用大量的转义反斜杠,可以用“原始字符串”(前加关键字r)。在原始字符串中,所有特殊符号均不转义。
s = "C:\\dir\\subdir1\subdir2"
# 可以写成
s = r"C:\dir\subdir1\subdir2"
注意:“原始字符串”的结尾不能用反斜杠!
● 附:常用转义字符
| 转义字符 | 描述 | 转义字符 | 描述 |
|---|---|---|---|
| \ | 续行符 | \\ | 反斜杠 |
| \' | 单引号 | \" | 双引号 |
| \a | Bell(响铃符) | \b | 退格符 |
| \e | Esc | \0 | Null(空值) |
| \t | 水平制表符 | \v | 垂直制表符 |
| \n | 换行符 | \r | 回车符 |
| \f | 换页符 | ||
| \数字 | 八进制值(范围:\000~\377)。 例如:'\60',即为字符 '0' | ||
| \x数字 | 十六进制值(范围:\x00~\xff)。 例如:'\x30',即为字符 '0' | ||
| \uxxxx | 双字节Unicode字符。 例如:'\u4E00',即为汉字 “一” | ||
| \Uxxxxxxxx | 四字节Unicode字符。 例如'\U00004E00',即为汉字 “一” | ||
| \N字符名称 | 较少用到 | ||
(4)字符串插值
Python 3.6 添加了一种新的字符串格式化方法,这种新的格式化字符串允许在字符串常量中使用嵌入的 Python 表达式(使用花括号表示表达式),这种方式需要在字符串前加上字母“f”,称为“f-strings”。
这个功能及其强大,如果你使用的是 Python 3.6以上版本,优先推荐使用这种方式。 f-strings同时也支持上面 format() 方法中各种“格式说明符”的使用,下面是一些例子:
name = 'world'
a, b = 1, 2
err = 31
f'Hello {name}!'
f'{a} plus {b} is {a+b}.'
f'error num is {err:X}'
f'error num is {err:#X}'
执行结果
Hello world!
1 plus 2 is 3.
error num is 1F
error num is 0x1F
Python语法速查: 3. 字符串格式化的更多相关文章
- Python语法速查: 4. 字符串常用操作
返回目录 (1)字符串常用方法 Python3中,字符串全都用Unicode形式,所以省去了很多以前各种转换与声明的麻烦.字符串属于序列,所有序列可用的方法(比如切片等)都可用于字符串. 注意:字符串 ...
- Python语法速查:目录
1. 数据类型与内置函数 2. 列表.元组.字典.集合操作 3. 字符串格式化 4. 字符串常用操作 5. 运算符.math模块.表达式 6. 循环与迭代 7. 函数基础 8. 类与对象 9. 函数进 ...
- Python语法速查: 13. 操作系统服务
返回目录 本篇索引 (1)sys模块 (2)os模块 (3)与Windows相关模块 (4)subprocess模块 (5)signal模块 (1)sys模块 sys模块用于Python解释器及其环境 ...
- Python语法速查: 12. 文件与输入输出
返回目录 (1)文件基本操作 ● 文件常用操作 内置函数或方法 描述 open(name [,mode [,buffering]]) 内置函数.用来打开文件,返回一个文件对象(file对象).详见下述 ...
- Python语法速查: 7. 函数基础
返回目录 (1)函数基本 ● 函数是第一类对象 Python中万物皆对象,所有对象都是第一类的(first class),函数也不例外,也是第一类对象.既然是对象,那就可以当作普通的对象数据处理,比如 ...
- Python语法速查: 1. 数据类型与内置函数
返回目录 (1)常用内置数据类型 分类 类型名称 描述 数字 int 整数 float 浮点数 complex 复数 bool 布尔值 序列 str 字符串(不可变序列) list 列表 tuple ...
- Python语法速查: 5. 运算符、math模块、表达式
返回目录 (1)一些较容易搞错的运算符 一般简单的如加减乘除之类的运算符就不写了,这里主要列些一些容易搞错或忘记的运算符.运算符不仅仅只有号,有一些英文单词如 in, and 之类,也是运算符,并不是 ...
- Python语法速查: 14. 测试与调优
返回目录 本篇索引 (1)测试的基本概念 (2)doctest模块 (3)unittest模块 (4)调试器和pdb模块 (5)程序探查 (6)调优与优化 (1)测试的基本概念 对程序的各个部分建立测 ...
- Python语法速查: 20. 线程与并发
返回目录 本篇索引 (1)线程基本概念 (2)threading模块 (3)线程间同步原语资源 (4)queue (1)线程基本概念 当应用程序需要并发执行多个任务时,可以使用线程.多个线程(thre ...
随机推荐
- 阿里云MVP 第十期全球发布:让天下没有难做的技术
简介: MVPs与阿里云一起探索前路,用技术改变世界! 在云的世界中,从来没有“简单”二字,想成为一个优秀的开发者,也没有“简单”二字,而阿里云MVP就一直是云计算中最为顶尖的专家.现在,阿里云MVP ...
- 利用keras自带影评数据集进行评价正面与否的二分类训练
from keras.datasets import imdb from keras import layers from keras import models from keras import ...
- YII2中andWhere多个or查询
使用多个or的复杂查询: AND ((`name`='张三') OR (`name`='李四') OR (`name`='王五')) // AND ((`name`='张三') OR (`name`= ...
- 剑指offer笔记面试题5----替换空格
题目:请实现一个函数,把字符串中的每个空格替换成"20%".例如,输入"We are happy."则输出"We%20are%20happy.&quo ...
- 3、netty第二个例子,使用netty建立客户端,与服务端通讯
第一个例子中,建立了http的服务器端,可以直接使用curl命令,或者浏览器直接访问. 在第二个例子中,建立一个netty的客户端来主动发送请求,模拟浏览器发送请求. 这里先启动服务端,再启动客户端, ...
- Git 自救指南
Git 虽然因其分布式管理方式,不完全依赖网络,良好的分支策略,容易部署等优点,已经成为最受欢迎的源代码管理方式.但是一分耕耘一分收获,如果想更好地掌握 git,需要付出大量的学习成本.即使在各种 G ...
- Python语法速查: 13. 操作系统服务
返回目录 本篇索引 (1)sys模块 (2)os模块 (3)与Windows相关模块 (4)subprocess模块 (5)signal模块 (1)sys模块 sys模块用于Python解释器及其环境 ...
- leetcode题解:整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出 ...
- 范罗士空气净化器PT65评测
买了一台空气净化器,之前网上查了查,哟,是个知名品牌,做碎纸机的. 你问我为啥找个卖碎纸机的买空气净化器?因为年轻,咱们往下看 包装还可以 一打开就有疑问了,这塑料味道不对呀,三手料也不该这个味儿啊. ...
- js 生成32位随机数,可用于微信支付流水号(前端生成)
$(function () { /*生成32位随机流水号*/ /*默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1*/ var $chars = 'ABCDEFGHJKMNPQRSTWXYZ ...