python学习笔记之--字符串格式化的几种方法

2022-01-17  本文已影响0人  itsenlin

占位符

python语言提供了print内建函数,可以用来打印运行过程中的一些信息,是比较简单原始的调试方法,也是常用的一种

注意,print不带f,从c语言转过来的要注意

类似其他语言,python对字符串也提供了占位符的特性,以方便字符串的格式输出
python中点位符如下


image.png

字符串格式化

在python中字符串格式化有以下几种方式可以实现

使用点位符

这是一种引入最早的一种,也是比较容易理解的一种方式
使用方式为:

  1. 格式化字符串中变化的部分使用占位符
  2. 变量以元组形式提供
  3. 变量与格式化字符串之间以%连接

例如:

>>> a = 'test'
>>> print('this is %s' % a)
this is test
>>> b = 1
>>> print('a = %s, b = %d' % (a, b))
a = test, b = 1
>>>

内建函数format

format是string模块的一个内建函数,使用方法为str.format(args)
这种方式下,格式化字符串中变量部分通过{}来占位,具体的值通过format函数的参数args提供,有以下几种方式

说明: []内为元组元素下标,[]前面的数字为元组做为参数的位置

如果需要将结果进行对齐等操作,可以在{}中使用:,前面的是位置等参数,后面的对齐等符号,
先看几个例子

>>> print('a = {:.2f}'.format(1.324))
a = 1.32
>>> print('a = {:.10f}'.format(1.324))
a = 1.3240000000
>>> print('a = {:*^10}'.format(1.324))
a = **1.324***
>>> print('a = {:*^10}'.format('test'))
a = ***test***
>>> print('a = {:*^4}'.format('test'))
a = test
>>>

说明:{:1234}

  1. 填充符/精度符,如上面例子中的*当变量结果不够显示时,就使用填充符进行填充剩余位置;例子中的.表示数字的精度符,位数不够显示时会用0填充
  2. 对齐符,^<>分别是居中、左对齐、右对齐
  3. 是一个数字,表示显示的结果中的字符个数,包含分隔符;如果前面是一个.,此数字表示保留几位小数
  4. 当变量是数字是,表示数字的类型

string模块的Template

这是string模块提供的一个模板类,默认使用$或者${}(建议使用这个)来占位,而不是%
具体用法如下:

>>> from string import Template
>>> s='hi ${name}'
>>> t = Template(s)
>>> t.substitute(name='alex')
'hi alex'
>>> 

Template还有一个safe_substitute函数,当格式化字符串中有变量未给出值时,此函数将占位符当成字符串输出,而substitute会报错

>>> s1 = 'hi ${name}, ${age}'
>>> t = Template(s1)
>>> t.substitute(name='alex')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.8/string.py", line 126, in substitute
    return self.pattern.sub(convert, self.template)
  File "/usr/local/lib/python3.8/string.py", line 119, in convert
    return str(mapping[named])
KeyError: 'age'
>>> t.safe_substitute(name='alex')
'hi alex, ${age}'
>>>

当需要输出一个$符号时,可以使用$$

>>> s1 = 'hi ${name}, have $$100'
>>> t = Template(s1)
>>> t.substitute(name='alex')
'hi alex, have $100'
>>> 

用户自定义Template

Template是一个类,用户可以从此类中派生子类,来实现更为自定义的功能,例如将占位符$改为%

>>> class MyTemplate(Template):
...     delimiter = '%'
... 
>>> s = 'hi %{name}, have $100'
>>> t = MyTemplate(s)
>>> t.substitute(name='alex')
'hi alex, have $100'
>>> 

同理,这个时候想输出一个%,就需要使用%%来转义

>>> s = 'hi %{name}, have $100 100%%'
>>> t = MyTemplate(s)
>>> t.substitute(name='alex')
'hi alex, have $100 100%'
>>>

f-string

由python3.6版本引入的一个特性,称之为字面量格式化字符串,f-string 格式化字符串以f或者F开头,后面跟着字符串,字符串中的表达式用大括号 {} 包起来,它会将变量或表达式计算后的值替换进去。

先看一个例子

>>> name = 'lucy'
>>> print(f'my name is {name}')
my name is lucy
>>> 

f-string不同于前几种方式,这种方式有很多好用的特性,如下

上一篇 下一篇

猜你喜欢

热点阅读