06-01字符串格式化.md
目录
字符串格式化
字符串格式化是拼接字符串的一种手段
字符串的几种连接方式
- join和 + 拼接字符串难以控制格式
str.join连接,将可迭代对象转换为字符串
str.join连接,将可迭代对象转换为字符串
注意:此操作会返回一个新的字符串对象,但不会操作原有可迭代对象
In [73]: lst = [‘i‘, ‘am‘, ‘comyn‘] In [74]: ‘ ‘.join(lst) # join是字符串的方法,参数是可迭代对象,接收者是分隔符 Out[74]: ‘i am comyn‘ In [76]: ‘,‘.join(lst) Out[76]: ‘i,am,comyn‘ In [77]: ‘‘.join(lst) Out[77]: ‘iamcomyn‘
+号连接,返回一个新的字符串
In [1]: ‘i‘ + ‘love‘ + ‘python‘ Out[1]: ‘ilovepython‘
printf style字符串格式化
- printf style字符串格式化:从C语言继承过来的。
- printf style格式化对从其他语言, 尤其是C语言转过来的, 非常容易接受, 但是并不是
Python所推荐的方法
。
s = ‘i love %s‘ # 待格式化的字符串, 当一个字符串存在占位符的时候, 占位符:%加一个格式控制符 In [6]: s = ‘i love %s‘ In [7]: s % (‘python‘, ) # 传入参数顺序的替换占位符, 返回替换后的字符串。原串不变的 Out[7]: ‘i love python‘ In [10]: ‘i love %s, i am %d‘ % (‘python‘, 18) # 多少个占位符需要传入多少个值 Out[10]: ‘i love python, i am 18‘ IIn [11]: ‘i love %s, i am %d‘ % (‘python‘, ) # 如果少传会抛出TypeError --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-11-6aabfc9d03a3> in <module>() ----> 1 ‘i love %s, i am %d‘ % (‘python‘, ) TypeError: not enough arguments for format string 格式说明符: d:int类型, 数字 i:int类型, 数字 o:有符号的八进制数 u:int类型 x:小写16进制 X:大写16进制 e:小写的科学计数法 E:大写的科学计数法 f:浮点数 F:浮点数 G:指数或浮点数(根据显示长度) g:指数和浮点数(根据显示长度) r: s: %:代表占位符的开始 In [15]: s = ‘i love %s, i am %d‘ In [16]: s % (‘python‘, 18) Out[16]: ‘i love python, i am 18‘ In [17]: s % (‘python‘, ‘18‘) # 如果类型不匹配就会抛出TypeError --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-17-d1dde78cf999> in <module>() ----> 1 s % (‘python‘, ‘18‘) TypeError: %d format: a number is required, not str In [18]: s % (18, 18) # 当占位符是%s, 其实隐式的调用了str() Out[18]: ‘i love 18, i am 18‘ In [19]: ‘%r‘ % 18 # %r隐式调用了repr() Out[19]: ‘18‘ In [21]: print(‘%s‘) %s In [22]: print(‘%s %d‘) %s %d
format字符串格式化
- format方法使用大括号做为占位符:‘i love {}‘.format(‘python‘)
- 可以有多个大括号和对应的多个值。当传入的值比大括号少时报错IndexError,当传入的值比大括号多时则忽略掉多余的值
- 位置参数:s = ‘i love {1}, i am {0}‘
- 参数可以通过指定位置方式多次使用:‘{0} {0}‘.format(‘hahahaha‘)
- 关键字参数:‘i love {lang} i am {age}‘.format(lang=‘python‘, age=18)
- 同时支持位置参数和关键字参数
- 位置参数和关键字参数混用的时候, 位置参数必须在前面, 关键字参数在后面
- 占位符和参数不匹配, 会抛出异常(上个是参数个数)
- {} 按照顺序,使用位置参数
- {数字 i} 会把位置参数当成一个列表 args, args[i]; 当i不是args的索引的时候, 抛出IndexError
- {关键字 k} 会把关键字参数当成一个字典kwargs, 使用kwargs[k]; 当k不是kwargs的key时,会抛出KeyError
- 转义:‘{{}}‘.format()
- 使用建议
- python 2.6版本, 不能省略大括号里的数字或者关键字
- 通常使用2.6(含)之后的版本用Format方法, 2.6之前使用printf style
In [24]: s = ‘i love {}‘ # format方法使用大括号做为占位符 In [25]: s.format(‘python‘) # 当调用format方法时,format传入的参数会替代大括号 Out[25]: ‘i love python‘ In [26]: s = ‘i love {} i am {}‘ In [28]: s.format(‘python‘, 18 ) # format方法的参数个数是可变的 Out[28]: ‘i love python i am 18‘ In [29]: s = ‘i love {1}, i am {0}‘ # 可以在占位符加数字指定format参数的位置 In [30]: s.format(18, ‘python‘) Out[30]: ‘i love python, i am 18‘ In [31]: ‘{0} {0}‘.format(‘hahahaha‘) # 参数可以通过指定位置方式多次使用 Out[31]: ‘hahahaha hahahaha‘ In [32]: ‘i love {lang} i am {age}‘.format(lang=‘python‘, age=18) # 可以在占位符里加标示符,来使用关键字参数 Out[32]: ‘i love python i am 18‘ In [33]: ‘my name is {0} i love {lang} i am {age}‘.format(‘comyn‘, lang=‘python‘, age=18) # 同时支持位置参数和关键字参数 Out[33]: ‘my name is comyn i love python i am 18‘ 位置参数和关键字参数混用的时候, 位置参数必须在前面, 关键字参数在后面 In [34]: ‘{} {}‘.format(18) # 占位符和参数个数不匹配,会抛出异常 --------------------------------------------------------------------------- IndexError Traceback (most recent call last) <ipython-input-34-21db8d47c754> in <module>() ----> 1 ‘{} {}‘.format(18) IndexError: tuple index out of range In [35]: ‘{} {lang}‘.format(18) --------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-35-afb26cfd80bf> in <module>() ----> 1 ‘{} {lang}‘.format(18) KeyError: ‘lang‘ In [36]: ‘{1} {2}‘.format(0, 1, 2) # 占位符和参数个数不匹配, 不抛出异常的场景 Out[36]: ‘1 2‘ In [108]: ‘{1}, {2}, {3}‘.format(0, 1, 2) # 占位符个数匹配了, 依然会抛出异常 --------------------------------------------------------------------------- IndexError Traceback (most recent call last) <ipython-input-108-8745c3f7069b> in <module>() ----> 1 ‘{1}, {2}, {3}‘.format(0, 1, 2) IndexError: tuple index out of range 占位符和参数不匹配, 会抛出异常(上个是参数个数) {} 按照顺序,使用位置参数 {数字 i} 会把位置参数当成一个列表 args, args[i]; 当i不是args的索引的时候, 抛出IndexError {关键字 k} 会把关键字参数当成一个字典kwargs, 使用kwargs[k]; 当k不是kwargs的key时,会抛出KeyError In [39]: ‘{{}}‘.format() # 转义出{} Out[39]: ‘{}‘ In [42]: ‘{{}} {}‘.format(18) Out[42]: ‘{} 18‘ In [44]: ‘{{{}}}‘.format(18) # 一层转义 Out[44]: ‘{18}‘ In [45]: ‘{{{{{}}}}}‘.format(18) # 两层转义 Out[45]: ‘{{18}}‘ format还有更多用法, 其他用法请参考官方文档 python 2.6版本, 不能省略大括号里的数字或者关键字 通常使用2.6(含)之后的版本用Format方法, 2.6之前使用printf style
相关推荐
银角大王 2020-07-05
waiwaiLILI 2020-03-20
dxbjfu0 2020-03-06
柠檬班 2020-02-23
yogoma 2020-02-19
jessieHJ 2020-01-25
CloudXli 2019-11-19
zhangpan 2019-10-28
codeAB 2019-10-24
chunjiekid 2020-06-04
SDUTACM 2020-04-19
sulindong0 2020-04-17
星辰大海的路上 2020-04-17
yogoma 2020-04-07
文山羊 2020-03-23
银角大王 2020-03-07
sdwylry 2020-01-05
liugan 2019-12-20