美文网首页
python学习笔记之--字符串格式化的几种方法

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

作者: itsenlin | 来源:发表于2022-01-17 20:41 被阅读0次

占位符

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 = {}, b = {}'.format(a, b))
    a = test, b = 1
    >>>
    
  • 通过参数位置标号来对应
    >>> print('b = {1}, a = {0}'.format(a, b))
    b = 1, a = test
    >>>
    
  • 通过参数名字对应
    >>> print('b = {1}, a = {0}, server = {server}'.format(a, b, server='www.jianshu.com'))
    b = 1, a = test, server = www.jianshu.com
    >>>
    
  • 根据元组元素对应
    >>> print('b = {0[1]}, a = {0[0]}, c = {1[0]}, d = {1[1]}'.format((a, b),(3, 4)))
    b = 1, a = test, c = 3, d = 4
    >>> 
    

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

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

>>> 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不同于前几种方式,这种方式有很多好用的特性,如下

  • {}中可以做表达求值
    >>> a = 1
    >>> b = 2
    >>> print(f'a + b = {a+b}')
    a + b = 3
    >>> 
    
  • {}中可以调用函数
    >>> name = 'lucy'
    >>> print(f'my name is {name.upper()}')
    my name is LUCY
    >>> 
    
  • {}中使用或者
    保证{}内外使用的不一样即可,如下
    >>> print(f'test {"str"}')
    test str
    >>> print(f"test {'str'}")
    test str
    >>> 
    
  • {}中需要同时使用,则需要外部字符串使用文档字符串符号’‘’或者”“”
    >>> print(f'''{"it's name"} is dododo''')
    it's name is dododo
    >>> 
    
  • {}想作为字符输出,有两种方式:使用{{}}进行转换;将{}放到字符串中,如下
    >>> print(f'{{}}')
    {}
    >>> print(f'{"{}"}')
    {}
    >>> 
    
  • {}中不允许出现\即使作为函数参数;必须使用的话,可以将包含\的内容放到一个变量里,如下
    >>> f'print the {"\n"}'
      File "<stdin>", line 1
    SyntaxError: f-string expression part cannot include a backslash
    >>> newline='\n'
    >>> f'print the {newline}'
    'print the \n'
    >>> 
    
    >>>f'newline is: {ord('\n')}'
      File "<stdin>", line 1
        f'newline is: {ord('\n')}'
                                 ^
    SyntaxError: unexpected character after line continuation character
    >>> newline = ord('\n')
    >>> f'newline is: {newline}'
    'newline is: 10'
    >>> 
    
  • f-string可以用于多行字符串,有两种方式:使用连接符\; 使用doc字符串,如下
    >>> f'My name is {name}, ' \
    ... f'I\'m {age}'
    "My name is alex, I'm 27"
    >>> 
    >>> f'''My name is {name}, 
    ... I'm {age}'''
    "My name is alex, \nI'm 27"
    >>> 
    
  • 格式描述符
    与format内置函数类似,使用格式{content:format};其中格式如果使用默认的可以省略:format
    具体可以参考文章自定义格式一节

相关文章

  • Python ☞ day 3

    Python学习笔记之 字符串 & 列表 & 元组 & 字典 字符串 什么是字符串? 字符串运算 字符串方法 列表...

  • Python中使用生成器实现杨辉三角

    其中输出部分运用了字符串的格式化知识,在我的另一篇简文《Python学习笔记》中有记录python中字符串的格式化...

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

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

  • 格式化字符串

    python 字符串格式化的相关知识。 我们格式化构建字符串可以有3种方法: 元组占位符 字符串的format方法...

  • python基础知识(3)

    python字符串 python转义字符 python字符串运算符 python字符串格式化 python格式化操...

  • 今日事今日毕

    python学习: 格式化字符串:占位符%(%s表示字符串,%d表示整数等等);‘{}’.format格式化。...

  • Python格式化字符串打印

    格式化打印 可以对字符串格式化处理的手段:字符串方法类C风格的%打印输出方法Python特有的format函数 F...

  • 浅谈Python中的格式化字符%s format f

    背景 在Python环境中,有3种方法格式化字符串,分别是%s,format和f,这些格式化字符串方法各有其优劣势...

  • Python中的字符串

    Python中的字符串 对Python中的字符串常用函数的笔记, 方便查用. 格式化操作符% %通过匹配不同的字符...

  • format格式化函数

    Usage: 自 python2.6 开始,新增了一种格式化字符串的方法,增强了格式化字符串的功能。 基本用法是以...

网友评论

      本文标题:python学习笔记之--字符串格式化的几种方法

      本文链接:https://www.haomeiwen.com/subject/mwgfhrtx.html